![]() |
|
|
![]()
|
|
| Antonik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 22.3.2010 Репутация: нет Всего: нет |
Здравствуйте! Подскажите, в чем суть поиска методом луча (в книге Кнута он называется еще и как trie search) ? Это обычный последовательный поиск?
|
|||
|
||||
| maxdiver |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
Кажется, что trie и луч - совершенно разные вещи
Скажем, для чисел 12, 13, 2459, 301, 302, 310 trie выглядит следующим образом: ![]() Ну и понятно, как в таком trie искать число: спускаться по дереву (сначала найти первую цифру, потом вторую, и т.д.). Время работы - O(кол-ва цифр в числе). |
|||
|
||||
| Antonik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 22.3.2010 Репутация: нет Всего: нет |
maxdiver,спасибо за понятное объяснение!А при реализации на Дельфи искомый образец должен быть строковой переменной?
|
|||
|
||||
| maxdiver |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
Да, удобнее всего работать с числами как со строками. Собственно, trie и строится-то по любым строкам, и не важно, числа это или нет.
Ну а само дерево хранить надо будет как-нибудь так:
Код примерный, паскаль сто лет назад забыл |
|||
|
||||
| Antonik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 22.3.2010 Репутация: нет Всего: нет |
maxdiver, спасибо! А сам поиск в массиве как делать? Проверять,есть ли следующий символ?
|
|||
|
||||
| maxdiver |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
Ну это не массив, а дерево. Т.е. Vertex содержит описание одной вершины дерева. Надо ввести единственную переменную, хранящую указатель на корень дерева:
Т.е. v^.son[c] для какой-то вершины v бора есть либо указатель на соответствующего сына (сына по букве c) или nil, если такого сына нет. Скажем, чтобы добавить в trie число 12, надо сделать:
Поиск числа, заданного своим строковым представлением s, совсем прост:
|
||||||
|
|||||||
| Antonik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 22.3.2010 Репутация: нет Всего: нет |
Спасибо!!!
|
|||
|
||||
| Antonik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 22.3.2010 Репутация: нет Всего: нет |
maxdiver!, а как забить весь массив в дерево? и вывести номер элемента?
|
|||
|
||||
| maxdiver |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
Ну начать с того, что сортировать заранее ничего не надо, потому что бор он обладает замечательным свойством, что автоматически, в силу своей структуры, сортирует все числа
Как добавлять - я написал выше, на примере числа 12. Вы уж сами постарайтесь сделать. |
|||
|
||||
| Antonik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 22.3.2010 Репутация: нет Всего: нет |
maxdiver, просто у меня компилятор выдает, что массив с-(char) несовместим с типом PVertex
Добавлено позже maxdiver, просто у меня компилятор выдает, что массив с-(char) несовместим с типом PVertex |
|||
|
||||
| maxdiver |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
И на какой строчке он это выдаёт?
|
|||
|
||||
| Antonik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 22.3.2010 Репутация: нет Всего: нет |
|
|||
|
||||
| maxdiver |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
c : char
И добавляются элементы тоже неправильно. Ещё раз посмотрите на внешний вид бора, на примеры добавляемых элементов. При добавлении нового числа в бор надо создавать промежуточные вершины. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |