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;
        }
    }
  • 相关阅读:
    rem适配方案flexble.js
    Vue 的生命周期
    前端性能优化方案
    html2canvas解决保存图片模糊问题
    css弹窗动画效果
    数字键盘
    iOS 提交审核注意事项
    js屏幕滚动防抖和节流
    父元素设置固定宽度并设置overflow:scroll,如何让子元素撑开父元素
    存储过程
  • 原文地址:https://www.cnblogs.com/xhan/p/2328955.html
Copyright © 2011-2022 走看看