首页 新闻 会员 周边

内存中的有序集合的查询是不是二分法就够了

0
悬赏园豆:30 [已解决问题] 解决于 2020-08-28 15:55

大小在百万级以上,只有新增和查询2个操作,新增操作非常频繁,当然也是按照顺序新增的,查询操作不频繁,但是要求速度尽量快,当我想要查询集合中的某个符合条件的数据的话,直接用二分法就行了吧,其他的什么平衡二叉树,红黑树之类的没啥必要吧,二叉树本身就是基于二分法原理的,而且平衡二叉树红黑树的新增还需要进行平衡,我研究了下,感觉很复杂,搞得一个脑袋两个大。最开始本来打算用Hash表,但是我这边还有范围查找的需求,hash表貌似没法进行范围查找的,而二分法魔改下就能支持范围查找了,所以最后就确定用二分法了,主要是对算法不是很了解,就想问下,我这样理解应该没啥问题吧,还有没有更好的有序集合的精确and范围查询算法啊

WmW的主页 WmW | 菜鸟二级 | 园豆:424
提问于:2020-08-27 17:57
< >
分享
最佳答案
0

我认为没问题,二分法和二叉树的查询复杂度是一样的,如果能保证数据新增是有序的,我觉得你的方法可以。,最好先做个模拟实验,看看性能如何。

收获园豆:30
会长 | 专家六级 |园豆:12401 | 2020-08-28 09:33

嗯,测试模拟,1亿条数据,73毫秒就精确匹配到了,应该算是很快了

WmW | 园豆:424 (菜鸟二级) | 2020-08-28 15:54

@WmW: 新增的速度测试了吗?C#里的List我记得是基于数组的,如果非常频繁地调用Add方法,可能需要频繁地复制数组,看看速度怎么样

会长 | 园豆:12401 (专家六级) | 2020-08-28 15:55

@会长: 测试的1亿条数据插入消耗了15.021秒,然后继续插入1百万条,耗时134毫秒,正常情况下我是隔2秒插入一条,只在程序初始化的时候,读取持久化数据的时候可能会达到累计的百万级数据,单独测试加载百万级数据时耗时174毫秒,所以对于我这边基本应该够用了。后测试连续10次插入1024*1024条数据,分别157,200,237,172,461,130,177,150,401,135毫秒,461和401应该是进行了数组拷贝操作

WmW | 园豆:424 (菜鸟二级) | 2020-08-28 16:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册