假设我们给出了一个n个数字的列表,我们希望找到一个大于或等于中位数的数字。我想学习这个问题的最坏情况复杂性的下限。我知道找到中位数的下限是3(n-1)/ 2。但是当我们想要找到 大于或等于 中位数的数字时,它是否会相同。
答案 0 :(得分:1)
我认为列表前半部分(+1)的最大元素将具有此功能。 如果您检查n / 2 + 1元素并存储最大元素,则最多可能有n / 2-1元素大于您的中位数候选者。因此,所选数字将位于数字的上半部分,这意味着:它大于或等于中位数。
所以你可以在n/2+1
找到它。
你需要:
最坏的情况: n / 2比较和n / 2 + 1分配。
最佳案例: n / 2比较和1个任务。
Edit:
回答你的评论:
是。如果n
是偶数,则任何随机元素将大于或等于中位数,概率至少为0.5
。为什么"至少0.5"?可能存在测试用例,其中几乎所有数字都等于中位数。在这些情况下,概率会更高。如果您想知道正确的概率,您必须检查所有元素。在具有不同数字的其他测试用例中,任何随机元素都将位于有序列表的上半部分,概率为0.5。
如果n
为奇数,则随机数将具有此特征,概率为> 0.5。它的遗留n/2-0.5
元素小于中位数且n/2+0.5
元素>> =中位数(在常见的测试用例中)。如果你想0.5是最小概率,你应该做一些修改。我有一个没有证据的想法,如果它不起作用,也许有人会谅解我:从列表中选择2个随机值。较小的将是一个至少0.5概率的有效解决方案。