【发布时间】:2011-07-29 16:26:41
【问题描述】:
我需要计算一个必须动态维护和经常查找的一维直方图。我的一个想法是用数据保持一个有序数组(因为这样我可以确定 O(1) 中的百分位数,这足以快速找到具有非均匀箱的直方图,每个箱内的点数量完全相同)。
那么,有没有一种小于 O(N) 的方法将一个数字插入到有序数组中,同时保持有序?
我想答案是众所周知的,但我对算法知之甚少(从事数值计算的物理学家很少这样做)。
【问题讨论】:
-
如果它实际上是一个数组(而不是例如一个链表),那么实际插入本身必然是 O(n) (因为你需要将所有后续元素移动一个)。搜索找到要插入的位置显然可以少于 O(n).
-
数据是完全随机的还是倾向于遵循一些统计方程?如果是后者,考虑到这一点,您将获得更好的优化。您将需要概率分布的反函数。
-
如果你没有说明你使用的语言,你可能需要说明基本
array操作的运行时间,否则人们会认为它是O(1)查找,O(index)插入, ETC。;这可能是你想要的。 -
你存储的是整数还是浮点数?
-
嗨。我正在存储浮点数,不知道它们是如何分布的(这几乎是我的程序最终必须确定的)并且我正在使用 C++。
标签: algorithm sorting data-structures