Я нахожусь после алгоритма для задачи, где я поддерживаю древовидную структуру, в которой мне нужно найти наиболее близкое соответствие для узла данных. Если нет точного совпадения, он возвращается к ближайшему префиксу.
Например, если, скажем, у меня есть структура ниже, где слова (число в словах) являются ветвями, а числа в квадратных скобках являются данными (листовой узел); Я после алгоритма, который вернется с набором результатов, как показано в таблице ниже. Обратите внимание, что разделитель пути ">"
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
на базе) библиотека; но просто указатели на изящный алгоритм для этой цели были бы одинаково хороши.
Вы ищете троичное поисковое дерево
Других решений пока нет …