c# – 用于确定特定范围内有多少元素的数据结构?
发布时间:2020-12-16 00:22:40 所属栏目:百科 来源:网络整理
导读:可以说我有一组数字.我需要计算给定范围内的数量. 例如:对于给定集:{3,4,7,10,15,30}: numbers in range (0,6) = 2numbers in range (8,40) = 3numbers in range (0,50) = 6 什么样的结构最适合这个目的?最好的意思是指具有最快执行所述操作的结构.此外,
可以说我有一组数字.我需要计算给定范围内的数量.
例如:对于给定集:{3,4,7,10,15,30}: numbers in range (0,6) = 2 numbers in range (8,40) = 3 numbers in range (0,50) = 6 什么样的结构最适合这个目的?最好的意思是指具有最快执行所述操作的结构.此外,快速插入和删除也将受到赞赏…… 解决方法
如果您的数据集不会随着时间的推移而改变,那么templatetypedef的答案很好,但您提到需要快速插入和删除. [编辑:David Eisenstat解释了对每个节点计数增加的平衡二叉树的两次O(log n)搜索如何有效地计算给定范围内的元素.
在任何情况下,如果需要快速更新,则问题的理想数据结构是Fenwick tree或BIT树.此数据结构为以下两个操作提供O(log n)保证: >查询:计算0到任何给定数字之间的元素数. 两个查询调用允许您使用count(j) – count(i)计算任何给定范围[i,j]中的元素数. Fenwick树上的查询和更新都只涉及简单的按位操作和单个数组上的查找,因此使用这种数据结构将在O(log n)上产生非常有竞争力的常量 – 我预计它将比维持平衡更快更新下的二叉树,需要指针操作和树重新平衡. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |