gpt4 book ai didi

java - QuickSelect 平均时间复杂度 O(n) [如何实现?]

转载 作者:行者123 更新时间:2023-12-02 10:16:36 24 4
gpt4 key购买 nike

我正在学习 QuickSelect 来查找第 K 个最小的数字。我理解了这个程序。但我对 QuickSelect 的平均时间复杂度是 O(n) 感到困惑。

我已经尝试过 Java 代码并且它有效。但我受困于时间复杂度。

public class KthSmallestNumberUsingQuickSelect {

int findKthNumber(int arr[], int left, int right, int k ) {
if(k > 0 && k <= right - left + 1) {

int pos = partition(arr,left,right);

if(pos - left == k - 1)
return arr[pos];

if(pos - left > k - 1)
return findKthNumber(arr, left, pos - 1, k);
System.out.println(k - pos + left - 1);
return findKthNumber(arr, pos + 1, right, k - pos + left - 1);
}
return Integer.MAX_VALUE;
}

int partition(int arr[], int left, int right) {
int i = left ;
int j;
int x = arr[right];
int temp = 0;

for(j=left; j<right; j++ ) {
if(arr[j] <= x) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;

i++;
}
}
temp = arr[i];
arr[i] = x;
arr[right] = temp;

return i;
}

public static void main(String[] args) {
KthSmallestNumberUsingQuickSelect kq = new KthSmallestNumberUsingQuickSelect();


int arr[] = {7,10,4,3,20,15};
int k = 3;

System.out.println(kq.findKthNumber(arr,0,arr.length-1, k));
}
}

平均时间复杂度O(n)是多少?谁能给我详细解释一下吗?

最佳答案

我认为您的问题不是特定于 QuickSelect 的。您问的是大 O 表示法和平均 Theta (θ) 表示法有什么区别。

大 O 表示法描述了算法将使用的最大潜在复杂度。

另一方面,θ 表示法是问题输入的所有可能组合的平均复杂度。

还有表示最佳情况复杂性的欧米茄 (Ω) 表示法。

快速选择算法遵循与快速排序类似的复杂性,并且您是对的,两者的大 O 表示法都是 O(n^2),但在平均情况下它们更好。

如果您需要更具体的解释为什么平均情况是线性的,请阅读此 post 中的答案.

关于java - QuickSelect 平均时间复杂度 O(n) [如何实现?],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54632968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com