Algorithm 合并mergeSort和heapsort的算法的运行时间是多少?
我遇到了这个问题,它要求计算一个与mergeSort完全相同的算法的最坏运行时间,但两个递归调用中的一个被Heapsort替换 所以,我知道在mergesort中进行除法需要恒定的时间,并且合并是O(n)。Heapsort接受O(nlogn)。 这就是我得出的结论:T(n)=2T(n/2)+O((n/2)logn)+O(n)。Algorithm 合并mergeSort和heapsort的算法的运行时间是多少?,algorithm,sorting,mergesort,heapsort,Algorithm,Sorting,Mergesort,Heapsort,我遇到了这个问题,它要求计算一个与mergeSort完全相同的算法的最坏运行时间,但两个递归调用中的一个被Heapsort替换 所以,我知道在mergesort中进行除法需要恒定的时间,并且合并是O(n)。Heapsort接受O(nlogn)。 这就是我得出的结论:T(n)=2T(n/2)+O((n/2)logn)+O(n)。 我对O((n/2)logn)部分有一些疑问。是n还是n/2?我之所以写n/2,是因为我只在数组的一半上执行heapsort,但我不确定这是否正确。问题是关于运行时间,但它
我对O((n/2)logn)部分有一些疑问。是n还是n/2?我之所以写n/2,是因为我只在数组的一半上执行heapsort,但我不确定这是否正确。问题是关于运行时间,但它是否应该询问时间复杂性 由于提到了递归,这是一个关于自顶向下合并排序(与自底向上合并排序相反)的问题 对于按描述编写的代码,由于堆排序不是递归的,所以递归只发生在每个拆分子数组中的一个上。将调用Heap sort对大小为n/2、n/4、n/8、n/16等的子数组进行排序,在递归拆分的结果是大小为1的两个子数组之前,不会进行合并。在数组大小为2的幂的简单情况下,“合并排序”仅用于单个元素,大小为{1,2,4,8,…,n/8,n/4,n/2}的其余子数组按堆排序,然后合并
由于堆排序比合并排序慢,因此运行时间将更长,但时间复杂度仍为O(n log(n)),因为时间复杂度忽略了常量或较低的项因子。问题询问运行时间,但它是否应该询问时间复杂度 由于提到了递归,这是一个关于自顶向下合并排序(与自底向上合并排序相反)的问题 对于按描述编写的代码,由于堆排序不是递归的,所以递归只发生在每个拆分子数组中的一个上。将调用Heap sort对大小为n/2、n/4、n/8、n/16等的子数组进行排序,在递归拆分的结果是大小为1的两个子数组之前,不会进行合并。在数组大小为2的幂的简单情况下,“合并排序”仅用于单个元素,大小为{1,2,4,8,…,n/8,n/4,n/2}的其余子数组按堆排序,然后合并
由于堆排序比合并排序慢,因此运行时间将更长,但时间复杂度保持在O(n log(n)),因为时间复杂度忽略了常量或较低的项因子。让我们计算出在这种情况下的递归关系应该是什么。这里,我们是
- 将阵列一分为二
- 递归排序一半(T(n/2))
- 堆插入一半(O(n log n)),然后
- 将两半合并在一起(O(n))
现在要做的就是解决这个问题。它的结果确实是O(n logn),我将让您决定如何显示它。迭代法在这里是一个很好的选择。让我们计算出在这种情况下,递归关系应该是什么。这里,我们是
- 将阵列一分为二
- 递归排序一半(T(n/2))
- 堆插入一半(O(n log n)),然后
- 将两半合并在一起(O(n))
现在要做的就是解决这个问题。它的结果确实是O(n logn),我将让您决定如何显示它。迭代法在这里是一个很好的选择。好的!谢谢因此,总体时间复杂度为O(nlog)?@yoyou_24-由于堆和合并都具有时间复杂度O(n log(n)),因此这两者的任何组合也将具有时间复杂度O(n log(n)),尽管运行时间会有所不同,因为常量和低阶项会被大的时间复杂度O忽略。好的!谢谢因此,总体时间复杂度为O(nlog)?@yoyou_24-由于heap和merge都具有时间复杂度O(n log(n)),因此两者的任何组合也将具有时间复杂度O(n log(n)),尽管运行时间会有所不同,因为常量和低阶项被大的时间复杂度O忽略。非常感谢!这非常有帮助。只是一个问题:为什么不考虑合并贡献在复发?非常感谢!这非常有帮助。只是一个问题:为什么不考虑合并贡献在复发?