这是一个家庭作业问题,我不是那个找到合理性但我正在努力的事情!
我的尝试:
平均情况:
树子例程将位于以下索引处:
我假设具有重复项的子程序将等于(n-k)
所以,
T(n) = (n-k)-1 + Sigma from 0 until (n-k-1) [ T(i) + T (i-k)]
然后我不确定我将如何继续:S
这可能是一个非常糟糕的开始:$ 希望能找到帮助
答案 0 :(得分:5)
首先,你不应该看一下平均情况,因为O(nk)
的上限可以证明是最坏的情况,这是一个更强有力的陈述。
您应该查看最大可能的递归深度。在正常快速排序中,最大深度为n
。对于每个级别,完成的操作总数为O(n)
,在最坏的情况下总共提供O(n^2)
。
在这里,不难证明最大可能深度是k
(因为每个级别将移除一个唯一值),这导致总共O(nk)
。
答案 1 :(得分:3)
我没有复杂的正规教育。但如果你把它看作一个数学问题,你可以证明它是一个数学证明。
对于所有排序算法, n 元素的最佳案例场景始终为 O(n),因为要对 n 元素进行排序至少考虑一次。现在,对于快速排序的特定优化,您所做的是简化了问题,因为现在,您只是对唯一值进行排序:与枢轴相同的所有值都已被视为已排序,并且由于其性质,快速排序将保证每个唯一值将在操作中的某个点作为枢轴,因此这消除了重复。
这意味着对于 N 大小列表,quicksort必须执行一些操作 N 次(对于列表中的每个位置一次),并且因为它正在尝试对list,该操作试图在列表中找到该值的位置,但由于您实际上只处理了唯一值,并且存在 k ,因此快速排序算法必须执行 k 每个元素的比较。因此,它使用 k 唯一元素为 N 大小的列表执行 Nk 操作。
总结: