【发布时间】:2015-06-21 08:32:43
【问题描述】:
我正在为这个问题写一个算法,算法很简单,我已经写了代码但是我看不到任何可能的优化:
我有一个装有 100 块石头的桶和 5 个孩子用它来装饰他们的沙堡。 每个孩子每隔一定时间重复捡石头,每个孩子都是独立的,更多的孩子可以同时捡石头,总共有5个孩子:
- 埃里克每 5 分钟捡起一块石头
- 马克每 10 分钟捡起一块石头
- 劳拉每 7 分钟捡起一块石头
- 艾玛每 3 分钟捡起一块石头
- 弗兰克每 3 分钟捡起一块石头
清空桶到底需要多少分钟?
更清楚一点:10 分钟后,Erick 有两颗石子(第 5 分钟和第 10 分钟),而 Emma 有 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,但我不能使用此代码处理一个有 100 万块石头和 500 个孩子的桶。
我能看到的唯一优化是将 mod 操作转换为 sum/add 操作,因为除法/乘法更昂贵。我可以使用 numpy 数组等等,但没有什么可以真正加快这个过程。
我试图将这个问题改编为我的算法教科书中描述的一些典型已知问题,但没有运气。
【问题讨论】:
标签: python algorithm optimization time-complexity