python - Python sort() 时间复杂度如何随非 O(1) 复杂度的 lambda 函数变化?

标签 python sorting time-complexity

我有一个数组'logs',其中 logs = ["1 art can", "2 own kit dig", "3 art zero", "4 art can"]。每个元素都是一个字符串,它有一个序列号,后面跟着一堆单词。我需要按照字符串内容的字典顺序(不包括序列号)对数组进行排序。如果数组中的两个字符串内容相同,我需要根据它们的序号对它们进行排序。

我将 sort() 函数与 lambda 函数结合使用,后者又使用 split() 函数。下面的用法: logs.sort(key=lambda x: (x.split()[1:], x.split()[0]))

我知道 sort() 的时间复杂度是 O(nlog(n)),而 split() 本身的时间复杂度是 O(n)。假设有 n 个字符串,每个长度为 m,logs.sort(key=lambda x: (x.split()[1:], x.split()[0]) 的有效时间复杂度是多少)?

最佳答案

根据documentation (强调我的):

Both list.sort() and sorted() have a key parameter to specify a function to be called on each list element prior to making comparisons.

所以所有键都计算一次,而不是在进行所有比较时。执行所有关键计算的复杂性增加了排序的复杂性。因此,总体复杂度将是具有较大顺序的那个。

关于python - Python sort() 时间复杂度如何随非 O(1) 复杂度的 lambda 函数变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67629750/

相关文章:

python - 使用 HappyBase 更新 HBase 数据

python - 事件关联和过滤——如何,从哪里开始?

php - 对 mysql 查询的结果进行排序而不提交新查询

c++ - 降低时间复杂度

java - 查找 2D (MxM) 数组(垂直、水平或对角线)中最长的线

python - Django(postgresql)+ lighttpd。线程和 python 的 postgresql 驱动程序有什么问题吗?

python - 如何从类中声明全局变量?

C- 交换结构数组内的字符串或数字的决策函数

ios - 使用两个字典键基于日期和时间对数组进行排序

algorithm - 导出 T(n) = 3T(n/5) + T(n/2) + 2^n 的上限和下限