我正在寻找一个很好的算法来管理带有通配符的树形式的配置变量(x.y.z,x。 .z,x。。*等)。
搜索时间是否优于O(N)? (插入/删除时间不是那么重要)。
目前我有一个平面列表(对键=>值),我搜索所有匹配的值,然后按重要性对它们进行排序(基本上,更多通配符=>不太重要)并选择一个得分最高的。
答案 0 :(得分:4)
正如墓志铭指出的那样,trie或radix-tree可以解决这个问题。基数树通常会更有效率。
我猜有很多实现。看看我的实施here。
lookup()将允许您搜索给定的密钥。
startwith()将返回所有那些以传递的字符串开头的键及其对应的值。它实际上是一张外卡搜索。
答案 1 :(得分:1)
你想要的是一个trie-datastructure或radix-tree。当您想要搜索通配符时,只需将trie与trie一起使用即可。你可以在这里找到一个简单的解决方案:code.dogmap.org/kart。