公平的席位分配”中的“比例加惯例”分配方法和Q值法以及d`Hondt方法分配的matlab实现

比例加惯例

function mingejieguo=bilijiaguanli(renshu,minge)
renshuzonghe=sum(renshu);
bilifenpei=renshu./renshuzonghe.*minge;
bilifenpei_zhengshu=floor(bilifenpei);
bilifenpei_yushu=bilifenpei-bilifenpei_zhengshu;
shengyufenpei=minge-sum(bilifenpei_zhengshu);
[bilifenpei_yushu_paixv,idx]=sort(bilifenpei,'ascend');
for i=1:shengyufenpei
    bilifenpei_zhengshu(idx(i))=bilifenpei_zhengshu(idx(i))+1;
end
mingejieguo=bilifenpei_zhengshu;

Q值法

function mingejieguo=Qzhifa(renshu,minge,q)
%一般q=2
%先算之前占据的席位
renshuzonghe=sum(renshu);
bilifenpei=renshu./renshuzonghe.*minge;
bilifenpei_zhengshu=floor(bilifenpei);
shengyufenpei=minge-sum(bilifenpei_zhengshu);
fenpei=bilifenpei_zhengshu;
while shengyufenpei>0
    Q=(renshu.^q)./(bilifenpei_zhengshu.*(bilifenpei_zhengshu+1));%算Q值
    [Q_paixv,idx1]=sort(Q,'descend');
    for i=1:1:1
        fenpei(idx1(i))=fenpei(idx1(i))+1;
    end
    shengyufenpei=shengyufenpei-1;
end
mingejieguo=fenpei;

d`Hondt方法

%%d`Hondt方法
function mingejieguo=Dhondt(renshu,minge)
zushu=size(renshu);
kongjuzhen=zeros(zushu(2),minge);
for i=1:1:zushu(2)
    for j=1:1:minge
        kongjuzhen(i,j)=renshu(i)./j;
    end
end
zhongjianxiangliang=kongjuzhen(:);
di_minge=maxk(zhongjianxiangliang,minge);
zuixiaozhi=di_minge(minge);
shuaixuanjuzhen=kongjuzhen>zuixiaozhi;
mingejieguo=sum(shuaixuanjuzhen');

综合结果比较

%%
%10个席位
renshu=[235 333 432];
minge=10;
q=2;
mingejieguo1=bilijiaguanli(renshu,minge);
mingejieguo2=Qzhifa(renshu,minge,q);
mingejieguo3=Dhondt(renshu,minge);
%%
%15个席位
renshu=[235 333 432];%人数
minge=15;%名额
q=2;
mingejieguo4=bilijiaguanli(renshu,minge);
mingejieguo5=Qzhifa(renshu,minge,q);
mingejieguo6=Dhondt(renshu,minge);
disp(mingejieguo4);
disp(mingejieguo5);
disp(mingejieguo6);
%%
%综合结果
disp('    Method          10minge          15minge')
disp('————————————————————————')
disp([' 比例加惯例   ' num2str(mingejieguo1) '          ' num2str(mingejieguo4)])
disp([' Q值法        ' num2str(mingejieguo2) '          ' num2str(mingejieguo5)])
disp([' D’Hondt     ' num2str(mingejieguo3) '          ' num2str(mingejieguo6)])
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大聪明blank

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值