Код: Выделить всё
l = [[i, i, 1] for i in range(1,1000000)]
def collatz(li):
for el in li:
if el[1] == 1:
li.remove(el)
elif el[1] % 2 == 0:
el[1] = el[1] / 2
el[2] += 1
elif el[1] % 2 == 1:
el[1] = 3*el[1] + 1
el[2] += 1
return li
while len(collatz(l)) >= 2:
l = collatz(l)
print l
Самая длинная последовательность Коллатца
Задача 14
Для набора положительных целых чисел определена следующая итерационная последовательность:
Код: Выделить всё
n → n/2 (n is even)
n → 3n + 1 (n is odd)
Код: Выделить всё
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
Какое начальное число меньше одного миллиона дает самую длинную цепочку?
ПРИМЕЧАНИЕ: Как только цепочка начинается, члены могут превышать один миллион.
Я написал частичный, потому что на самом деле он не выводит решение, так как я не могу запустить его во всем диапазоне от 1 до 1000000. Это слишком медленно — в последний раз, когда я завершал процесс, это заняло более 20 минут. Я только что начал заниматься Python и программированием в целом (около 2 недель), и мне нужно понять, какую очевидную ошибку я совершаю с точки зрения эффективности. Я погуглил некоторые решения, и даже средние работают на порядки быстрее, чем мои. Так чего же мне здесь не хватает? Есть ли какие-нибудь ссылки на литературу, чтобы избежать повторения тех же ошибок в будущем?
Подробнее здесь: https://stackoverflow.com/questions/295 ... efficiency
Мобильная версия