Архипов писал(а):
1) Проблема теоретическая или практическая?
как отразится на алгоритме поиска если я отвечу теоретическая? или практическая?
Архипов писал(а):
2) Если искомое слово "караул" единственно (уникально) в словаре, то поиск продолжится до того места в словаре, где искомое слово находится (на этом цикл обрывается).
но в словаре 50000 и перед "караул" м.стоять 49999.
Архипов писал(а):
3) Если искомое слово "караул" не уникально (повторяется), то придется перебрать все 50000 слов, чтобы найти все слова "караул" в этом файле.
это значит, в цикле по словарю каждый раз заниматься поиском в всех данных. а если их 500тыс мб? плохая идея.
ну, если свежих мыслей нет, возьмусь пользовать TST-деревья.
есть правда мысль построить автомат.
оч.быстро для ищет ограниченный набор путей (посимвольно, в каждом столбце), но всё потОм сводится к поиску единственного существующего пути, если он есть.
Добавлено спустя 16 минут 35 секунд:Cave писал(а):
vv40inЭ-э, простите,
![$n$ $n$](https://dxdy-02.korotkov.co.uk/f/5/5/a/55a049b8f161ae7cfeb0197d75aff96782.png)
у вас - это что? За логарифм числа слов в словаре, как и за логарифм длины текста поиска задачу, разумеется, не решить, ибо в общем случае нужно хотя бы раз прочитать весь текст и пробежаться по всему словарю (например, если все его слова встречаются).
Поэтому предлагаю использовать именно алгоритм поиска подстроки в строке, который делает предобработку за время
![$O(m)$ $O(m)$](https://dxdy-02.korotkov.co.uk/f/5/e/1/5e12273846712182a9633dc4c62b94f782.png)
и использует столько же памяти, а затем за
![$O(n)$ $O(n)$](https://dxdy-02.korotkov.co.uk/f/1/f/0/1f08ccc9cd7309ba1e756c3d9345ad9f82.png)
с
![$O(1)$ $O(1)$](https://dxdy-02.korotkov.co.uk/f/1/e/2/1e2f931ee6c0b8e7a51a7b0d123d514f82.png)
памяти решает задачу,
![$n$ $n$](https://dxdy-02.korotkov.co.uk/f/5/5/a/55a049b8f161ae7cfeb0197d75aff96782.png)
- длина текста,
![$m$ $m$](https://dxdy-01.korotkov.co.uk/f/0/e/5/0e51a2dede42189d77627c4d742822c382.png)
- длина слова в словаре. Под эти критерии подходит, например, алгоритм Кнута-Морриса-Пратта.
Вы тоже предлагаете в цикл по словарю с просмотром внутри него всего массива данных? или я не так понял?
TST обеспечит
![O(M*log(N)) O(M*log(N))](https://dxdy-04.korotkov.co.uk/f/7/f/6/7f631f6b82fbd1957e251c6c6be4ed4282.png)
. или нет, лучше чем:
![O(M*log(256)) O(M*log(256))](https://dxdy-03.korotkov.co.uk/f/e/1/7/e172610e4a29c410f2a098956ec2f8d982.png)
. (256 - длина алфавита). или лучше чем:
![O(M/2*log(0x10000)) O(M/2*log(0x10000))](https://dxdy-01.korotkov.co.uk/f/c/2/2/c225bc4c68a0f171fa79fe326fc33d2d82.png)
0x10000-если производить выборку и сранение словами.
я как раз ищу идеи получше. начальник сказал, что они есть. или мы не поняли др.друга (т.е. он меня не захотел услышать - я ведь не красноречив
![Smile :)](./images/smilies/icon_smile.gif)
).