繁体   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