[英]Dividing players into "winners" and "losers": how to prove that greedy solution gives optimal result?
我有一個問題,說明以下內容:
n 個玩家(其中 n 是偶數)要互相玩游戲。 不一定每個人都會玩,但玩家只能與其他人玩一次。 如果兩個人決定互相比賽,我們就會有一個輸家和一個贏家。 然后我希望將我的 n 個玩家分成兩組,大小為 n/2:贏家 (W) 和輸家 (L)。 我希望我的贏家系列中的所有玩家都不會輸給我的輸家系列中的某個人。
這是不可能的。 對於 4 個玩家和游戲 p1 對 p2,p2 對 p3,p3 對 p4 和 p4 贏對 p1 那么沒有辦法將玩家划分為 W 和 L。我做下一個最好的事情,這是我希望盡量減少我的錯誤:W 中的玩家輸給 L 中的玩家的玩家對數(不互相對抗不算輸)。
我(認為)我找到了這個問題的貪婪解決方案。 我只是根據他們的輸球數量對玩家進行排序,並將輸球最少的人放在我的 W 組中,並將其余的人填入 L。我如何證明我的貪婪方法實際上是最佳的? 我已經做了幾次隨機測試,我可以證明我的方法會給出一個可行的解決方案,但我不知道如何證明這實際上可以最大限度地減少我的錯誤。
你的貪心算法不是最優的。 它失敗了:
W L
=== ===
A vs x
B vs y
C vs z
B vs A
C vs A
x vs y
最優分區是 W=(A,B,C), L=(x,y,z),但是你會把A
放在輸家集合中,因為他有 2 個損失。
你說你做了一些隨機測試。 您如何驗證您的貪婪算法為這些測試產生了正確的結果?
考慮以下結果:
Winner Loser
Adam John
Bob John
John Charles
John David
John Ernest
John Frank
John George
我們統計損失並按升序排序:
Player Losses
Adam 0
Bob 0
Charles 1
David 1
Ernest 1
Frank 1
George 1
John 2
您的算法按如下方式划分玩家:
Winners Losers
Adam Ernest
Bob Frank
Charles George
David John
錯誤是 (Charles, John) 和 (David, John); 有兩個錯誤。 考慮以下划分:
Winners Losers
Adam David
Bob Ernest
Charles Frank
John George
這種划分沒有錯誤:沒有輸給輸家的贏家。 這是一個更好的划分,錯誤更少; 所以你的算法,如上所述,不是最優的。
你的算法的根本問題是它只考慮損失的數量; 對於這種算法,多產的玩家可能看起來比實際情況更糟,這僅僅是因為他們比其他人輸得更多,盡管可能贏了更多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.