Почему дек Pypy такой медленный?Python

Программы на Python
Ответить
Anonymous
 Почему дек Pypy такой медленный?

Сообщение Anonymous »

Вот (немного беспорядочная) попытка решения задачи Эйлера 49.

Я должен прямо сказать, что deque не был хорошим выбором! Моя идея заключалась в том, что сокращение набора простых чисел для проверки членства приведет к ускорению цикла. Однако, когда я понял, что мне следовало использовать набор (и не беспокоиться об удалении элементов), я получил ускорение в 60 раз.

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

from collections import deque
from itertools import permutations
from .sieve import sieve_of_erastothenes  # my own implementation of the Sieve of Erastothenes

primes = deque(prime for prime in sieve_of_erastothenes(10000) if prime > 1000 and prime != 1487)  # all four-digit primes except 1487
try:
while True:
prime = primes.popleft()  # decrease the length of primes each time to speed up membership test
for inc in xrange(1,10000 + 1 - (2 * prime)):  # this limit ensures we don't end up with results > 10000
inc1 = prime + inc
inc2 = prime + 2*inc

if inc1 in primes and inc2 in primes:
primestr = str(prime)
perms = set(''.join(tup) for tup in permutations(primestr))  # because permutations() returns tuples
inc1str = str(inc1)
inc2str = str(inc2)
if inc1str in perms and inc2str in perms:
print primestr + inc1str + inc2str
raise IOError  # I chose IOError because it's unlikely to be raised
# by anything else in the block. Exceptions are an easy
# way to break out of nested loops.
except IOError:
pass
Во всяком случае, прежде чем я решил использовать набор, я попробовал его в Pypy. Результаты оказались весьма неожиданными:

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

$ time python "problem49-deque.py"
296962999629

real    1m3.429s
user    0m49.779s
sys 0m0.335s

$ time pypy-c "problem49-deque.py"
296962999629

real    5m52.736s
user    5m15.608s
sys 0m1.509s
Почему Pypy в этом коде более чем в пять раз медленнее? Я предполагаю, что виновата версия deque Pypy (потому что она работает быстрее в версии set), но я понятия не имею, почему это так.

Подробнее здесь: https://stackoverflow.com/questions/134 ... ue-so-slow
Ответить

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

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

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

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

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