快速查找表中的行的java算法
我有一个包含以下字段的文档:
- 字段1
- 字段2
- 字段3
- 字段4
我有以下表格结构:
field1 | field2 | field3 | field4 || result
--------------------------------------------------
foo bar MC
foo test1 MR
test2 test3 OM
foo test1 bar CM
当一个文档输入时,字段1为foo,字段2(空值),字段3为bar,应选择结果MC。 当一个文档进来时,字段1是foo,字段2是test1,字段3是bar,结果CM应该被选择
当然,您可以检查每一列并保持匹配行处于打开状态,直到循环每一行。 但是,这个表结构可能会变得非常大,我正在寻找某种算法来解决上述问题,以一种性能良好的方式
有什么想法吗
# 1 楼答案
对于任何这样的字符串搜索,最快的选项是基数树。创建4个基数树,每个字段一个,其中树的叶子是值参与的记录的排序列表。例如,对于字段1,如果搜索Foo,它应该返回类似{1,2,4}的列表,表明Foo位于字段1的记录1,2和4中。结果是你将有4组数字,它们的交点就是答案
求交可以在线性时间内完成,因为它们是按顺序排列的。下面是一个简单的排序集求交算法,可以在C中实现这一点:
# 2 楼答案
正如@MarkoTopolnik所写,RDBMS做你想做的事情。但是,如果您仍然想要实现自己的算法,一个选项是创建一个树:级别1是
field1
,级别2是field2
,等等。每个分支是表中的一行。如果你只有两个字段,它看起来像这样:您可以在每个级别使用哈希表实现此树。首先,您有一个哈希表,其中
field1
值作为键,hastable作为值。这些哈希表以field2
作为键,以result
作为值。由于允许null
作为值,因此必须使用HashMap
而不是Hashtable