我正在寻找一种针对范围查询和空间使用进行高度优化的字符串(UTF-8)索引的数据结构。谢谢!
精化: 我有我需要索引的任意长度的utf-8字符串列表。我将只使用范围查询。
实施例: 我有弦 - 苹果,猿,黑,冷,黑。
查询将是这样的 - “以desc顺序从2到3元素获取”或“获取以'ap'开头的字符串”
答案 0 :(得分:3)
由于你提到“相对静态”,一个简单的排序数组可以做你想要的一切,并且在空间和时间方面都得到高度优化。
“以desc顺序从2到3元素获取”只是查找相应的数组索引。
“获取以'ap'开头的字符串”可以通过二进制搜索来完成。搜索将在以'ap'开头的第一个字符串处或之前停止,从那里开始,您只需扫描直到找到所有这些字符串。
答案 1 :(得分:1)
您检查过Tries了吗?
结构应该符合您的需要 - 范围和'开始'应该很容易,而且内存消耗也很好。
答案 2 :(得分:0)
我喜欢卡萨布兰卡的答案:由于您的数据相对静态,因此排序列表应该没问题。
如果您想要更容易更新的内容,可以使用blist.sortedlist。
您甚至可以使用ZODB的BTrees,它已经包含了您想要的大部分功能(例如搜索范围)。