Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Нужен самый быстрый алгоритм поиска


Автор: dimon444 25.7.2011, 16:36
Назовите самые  быстрые алгоритмы поиска подтекста в большом объеме текста. Например : дано 12 000 000 писем , нужно чтобы максимум за 0.5 сек 60 юзеров могли получить результат поиска ?????????????????????

Автор: gahcep 15.8.2011, 07:33
Алгоритмов на самом деле огромное количество, поэтому стоит просто поискать...

Но интерес лично у меня вызвало дерево ван Эмде Боаса. 

Скорее всего вам такое не подойдет, но тем не менее ...

Дерево ван Эмде Боаса - это ассоциативный массив, который позволяет хранить целые числа в диапазоне [0; U), где U = 2k, или, числа, состоящие не более чем из k бит. Главная особенность этой структуры — выполнение всех операций за время O(log(log(U))) независимо от количества хранящихся в ней элементов. Список поддерживающихся операций: insert, remove, getmin, getmax, find, findnext, findprevious.

Естественно, раз такая скорость, в жертву приносится память... 

Кстати, с числами легко можно связать любую информацию, хоть и текстовую.

В вашем случае можно изучить каким образом реализован алгоритм и на его основе сделать свой, хтя на мой взгляд, лучше посмотреть Кнута smile


Автор: esperanto 15.8.2011, 12:11
Зачем смотреть Кнута?

Автор: gahcep 16.8.2011, 08:08
Зачем читать Кнута? Хм... даже затрудняюсь ответить... Может быть потому, что там есть почти все ответы на то, какие алгоритмы есть, как они используются и приведены примеры. А если посмотреть содержимое томов с номерком более чем 3, то еще можно подчерпнуть что-нибудь интересное. 

Алгоритм поиска подтекста в тексте = алгоритм поиска подстроки в строке, не, а?

Добавлено через 3 минуты и 48 секунд
dimon444, у вас в вопросе две проблемы. 

Первая - это алгоритм поиска строки в подстроке - одна задача, давно решенная. 

Вторая - в скорости работы с жестким диском (или что у вас там используется), а точнее в оптимизации чтения с него, ибо 12 000 000 писем перед тем, как обработать еще открыть надо...


Автор: esperanto 16.8.2011, 09:42
Цитата(gahcep @ 15.8.2011,  07:33)
Алгоритмов на самом деле огромное количество, поэтому стоит просто поискать...

Но интерес лично у меня вызвало дерево ван Эмде Боаса. 

Скорее всего вам такое не подойдет, но тем не менее ...

Дерево ван Эмде Боаса - это ассоциативный массив, который позволяет хранить целые числа в диапазоне [0; U), где U = 2k, или, числа, состоящие не более чем из k бит. Главная особенность этой структуры — выполнение всех операций за время O(log(log(U))) независимо от количества хранящихся в ней элементов. Список поддерживающихся операций: insert, remove, getmin, getmax, find, findnext, findprevious.

Естественно, раз такая скорость, в жертву приносится память... 

Кстати, с числами легко можно связать любую информацию, хоть и текстовую.

В вашем случае можно изучить каким образом реализован алгоритм и на его основе сделать свой, хтя на мой взгляд, лучше посмотреть Кнута smile

Кстати, с числами легко можно связать любую информацию, хоть и текстовую
"

Конечно, текст размером в х, кодируется числом размером тетта(х) ваш алгоритм, обеспечит поиск за время 
тета(лог лог( 10 в степени х) что посути лог(х) и не надо никакого асоциатавного поиска.


-----------
Кнут здесь не подойдет, он достаточно давно и тяжело написан. Есть современные и более понятные учебники.

Автор: volatile 16.8.2011, 12:50
Цитата(esperanto @  16.8.2011,  09:42 Найти цитируемый пост)
Кнут здесь не подойдет, он достаточно давно и тяжело написан.

Дядька до сих пор пишет, и исправляет уже изданные тома.
5-й том он планирует закончить только к 2015 году.
На домашней страничке у него, есть исправления ошибок и дополнительные главы для первых 3-ех томов, не вошедшие в издание.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)