【问题标题】:algorithm - lookup tree with closest path prefix fallbackalgorithm - 具有最近路径前缀后备的查找树
【发布时间】:2013-10-01 16:06:24
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    您正在寻找三元搜索树

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

    【讨论】:

    • 看起来不错,但空间效率并不是我的首要任务。我一直在尝试trie 算法,但我无法让它按照我想要的方式精确地工作。
    • 是的,TST 和 Trie 是相关的。我已经很长时间没有在 C++ 中工作了,所以恐怕我不能推荐一个可靠的实现。我确实找到了这个:code.google.com/p/ternary-search-tree/wiki/TernarySearchTree
    猜你喜欢
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    相关资源
    最近更新 更多