c++ - 算法 - 具有最近路径前缀回退的查找树

标签 c++ algorithm data-structures stl search-tree

我正在寻找一种算法来解决一个问题,在该算法中,我维护一个树结构,我需要在该树结构上找到数据节点的最接近匹配项。如果没有完全匹配,则回退到最接近的前缀。

例如,如果说我有以下结构,其中单词(单词中的数字)是分支,方括号中的数字是数据(叶节点);我正在寻找一种算法,该算法会返回如下表所示的结果集。请注意路径分隔符是 ">"

           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++(STLboost)的库;但仅仅为此目的指向一个漂亮的算法也同样好。

最佳答案

你正在寻找一个三元搜索树

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

关于c++ - 算法 - 具有最近路径前缀回退的查找树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19120928/

相关文章:

c++ - QML 项未呈现

给定最大流量找到最小切割的算法

检测 "clusters"点的算法

java - 为什么检查哈希集是否已作为 boolean 值添加返回 false

java - 并发映射按具有快速增量值操作的值排序

c++ - GLM 相机 X、Y 旋转问题引入 Z 旋转

c++ - 在 UWP 应用程序中使用 DataTemplate 时出现问题(崩溃,未设置数据)

c++ - 在 C++ 中创建带状矩阵

java - 检查两条有限线是否相交

c++ - 加泰罗尼亚数字,递归函数时间复杂度