相关疑难解决方法(0)

如何使用堆找到线性时间内的数字中位数?

维基百科说:

选择算法:使用堆可以在线性时间内完成最小值,最大值,最小值和最大值,中值或甚至第k个最大元素的查找.

它说的只是它可以完成,而不是如何完成.

你能给我一些关于如何使用堆来完成这项工作的开始吗?

algorithm heap time-complexity median

50
推荐指数
1
解决办法
5万
查看次数

找到N ^ 2个数字的中位数,其中有N个存储器

我试图了解分布式计算,并遇到了一个查找大量数字中位数的问题:

假设我们有一大组数字(假设元素数量是N*K),它们不能适合内存(大小为N).我们如何找到这些数据的中位数?假设在存储器上执行的操作是独立的,即我们可以认为每个K机器最多可以处理N个元素.

我认为中位数的中位数可用于此目的.我们可以一次将N个数字加载到内存中.我们O(logN)及时找到该集合的中位数并保存.

然后我们保存所有这些K中位数并找出中位数的中位数.此外O(logK),到目前为止,复杂性一直是O(K*logN + logK).

但这个中位数的中位数只是一个近似的中位数.我认为将它用作获得最佳案例性能的支点是最佳的,但为此我们需要将所有N*K数字拟合到内存中.

现在我们有一个很好的近似支点,我们怎样才能找到集合的实际中位数?

algorithm optimization median median-of-medians

10
推荐指数
1
解决办法
973
查看次数

找到有限空间中值的概率

这是StackOverflow 问题的衍生产品.

假设您有一个固定数量k的存储位置,以及两个计数器的空间.您将收到ñ随机顺序的项目(的所有排列ň项目也同样可能).收到每个项目后,您可以将其存储在k个位置之一(丢弃之前存储的值之一),或丢弃该项目.您也可以递增或递减任一计数器.无法检索任何丢弃的项目.

问题是

  1. 什么是最大化您找到确切中位数的概率的策略?
  2. 这个概率是多少?

显然,如果k> n/2,我们可以找到中位数.一般来说,试图保持丢弃的高值的数量等于丢弃的低值的数量的相同策略应该是最佳的,但我不确定如何证明它,也不知道如何找出它找到的概率中位数.

同样感兴趣的是我们不知道的情况下ñ但要知道的概率分布ñ.

编辑: 现在假设值是不同的(没有重复.)但是,如果你也可以解决非独特的情况,那将是令人印象深刻的.

algorithm probability

9
推荐指数
1
解决办法
948
查看次数