簡體   English   中英

在排序數組中找到第 k 個最小分數的算法的時間復雜度

[英]Time complexity of algorithm to find kth smallest fraction in a sorted array

我可以說這個算法的時間復雜度是 O(n^2 + nlogn) 嗎? 我的理由是嵌套的 for 循環將具有 O(n^2) 的時間復雜度,因為我們遍歷提供的數組中的每個元素兩次。 但是,對於 sorted() 的使用如何影響整體復雜性,我有點困惑。 我目前認為,由於 sorted 沒有嵌套在任何 for 循環中,我們只需將它的 nlogn 復雜度添加到 n^2 的復雜度中。 這個對嗎?

def kthSmallestPrimeFraction(arr: List[int], k: int) -> List[int]:
    dictionary = defaultdict(list)
    for i in range(len(arr)):
        for j in range(i + 1, len(arr)):
            dictionary[arr[i] / arr[j]] = [arr[i], arr[j]]
    sorted_results = sorted(dictionary.keys())
    # return dictionary.get(sorted_results[k-1])
    return dictionary[sorted_results[k - 1]]

是的,你的推理是正確的。

在大 O 表示法中,僅考慮增長最快的項,而忽略不相關的項。 所以這個算法是 O(n^2) - 即對於非常大的 n (n log n) 項是不相關的。 https://en.wikipedia.org/wiki/Big_O_notation

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM