[問題] 遍歷對戰效率問題

看板Python作者 (吸收正能量)時間9月前 (2023/07/15 17:14), 編輯推噓0(1111)
留言13則, 4人參與, 9月前最新討論串1/3 (看更多)
問題: 昨天使用chatgpt請它協助我下面敘述: 八支隊伍A,B,C,D,E,F,G,任兩隊比賽一場,比賽結果只有三種:勝、敗、和,規則是勝 利者積分得2分,敗者積分得0分,平手兩隊各積分得1分。 請利用pyhton幫我模擬出上述問題,遍歷所有對戰統計情形, 若滿足隊伍A總積分值至少贏過4個隊伍的總積分值時,A隊伍與其他隊伍的勝、敗、和之 數量,然後取全部比完後滿足條件的最小A總積分值 --- 它回復:請問您希望考慮到所有可能的對戰結果嗎? 這樣的模擬可能需要考慮到非常龐大的組合數量,因此執行時間可能會很長。 如果您願意等待,我們可以進行完整的模擬,但請注意執行時間可能會很久。 或者,如果您有特定的條件或限制,我們可以根據那些條件進行模擬,以加快 計算速度。請讓我知道您的選擇。 --- 我加上一些敘述: 限制為:比完C(8,2)=28場後,滿足隊伍A總積分值至少贏過4個隊伍的總積分值時,A隊伍 的所有可能積分 --- 它回復: from itertools import combinations teams = ['A', 'B', 'C', 'D', 'E', 'F', 'G'] # 隊伍名稱 total_games = 28 # 總比賽場次 min_a_score = float('inf') # A隊的最小積分值,初始設定為正無窮大 def calculate_scores(results): scores = {team: 0 for team in teams} # 初始化隊伍得分 for (team1, team2), result in results.items(): if result == 'win': scores[team1] += 2 scores[team2] += 0 elif result == 'loss': scores[team1] += 0 scores[team2] += 2 else: # tie scores[team1] += 1 scores[team2] += 1 return scores # 遍歷所有可能的對戰結果 results = {} for teams_comb in combinations(teams, 2): for result in ['win', 'loss', 'tie']: results[teams_comb] = result # 計算每種對戰結果的積分情況 scores = calculate_scores(results) # 檢查是否滿足條件 sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True) a_winning_teams = [team for team, score in sorted_scores[:4]] # A贏過的隊伍 if 'A' in a_winning_teams: if len(a_winning_teams) == 4 and scores['A'] < min_a_score: min_a_score = scores['A'] print(f"A隊在至少贏過4個隊伍的情況下的最小積分值為:{min_a_score}") 但這跑出來根本不行,後來想想會不會是所有結果總共有3^28太大 (不過不是才大約14位數,沒道理電腦無法處理10^99次方問題) 它code內 results[teams_comb] = result 這樣寫怪怪的吧,沒有辦法記錄到 誰勝、負還是和 想問看看有沒有高手能給我修程式的方向,另外這種問題是不是用套件itertool比較省 事?(套件應該也是基於一些演算法論文等做出來的,時間效率應該不差吧?!) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.27.210.24 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1689412472.A.02E.html

07/15 17:57, 9月前 , 1F
垃圾進垃圾出
07/15 17:57, 1F

07/16 01:11, 9月前 , 2F
你為什麼會期待 ChatGPT 在一次 prompt 就一定給你正確程
07/16 01:11, 2F

07/16 01:12, 9月前 , 3F
式?熟練使用的工程師都知道本來就要檢查它出來的邏輯然後
07/16 01:12, 3F

07/16 01:12, 9月前 , 4F
看要手動修正或對它提出勘誤建議讓它修正啊XD
07/16 01:12, 4F

07/16 01:13, 9月前 , 5F
它的優點就是很快幫你把看起來可行的框架寫出來了,剩下細
07/16 01:13, 5F

07/16 01:13, 9月前 , 6F
節如果你都看出問題在哪了,修正很快吧
07/16 01:13, 6F

07/16 15:49, 9月前 , 7F
有點想吐槽一下3^28
07/16 15:49, 7F

07/16 15:57, 9月前 , 8F
10^99又是哪裡來的神秘數字?按部就班學吧
07/16 15:57, 8F

07/17 01:56, 9月前 , 9F
results[teams_comb] = result 看起來就很 hashTable,
07/17 01:56, 9F

07/17 01:56, 9月前 , 10F
你先學怎麼寫程式吧。
07/17 01:56, 10F

07/17 09:24, 9月前 , 11F
我猜他不懂的是為什麼那樣可以記錄誰勝誰負,他沒注意程
07/17 09:24, 11F

07/17 09:24, 9月前 , 12F
式裡就是紀錄一個對戰 Pair 中第一隊的勝負,而記了一隊
07/17 09:24, 12F

07/17 09:24, 9月前 , 13F
,第二隊的勝負當然也就知道了這個邏輯XD
07/17 09:24, 13F
文章代碼(AID): #1aicDu0k (Python)
文章代碼(AID): #1aicDu0k (Python)