近日人力咨詢一個投票的問題:21個評委從30個候選人選出近20個名額。選舉規則是每個評委選有20票,30個候選人按照得票數排序,選取超過額度票數 的前20個人。如何選擇額定票數,既能起門檻的作用,阻擋得票數過低的人通過,又要允許20左右的個人通過,避免出現只有幾個人通過的尷尬情況。
這是個概率問題,需要計算至少20個人得票數都大于額定票數(記為e)的概率(記為p),它和額定票數有反向關系。在選定一個較大概率如0.95,則問題表述為求max{e|p>=0.95}。
直接推導p關于e的表達式較為困難,但可以采取數值實驗的近似計算其數值。如模擬10000次投票,統計至少有20個人的得票數超過額定票數e的次數,再計算其頻率,就可以分析出最佳額定票數。
附件代碼中有兩個程序,vote.exe和analyse.exe,前者模擬多次投票,后者分析e和p的數值。
> vote.exe 30 20 21 10000 > 1.txt
> analyse.exe 20 12 13 14 15 < 1.txt
第一條指令,模擬10000次投票,并將數據存放在1.txt中,第二條指令,則分析1.txt的數據,計算超過20人的得票數超過12 13 14 15的頻率是多少。也可以合并為:
> vote.exe 30 20 21 10000 | analyse.exe 20 12 13 14 15
運行結果為:
1.000,0.984,0.176,0.000,
從本次計算的結果看,13票為較好的額定票數。
上述計算是假設30個候選人的實力相同,被選中的可能性相同。如果有熱門候選人情況就不同,如有5個人的被選中的概率比其他人高2倍,則運行結果為:
13票則不是好的結果。
問題沒有解決,但本文在此作結。