排序数组大小 n 的 n/logn 序列的复杂性
Complexity of sorting n/logn sequences of an array size n
给定一个大小为 N 的数组(数组包含整数),我希望对数组进行排序,但只对数组中的 log(n) 长度进行排序,因此到最后数组将有 n/logn 排序的序列(每个序列的大小为 logn)。
我的想法是使用 MergeSort 算法,在最坏的时间复杂度情况下运行 O(nlogn)。
但是由于我只对数组中 logn 的长度进行排序,时间复杂度应该是 O(log(n)*log(log(n))) 因为我实际上并没有遍历 N.[=11 的整个长度=]
所以 MergeSort 将在这种情况下执行 n/logn 次。
假设此操作的总体时间复杂度为 (n/logn)*O(log(n)log(log(n))) => O(n[=18) 是否安全=]log(log(n)))?
您的计算是正确的:排序 n / log n
个大小为 log n
的数组块可以在 O(n log(log n))
中完成。
然而,如果你的整个数组一开始就不是那么大(比如最多几千个元素),log n
块将非常小,在这种情况下使用它实际上更有效insertion sort 而不是合并排序或快速排序等算法。
给定一个大小为 N 的数组(数组包含整数),我希望对数组进行排序,但只对数组中的 log(n) 长度进行排序,因此到最后数组将有 n/logn 排序的序列(每个序列的大小为 logn)。
我的想法是使用 MergeSort 算法,在最坏的时间复杂度情况下运行 O(nlogn)。 但是由于我只对数组中 logn 的长度进行排序,时间复杂度应该是 O(log(n)*log(log(n))) 因为我实际上并没有遍历 N.[=11 的整个长度=]
所以 MergeSort 将在这种情况下执行 n/logn 次。 假设此操作的总体时间复杂度为 (n/logn)*O(log(n)log(log(n))) => O(n[=18) 是否安全=]log(log(n)))?
您的计算是正确的:排序 n / log n
个大小为 log n
的数组块可以在 O(n log(log n))
中完成。
然而,如果你的整个数组一开始就不是那么大(比如最多几千个元素),log n
块将非常小,在这种情况下使用它实际上更有效insertion sort 而不是合并排序或快速排序等算法。