Поиск:

Ответ в темуСоздание новой темы Создание опроса
> структура с быстрым доступом к строкам 
:(
    Опции темы
trupca
Дата 12.10.2009, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 22.7.2008

Репутация: нет
Всего: нет



можно перефразировать топик как "структура с быстрым доступом к содержащимся в ней строкам"?

передо мной стала проблема - нужно разобрать входящий поток данных (данные идут строками) на наличие в ней совпадений с некоторыми данными словами (включая и их словоформы). мне представилось что решение данной задачи - это организация некой структуры данных, которая представляла бы из себя аналог дерева в вершине которого, допустим, находится буква "д", а ноды второго и последующих уровней были пусты или содержали буквы являющиеся вторыми (третьими, четвёртыми и т.д.) знаками в искомом слове. пример для наглядности:
   о м а
д 
   е н ь
в котором вершиной "дерева" является буква "д", ноды второго уровня это "о" и "е" и т.д.
смысл же данной конструкции будет более понятен на примере её использования: допустим у нас есть строка "добрый день!" и нам нужно найти в ней вхождения слова "день". алгоритм для которого придумана эта структура будет посимвольно читать строку и сравнивать каждый прочитанный элемент с вершиной дерева и если будет найдено совпадение, то будет проверяться наличие на втором уровне нодов второго символа после совпадения (после буквы "д"). то бишь, программа читая строку, обнаружит первое совпадение в первом символе, затем во втором, но не найдя на третьем уровне нодов буквы "б", перейдёт к поиску совпадений с вершиной дерева, пока не наткнётся на совпадение "день" и "день" после чего сообщит что было найдено совпадение, {блок операторов, ...} и не продолжит делать тоже самое пока не встретит конец строки.

ну и теперь вопрос. xD
у этого есть какое-то конкретное название? просто я не находил ничего подобного в литературе и мне не от чего оттолкнуться в поисках реализации подобной структуры, конечно, если она существует в природе. ну и хотя бы примерных оценок производительности этих структуры и алгоритма.
есть ли более простые (но в достаточной мере эффективные) способы эту проблему? конечно подобные изыскания очень интересны, но всё таки надо двигать проект.
PM MAIL   Вверх
Void
Дата 12.10.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 3
Всего: 173





--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
AVA12
Дата 12.10.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 4.5.2008

Репутация: 1
Всего: 4



Такие деревья обычно называют "trie" (по-русски - "бор" или "префиксное дерево"). Сложность поиска всех ключей - линейная от длины текста и максимальной длины ключа. Правда, за счет большого расхода памяти. Можно свести расход памяти к минимуму за счет усложнения алгоритма и некоторого увеличения времени работы, пример - "Patricia trie" aka "radix tree".
PM ICQ Jabber   Вверх
Antiquar
Дата 12.10.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 14.9.2009

Репутация: нет
Всего: нет



Понятный и известный алгоритм поиска по дереву.
При правильной реализации скорость будет на уровне других алгоритмов,
если конечно количество искомых слов (словоформ) не достигает десятков тысяч.
Я же, когда занимался подобным, для ускорения работы делал еще первичное дерево -
числовое. И в его узлы вносил преобразованные в число первые 4 символа искомых
слов. Дало увеличение скорости на 20-30%. Но недостаток понятный - нельзя было
задать слово для поиска менее 4 символов.
PM MAIL   Вверх
trupca
Дата 16.10.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 22.7.2008

Репутация: нет
Всего: нет



огромное спасибо. поиск по действующим названиям алгоритма и структуры данных срезу же дал результат.

ps
как всё было бы проще если бы каждый автор не придумывал собственное название для данной структуры...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.