用于收集字符串和整数范围的哈希方法

时间:2017-04-04 17:50:47

标签: algorithm hash hashcode string-hashing interval-tree

我有一个数据,例如以下内容: enter image description here

我需要将内容与为Content& amp;提供的输入相匹配。范围字段返回匹配的行。正如您所看到的,“内容”字段是一组字符串&范围字段是两个数字之间的范围。我正在寻找散列数据,用于匹配散列输入。正在考虑通过收集单个字符串hashcode&将其存储为Content字段。对于Range字段,我正在考虑使用间隔树。但接下来的挑战是当我对内容输入和输入进行哈希处理时范围输入我将如何找到该哈希码是否存在于为内容字段中的字符串集合生成的哈希码中。范围字段也是如此。

如果有其他替代方法可以实现,请告诉我。感谢。

1 个答案:

答案 0 :(得分:1)

您的问题有一个简单的解决方案:反向索引。

对于内容中的每个项目,创建将“内容”映射到“行ID”的倒排索引,即创建另一个包含2列的表。内容(字符串),RowID(逗号分隔的字符串)。

对于第一行,在该表中添加条目{Azd,1},{Zax,1},{Gfd,1} ...,{Mni,1}。对于第二行,添加新Content字符串的条目。对于第一行中已存在的Content字符串(例如,'Gfd'),只需将新行id附加到您为第一行创建的条目。所以,Gfd的行看起来像{Gfd,1,2}。

完成处理后,您将拥有将“Content”字符串映射到此内容字符串所在的所有行的表。

使用相同的反向索引将“Range”映射到“RowID”并创建另一个Range(int),RowIDs(逗号分隔的字符串)表。

现在,您将拥有一个表,其行将告知哪个行ID存在哪个范围。

最后,对于您必须处理的每个查询,从反向索引表中获取相应的“内容”和“范围”行,并执行这些逗号分隔列表的交集。你会得到答案。