對於我們當地的選舉限制,聽衆中有人提出一個問題,然後候選人輪流回答。主持人決定候選人應該爲每個問題回答的順序。在選舉中對響應者的順序進行排序的算法
有可能會是在hustings 5名候選人,儘管它可能高達7或儘可能少的4
主機要生產最公平的順序對考生回答問題,讓一個候選人不比其他候選人回答第一或最後更頻繁。另外,他希望考生前後交談,大致平均分配。
(我已經指定各候選人A之間的信 - E,然後考生將帽子借鑑晚上來選擇他們的信。)
因此,舉例來說:
- ABCDE其次是ADCBE會很糟糕,因爲A開始並且E完成兩次。
- ABCDE後跟ABECD會很糟糕,因爲B跟隨A和D跟隨C兩次。
- ABCDE後跟DCEBA將滿足所有要求。
的問題的數量是可變的 - 第4和第15
之間的主機想要一個可重複的過程,可以由選舉委員會在必要時進行審覈,以確定該選擇過程是公平的可以在任何地方。這排除了我的「產生一個隨機列表,然後手動編輯它」的最初方法。性能並不重要 - 在具有16GB RAM的四核機器上運行最長可能需要10分鐘。
到目前爲止,我曾嘗試:
- 就產生一個隨機列表。這往往會因爲約束而失敗 - 如果我繼續運行它,直到我得到一個感覺正確的列表,它就無法達到「可重現」的要求。
- 對所有組合遞歸調用
levenshtein
算法,並採用給出最高總分的算法。但是有這麼多可能的組合,不可能嘗試所有這些組合。它也不會產生很好的結果 - 它讓很多'B連續3次'出現類型問題。
我意識到我可能過度設計解決方案,但是我對如何解決這個問題感興趣,如果它需要堅如磐石的話。
所以輸入會是候選人數'N'和問題的數量'Q'和輸出應該是大小'Q'的列表,其中每個項目是'N'候選人排列? – Simon
@Simon如果你有5名候選人(A,B,C,d和E)和三個問題,我需要一個像'[ 「ABCDE」, 「BAEDC」, 「DEBCA」]'顯示什麼樣的順序每一個列表考生應該回答每一個問題。 –