【问题标题】:Time complexity of Sorting list of Tuples based on second value基于第二个值的元组排序列表的时间复杂度
【发布时间】:2023-04-02 06:29:02
【问题描述】:

所以我想知道如果我们使用一个键来排序函数的时间复杂度是多少,我知道它是正常排序的 nlogn 但对于以下情况是否相同:

a=[[(1, 4,),1], [(2, 4), 10], [(1, 3), 11], [(2, 3), 5], [(3, 4), 7]]

a=sorted(a, key = lambda x: x[1],reverse=True)

所以在这里我根据第二个元素对列表进行了排序,所以时间复杂度会保持不变,即 nlogn 还是会有所不同

【问题讨论】:

  • 我想不出它会改变的任何原因。但是,如果获取密钥是一些昂贵的计算函数,则可能是另一回事。无论哪种方式,尝试优化它可能都不值得。通常,除非另有说明,否则您可以假设提供的功能以尽可能最好的方式实现。 Plus Python旨在易于使用和灵活性。速度有时是您为这些功能付出的代价。
  • Python 的sorted() 适用于timsort,它的最坏情况复杂度为nlogn,最好情况为n。在您的情况下,时间复杂度将与上述相同。您只是要求对键列表进行排序,这与排序列表相同。
  • @Locke ",尝试优化这可能不值得"- 说得好!
  • @Solen'ya 我认为 key 功能也需要一些时间,但我想不会,我只是看到而不是 key 我们也可以使用 operator 模块中的 itemgetter更少的时间。

标签: python list sorting tuples key


【解决方案1】:

下面的时间复杂度肯定是 nlog2(n)。 请注意,它是基数 2,而不是基数 10。

a=[[(1, 4,),1], [(2, 4), 10], [(1, 3), 11], [(2, 3), 5], [(3, 4), 7]]
a=sorted(a, key = lambda x: x[1],reverse=True)

sorted函数使用的Timsort算法被认为是混合排序算法,因为它将插入排序和合并排序结合在一起。

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2015-06-15
    • 2020-10-27
    • 1970-01-01
    • 2013-04-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多