以下是问题:
有5个排序列表A,B,C,D,E,它们具有相同的长度n。问题是找到一个算法,该算法可以在O(logn)时间内对这5个列表进行中值。我正在考虑一个大致的想法,但我无法弄清楚它需要的确切复杂性。
假设A,B,C,D,E的中位数是a,b,c,d,e。我们有a<b<c<d<e
。很明显,我可以扔掉阵列A的前半部分和阵列E的后半部分。现在我有5个新阵列:B,C,D保持不变,每个都有n个数字; A'和E'每个都有n / 2个数字。然后我将A'和E'的中位数计算为'和e',将它们与b,c,d进行比较。如果5个中位数的新顺序为a'<b<e'<c<d
,那么我将通过'(n / 4个数字)的前半部分和数组D的最后n / 4个数,因为我们需要丢弃相同的数字最终中位数的两边。这个过程继续......
我有种感觉算法是O(logn)。但我不知道确切的证据。在第一个登录步骤中,我们肯定可以将候选数字减少到3n,将5个列表中的所有剩余数字相加。我们第一次踢出n个数字,第二次至少有n / 2个数字,第三次是n / 4个数字,依此类推。但是,在我得到3n个剩余数字后,我不知道如何分析。
这个算法能不能给我O(logn)?
答案 0 :(得分:2)
是的,它实际上可以。看看那些陈述