LINUX.ORG.RU

История изменений

Исправление 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. Начать слушать что Вам говорят, гуглить и читать книги.

  3. Выкатить связное описание концепта метапрога и учесть замечания (но без п 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. Начать слушать что Вам говорят, гуглить и читать книги.

  3. Выкатить связное описание концепта метапрога и учесть замечания (но без п 1ю2 это невозможно в принципе).

А пока что у Вас карго-культ программирования в чистом виде.