我正在研究一个问题的算法,在这个问题上我维护一个树结构,我需要找到一个与数据节点最接近的匹配。如果没有完全匹配,则它会回退到最接近的前缀。
例如,如果说我有以下结构,其中单词(单词中的数字)是分支,带方括号的数字是数据(叶节点);我正在使用一个算法,该算法将返回结果集,如下表所示。请注意,路径分隔符为">"
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
)库;但只是为了这个目的指向一个漂亮的算法也同样好。