在Algorithm Design Manual中,有这样的消费税
4-26考虑使用排序n 0和1的序列的问题 比较。对于两个值x和y的每个比较,算法 学习x< y,x = y或x>你持有。
(a)给出一个算法,在最坏的情况下进行n-1次比较。 表明您的算法是最佳的。
(b)给出算法在平均情况下进行2n / 3次比较的排序 (假设n个输入中的每一个都是0或1,概率相等)。节目 你的算法是最优的。
对于(a),我认为这很容易。我可以选择[n-1]作为枢轴,然后执行类似于快速分区的操作,扫描0到n - 2,找到左侧全部为0且右侧全部为1的中间点,这需要进行n - 1次比较
但对于(b),我无法得到线索。它说“n个输入中的每一个都是0或1,概率相等”,所以我想我可以假设0和1的数字相等?但是我怎样才能得到与1/3相关的结果?将整个阵列分成3组?
由于
答案 0 :(得分:11)
" 0或1,概率相等"是"平均值"案件。其他情况可能会有更糟糕的时机。
提示1:2/3 = 1/2 + 1/8 + 1/32 + 1/128 + ......
提示2:将序列视为一对序列并比较每对中的项目。一半将返回平等;一半不会。在不相等的一半中,你知道该对中的哪个项目是0,哪个是1,所以那些不需要进行比较。
答案 1 :(得分:0)
不,这意味着在任何位置,您都有相同的机会(概率)输入值为0或1.这为您提供了第一条线索: 您的算法将被随机化。 强>
运行时将依赖于某个随机变量,您需要采用预期值来获取 平均复杂度 。请注意,在这种情况下,您必须在复杂性分析期间进行详细说明,因为它们需要精确的常量(2/3n
而不仅仅是O(n)
)
修改强>
的 提示 即可。在排序后的数组(最后得到的数组)中,只有两种可能的元素,才会发生变化。