有一百万条长度为17的数字字符串,如何快速的查找到是否有某条数字串?期望查找时间越短越好!有没有用过lucene的啊,使用这个能否做出来呀?
解决方案 »
- jsp 多判断语句怎么写?
- 写JSP时遇到的问题,请给我解答下。
- 菜鸟求:防copy禁止直接使用 源码修改
- thisForm.action 和 showModalDialog之间的冲突问题
- N个数据库间定期导数据的问题,大家我个思路巴谢谢!散100分
- 编译JAVA程序,报的提示!!请教各位!
- tomcat中怎么配置数据源????
- examfile="<%@include file='/include/"
- 有谁知道新版百度文库的浏览怎么弄得吗(不是以前那个FlexPaper显示Flash的)
- Axis 调用多个https的webservice的问题
- jsp开发中,要对数据库的内容进行加密,应该在哪一层使用加密算法
- 急求:关于实体类的回话Bean
就是做个索引,自己写索引也可以
UP!
一级索引:
1. 取得一个字符串(像字词里这个字符串是一个单词,有一个很长的解释)和他在文件中的位置构成一个key/value对X
2. 把X按key顺序排序并存储到文件里
3. 把X加载到内在里,然后进行二分查找二级索引:
对一级索引再按上面的原理做生成一个索引:不是对每一个词了,例如按26个字母来或者头2个,头3个字母来做索引。
这里的搜索是返回的是搜索包含这个索引的最小范围的一级索引里的索引数据
然后再对上面加载进来的数据进行二分查找。
虽然用hash值做快速定位是个好主意,但是这里不能直接用hashmap,如果用hashmap的话,那速度太慢了。hashmap通过hash值定位之后,后面还是要遍历的。100万条数据量不算多,完全可以一次性放入内存,并且排序一下,然后使用二分查找的话效率应该还是很高的。当然这种算法是为了解决那种数据一次准备,然后可以很多次查询的那种。如果你只需要查找一次的话,还是直接遍历算了。
虽然用hash值做快速定位是个好主意,但是这里不能直接用hashmap,如果用hashmap的话,那速度太慢了。hashmap通过hash值定位之后,后面还是要遍历的。100万条数据量不算多,完全可以一次性放入内存,并且排序一下,然后使用二分查找的话效率应该还是很高的。当然这种算法是为了解决那种数据一次准备,然后可以很多次查询的那种。如果你只需要查找一次的话,还是直接遍历算了。我试过这样做。效率是不错。查询时间微秒级。但是因为内存受限了,只有一百多兆的内存,必须节省呢。100w条长度为17的数字串都占了17M了。
或者放到hashset里,速度更快。