zoukankan      html  css  js  c++  java
  • largest remainder method java impl

    /**
     * 最大余数分摊算法
     * 
    @author xhan
     *{
    @link=http://en.wikipedia.org/wiki/Largest_remainder_method}
     
    */
    public class ShareCalculator {

        public static  double[] calculate(double[] votes , double totalSeats) {
            double[] seats = new double[votes.length];
            double[] reminders = new double[votes.length];
            
            double totalVotes = 0;
            for (double vote : votes) {
                totalVotes += vote;
            }
            
            double hareQuota = totalVotes / totalSeats ;
            double allocatedSeats = 0;
            
            for(int i = 0; i < votes.length ;i++) {
                double voteDivHareQuota = votes[i] / hareQuota;
                seats[i] = Math.floor(voteDivHareQuota);
                reminders[i] = voteDivHareQuota - seats[i];
                allocatedSeats += seats[i];
            }

            double leftSeats = totalSeats - allocatedSeats;
            
            //allocate left seats to party with largest reminder 
            for (int i = 0; i < leftSeats; i++) {
                double max = 0;
                int maxIndex = 0;
                for (int j = 0; j < reminders.length; j++) {
                    if(reminders[j] > max) {
                        max = reminders[j];
                        maxIndex = j;
                    }
                }
                seats[maxIndex] += 1;
                reminders[maxIndex] = 0;
            }
            
            return seats;
        }
    }
  • 相关阅读:
    人月神话 另外一面
    python论文爬取(五)
    Python词云
    python安装wordcloud库出错及其解决办法(使用命令行安装)
    人月神话 祸起萧墙
    python论文爬取(四)
    个人课程总结
    python论文爬取(三)
    python论文爬取(一)
    win10子系统ubuntu开机启动ssh服务
  • 原文地址:https://www.cnblogs.com/xhan/p/2328955.html
Copyright © 2011-2022 走看看