快速选择平均时间复杂度 O(n) [如何?]



我正在学习快速选择以查找第 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( 如何?谁能详细向我解释一下?

我认为您的问题不是特定于快速选择的。你问大O符号和平均θ(Θ(符号有什么区别。

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

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

还有欧米茄 (Ω( 表示法,用于获得最佳情况复杂性。

快速

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

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

相关内容

  • 没有找到相关文章

最新更新