История изменений
Исправление AntonI, (текущая версия) :
Какая возможность? Возможность ненужности питона? Вам 100500 раз говорили разные люди зачем питон и почему, Вы их не слушали. Результат налицо - питон порвал Вашу поделку в клочья, хотя вообще то питон для таких вещей не предназначен.
Кстати лобовая реализация на питоне без хэшей у меня занимает 5.8 сек, т.е. она в полтора раза медленнее Вашей - и это при том что на питоне, в отличии от Вашего кода, юзается заведомо невыгодный алгоритм! И занимает это на питоне ПЯТЬ строк
#!/usr/bin/python
import random
s0, r100 = ''.join(map(chr, range(97,123))), range(100)
genstr = lambda r: ''.join(s0[int(random.random()*26)] for i in r)
stable = [genstr(r100) for i in xrange(100000)]
print sum(map(lambda i, g=genstr(range(20)): sum(g in s for s in stable), range(1000)))
Сухой остаток. Если Вы и правда хотите сделать что то работоспособное (пусть даже это будет метапрог) а не быть вечным позорищем всего ЛОРа, Вам нужно:
-
Осознать как много Вы не знаете из того что Вам нужно для работы даже над метапрогом.
-
Начать слушать что Вам говорят, гуглить и читать книги.
-
Выкатить связное описание концепта метапрога и учесть замечания (но без п 1ю2 это невозможно в принципе).
А пока что у Вас карго-культ программирования в чистом виде.
Исходная версия AntonI, :
Какая возможность? Возможность ненужности питона? Вам 100500 раз говорили разные люди зачем питон и почему, Вы их не слушали. Результат налицо - питон порвал Вашу поделку в клочья, хотя вообще то питон для таких вещей не предназначен.
Кстати лобовая реализация на питоне без хэшей у меня занимает 5.8 сек, т.е. она в полтора раза медленнее Вашей - и это при том что на питоне, в отличии от Вашего кода, юзается заведомо невыгодный алгоритм! И занимает это на питоне 21 строчку
#!/usr/bin/python
import sys, random, time, array
s0 = ''.join(map(chr, range(97,123)))
r100, r20, r80 = range(100), range(20), range(80)
t0 = time.time()
stable = [''.join(s0[int(random.random()*26)] for j in r100) for i in xrange(100000)]
t1 = time.time()
print 'generate strings', t1-t0
matches = 0
for i in range(1000):
g = ''.join(s0[int(random.random()*26)] for k in r20)
for s in stable: matches += g in s
t2 = time.time()
print 'search time', t2-t1
print 'total time', t2-t0
print 'matches', matches
Сухой остаток. Если Вы и правда хотите сделать что то работоспособное (пусть даже это будет метапрог) а не быть вечным позорищем всего ЛОРа, Вам нужно:
-
Осознать как много Вы не знаете из того что Вам нужно для работы даже над метапрогом.
-
Начать слушать что Вам говорят, гуглить и читать книги.
-
Выкатить связное описание концепта метапрога и учесть замечания (но без п 1ю2 это невозможно в принципе).
А пока что у Вас карго-культ программирования в чистом виде.