Алгоритм поиска дерева с префиксом ближайшего пути

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

Например, если, скажем, у меня есть структура ниже, где слова (число в словах) являются ветвями, а числа в квадратных скобках являются данными (листовой узел); Я после алгоритма, который вернется с набором результатов, как показано в таблице ниже. Обратите внимание, что разделитель пути ">"

           one - [1]
/\
two  five
/\       \
eight  [12]    nine
/                  \
[128]                [159]+---------------------------+--------+---------------------------------------------+
| path                      | result |                                             |
+---------------------------+--------+---------------------------------------------+
| one > five > nine         |    159 | whole path matches                          |
| one > five                |      1 | partial (only "one" matched)                |
| one > two > eight         |    128 | whole path matches                          |
| one > two                 |     12 | whole path matches                          |
| one > two > eight > seven |    128 | partial (only "one > two > eight" matched)  |
| one > two > seven         |     12 | partial (only "one > two" matched)          |
+---------------------------+--------+---------------------------------------------+

Я действительно после C ++ ( STL или же boost на базе) библиотека; но просто указатели на изящный алгоритм для этой цели были бы одинаково хороши.

0

Решение

Вы ищете троичное поисковое дерево

http://en.wikipedia.org/wiki/Ternary_search_tree

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]