Эффективность кода Project Euler 14Python

Программы на Python
Ответить
Anonymous
 Эффективность кода Project Euler 14

Сообщение Anonymous »

Код: Выделить всё

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, написанное на Python.


Самая длинная последовательность Коллатца

Задача 14

Для набора положительных целых чисел определена следующая итерационная последовательность:

Код: Выделить всё

n → n/2 (n is even)
n → 3n + 1 (n is odd)
Используя приведенное выше правило и начиная с 13, мы генерируем следующую последовательность:

Код: Выделить всё

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
Видно, что эта последовательность (начиная с 13 и заканчивая 1) содержит 10 членов. Хотя это еще не доказано (проблема Коллатца), считается, что все начальные числа заканчиваются на 1.

Какое начальное число меньше одного миллиона дает самую длинную цепочку?

ПРИМЕЧАНИЕ: Как только цепочка начинается, члены могут превышать один миллион.


Я написал частичный, потому что на самом деле он не выводит решение, так как я не могу запустить его во всем диапазоне от 1 до 1000000. Это слишком медленно — в последний раз, когда я завершал процесс, это заняло более 20 минут. Я только что начал заниматься Python и программированием в целом (около 2 недель), и мне нужно понять, какую очевидную ошибку я совершаю с точки зрения эффективности. Я погуглил некоторые решения, и даже средние работают на порядки быстрее, чем мои. Так чего же мне здесь не хватает? Есть ли какие-нибудь ссылки на литературу, чтобы избежать повторения тех же ошибок в будущем?

Подробнее здесь: https://stackoverflow.com/questions/295 ... efficiency
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»