本篇博文為追憶以前寫過的算法系列第四篇
溫故知新
本篇於2009年發表於百度博客,當時還沒接觸CSDN。所以是文學和技術博客混淆,只是這個程序博文訪問量突破2000,有不少網友評論互動。應該對非常多人有一定的幫助。
程序介紹了數學建模中經典問題的兩種解法,即席位分配問題!
%適用於全部情況 BY Gu clear all clc %慣例Q值法分配席位,wy為席位數。ps為人數總和,R為分配方案 wy=19; P=[103 63 34] %菜單選項 MENUN=menu('選擇方法','慣例Q值法','dhondt法','都用'); %慣例Q值法 if (MENUN==1||MENUN==3)==1 n=size(P,2); ps=sum(P); RS=0; for i=1:n R(i)=fix(P(i)/ps*wy); RS=RS+R(i); end wy1=wy-RS; for i=1:wy1 for j=1:n Q(j,i)=P(j).^2/(R(j)*(R(j)+1)); end t=Q(1,i); a=1; for m=2:n if Q(m,i)>t t=Q(m,i); a=m; end end R(a)=R(a)+1; end disp('慣例Q值法席位分配為:') R end %d'hondt法………………………………………………………………………………$$ if (MENUN==2||MENUN==3)==1 zs=P; n=size(zs,2); for i=1:n for j=1:wy r(i,j)=zs(i)/j; end end t=r(:)'; T=sort(t,'descend'); min=T(wy); R1=zeros(1,n); for i=1:n for j=1:wy if r(i,j)>min R1(i)=R1(i)+1; end end end rest=wy-sum(R1);%剩余席位 %對剩余席位的分配處理 k=0; for i=1:n if k>=rest%席位分配完成,結束循環 break; end for j=1:wy if r(i,j)==min R1(i)=R1(i)+1; k=k+1;%對剩余席位分配計數 break; end end end disp ('dhondt法席位分配:') R1 end
原博文地址:http://hi.baidu.com/gujinjin2008/item/659fdb8a33c37354e73d1931