关于倒排索引,查询的结果求交集,急

Be_nurturing 2016-08-22 05:23:23
现在有一个问题就是关于倒排索引求交集的算法问题
中 = {2,5,8,10,12}
华 = {2,4,8,10}
人 = {8,10}
民 = {1,2,4,8,10,25}
共 = {3,6,8,10,11}
现在有这个多个关键字,这几个字是在同一片文章中出现的行数的索引(实际情况是每个字出现的位置有很多,这只是其中的一部分),我想找“中华人”这三个字共同出现的行数,肯定是对3个字同时出现的行数求交集,我想知道什么好的算法,对于这种多个字求交集的问题能快速的找出结果。如果用结合或是数组遍历的换数据量小还可以,对于数据量大,数字比较都多的情况就没有好的算法,有那个懂得大侠可以提供下思路或是算法。急
...全文
401 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Be_nurturing 2016-09-12
  • 打赏
  • 举报
回复
求高手帮忙分析下吧,一定要效率上高一些,也可以用lucene的源码分析下。
Be_nurturing 2016-08-25
  • 打赏
  • 举报
回复
上边的只是个举例,我要做的的给一片文本文件做类似与lucene的倒排索引,然后查询时关键字都不固定的长度,对于动态的怎么确定那个数组是最短的还不能够确定。
bree06 2016-08-24
  • 打赏
  • 举报
回复
索引是有序的, 我的思路是先找出其中出现次数最少的字, 然后再分别取出行号去查找, 记下找到的下标, 第二个号行可以从这个行号的下一个开始查找. 为了提高效率第一个行号可以使用2分查找, 以后的行号使用顺序查找, 顺序查找的时候只要下一个大于当行号即查找失败. 比如<中华人>这三个字,人只出现了2次, 那么循环人的行号, 取第一个行号8 , 分别二分查找中和华中行号为8的下标, 其中"中"和"华"字8的下标都为2, 那查找第二个行号10的时候从下标3开始顺序查找. 这里下标3正好都找到了, 那么共同的行号就是人对应所有的行号. 假如华字的行号为华 = {2,4,8,11, 13, 56}, 那下标3为11 大于当前行号10, 所以查找失败. 将人的行号10标记为-1 表示未找到, 最后只需要统计 人的所有行号结果不为-1的行号即可
Be_nurturing 2016-08-23
  • 打赏
  • 举报
回复
自己顶!求高手帮忙

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧