我正在寫一個算法對於這個問題,算法很簡單,我已經寫的代碼,但我看不到任何可能的優化:優化的基於時間的算法
我有一個有100個石頭和5個使用它來裝飾沙堡的小孩。 每個孩子反覆拿起一塊石頭每一定的時間跨度,每個孩子都是獨立於他人,更多的孩子可以拿起在同一時間一塊石頭,有5個孩子合計:
- 埃裏克挑一塊石頭,每5分鐘
- 馬克拿起石每10分鐘
- 拉拉拿起石每7分鐘
- 艾瑪拿起石每3分鐘
- 弗蘭克拿起石每3分鐘
我們需要多少分鐘才能清空存儲桶?要更加清楚:10分鐘後,埃裏克有兩塊石頭(分鐘5和分鐘10),而艾瑪有3塊石頭(分鐘3,6和9)。
所以,10分鐘後的兒童有總共2 + 1 + 1 + 3 + 3 = 10結石,有90個結石剷鬥
這是我的代碼(Python 3中):
children_rate = [3, 3, 5, 7, 10]
bucket = 100
minutes = 0
while True:
minutes += 1
for child in children_rate:
if minutes % child == 0:
bucket -= 1
if bucket == 0:
print('bucket empty in',minutes,'minutes')
exit()
此代碼有效,在這種情況下,所需的分鐘數是91,但我不能使用此代碼處理一百萬個石頭和500個孩子的桶。
我可以看到的唯一優化是在總和/加操作中轉換mod操作,因爲分割/乘法更昂貴。我可以使用numpy數組等等,但沒有什麼能夠真正加速這個過程。
我試着將問題適應於我的算法教科書中描述的一些典型的知識問題,但沒有運氣。
由於問題被標記爲「python-3.x」,不應該將floor division設置爲「//」嗎? –