[Moscow.pm] Ускорение регэкспа

Anton Nikishaev me на lelf.lu
Пт Июл 12 06:08:23 PDT 2013


On Jul 12, 2013, at 10:43 AM, "Konstantin S. Uvarin" <khedin at gmail.com> wrote:

> Приветствую! 
> 
>  Как вариант: пилим строку субстрами, начиная с *каждого* символа, и
> строим хеш: 
> 
>  { 15_символов_подряд => [ вхождение, вхождение2, ... ] }
> 
>  Затем все ключи, указывающие на массив <5 просто выкидываем, а
> остальные проверяем, что они не слишком "тесные" (и выкидываем 
> лишние вхождения).
> 
>  Памяти сожрёт много, зато время, кажется, около линейного.
> 


Скорей O(n log n).

Вообще можно построить suffix tree, там сразу видно что повторяется и сколько раз.
Если нам плевать на перекрытия повторяющихся кусков можно ускориться до O(n)



>> Здравствуйте.
>> 
>> Есть регэксп /(.{15})(.+\1){5}/o . Написан, чтобы искать повторяющиеся
>> 6 раз и более подстроки длинной 15 и более символов. На большом 
> тексте
>> работает  очень  долго,  что объяснимо. Как бы его ускорить или 
> решить
>> задачу иначе?
>> 
>> -- 
>> С уважением,
>> Михаил                          mailto:postmaster at softsearch.ru
>> 
>> -- 
>> Moscow.pm mailing list
>> moscow-pm at pm.org | http://moscow.pm.org
>> 
> 
> --
> WBR,
> Konstantin S. Uvarin
> -- 
> Moscow.pm mailing list
> moscow-pm at pm.org | http://moscow.pm.org



Подробная информация о списке рассылки Moscow-pm