[問題] 遍歷對戰效率問題
問題:
昨天使用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,
1年前
, 1F
07/15 17:57, 1F
→
07/16 01:11,
1年前
, 2F
07/16 01:11, 2F
→
07/16 01:12,
1年前
, 3F
07/16 01:12, 3F
→
07/16 01:12,
1年前
, 4F
07/16 01:12, 4F
→
07/16 01:13,
1年前
, 5F
07/16 01:13, 5F
→
07/16 01:13,
1年前
, 6F
07/16 01:13, 6F
→
07/16 15:49,
1年前
, 7F
07/16 15:49, 7F
噓
07/16 15:57,
1年前
, 8F
07/16 15:57, 8F
→
07/17 01:56,
1年前
, 9F
07/17 01:56, 9F
→
07/17 01:56,
1年前
, 10F
07/17 01:56, 10F
推
07/17 09:24,
1年前
, 11F
07/17 09:24, 11F
→
07/17 09:24,
1年前
, 12F
07/17 09:24, 12F
→
07/17 09:24,
1年前
, 13F
07/17 09:24, 13F
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章