在合并排序中,每个元素的“除法”步骤的运行时间在CLRS中被视为 theta(1),即恒定时间。
我的困惑是:
假设 divide 是一项基本运算,并且需要恒定的时间C1。
现在,考虑伪代码
现在,第一次调用 MERGE-SORT 函数时,将需要 C1 来划分输入(注意:-我们不考虑时间通过合并功能) 并且此 MERGE-SORT 将输入的输入 lg(n)时间除以(),或者我们可以称其为lg((n))次) 因此,划分输入的总时间应为 C1 * lg(n) 就是 theta(lg(n))。
如果我们认为“划分步骤” 将需要 theta(1)时间(总体而言)
注意:lg已登录到以2为底的
P.S。 -对不起,因为我的英语还没到那个标准。欢迎进行修改:)
答案 0 :(得分:0)
对合并排序的基本理解是这样的-考虑一下,我们已经将数组的两部分进行了排序。我们可以在O(n)时间内将这两个部分合并。
从数学上讲,“合并排序”函数针对其一半(“分割”步骤)两次调用自身,然后将这两个部分合并(“征服”步骤)。
现在,如果我们通过使用适当的数学分析来解决此递归关系,则得到的关系如下:
这清楚地表明,花费O(1)时间的DIVIDE步骤称为n次,而合并所有各种大小的较小部分的总合并工作量为O(n logn),这是上限。因此,O(n logn)的复杂性(感谢Yves Daoust的澄清)。
但是,“除法”步骤仅花费O(1)次,即O(n)次。因此,除法的工作量为O(n)。
答案 1 :(得分:0)
除法的一步确实需要恒定的时间O(1)
。
但是与您的想法相反,总共有Θ(N)
个部门(1+2+4+8+...N/2
)。
无论如何,由于合并的总工作量为Θ(N Log N)
,因此不予考虑。