【问题标题】:Calculating Time and Space Complexity of xrange(), random.randint() and sort() function计算 xrange()、random.randint() 和 sort() 函数的时间和空间复杂度
【发布时间】:2015-06-06 12:29:16
【问题描述】:

Python中xrange(),random.randint(1,100)sort()函数的时间和空间复杂度是多少

import random
a = [random.randint(1,100)  for i in xrange(1000000)]
print a 
a.sort()
print a

【问题讨论】:

  • 是的,我做到了..我在第二行遇到问题....我不确定它会执行多长时间,因为它有一个随机函数和一个循环。
  • 由于没有输入变量,复杂度为O(1)。
  • 谢谢@StefanPochmann。如果你能详细说明一点,或者任何参考都可以。

标签: python time-complexity space-complexity


【解决方案1】:

如果没有关于问题的更多信息、您的实际任务和您的解决尝试,答案可能就足够了……但我会尽量给您一些意见。

a = [random.randint(1,100) for i in xrange(1000000)]

a = ... 这样的语句通常被认为具有 O(1) 的时间复杂度。空间复杂度取决于您希望分析问题的详细程度。简化的人可能会说列表中的 1.000.000 个随机整数类似于 O(1.000.000),因此是恒定的,因此可以说依赖于输入长度 (1.000.000, 2.000.000, ...) 它的结果在 O(n) 中。

[random.randint(1,100) for i in xrange(1000000)] 是一个具有 1.000.000 个循环并生成随机整数的 for 循环。依赖于 randint 算法,这也将类似于 O(n)。

a.sort() 高度依赖于使用的排序算法。大多数语言使用归并排序,在所有情况下都是 O(n * log(n))。

【讨论】:

    【解决方案2】:

    我在 Facebook 上得到了答案。感谢 Shashank Gupta。

    我假设你知道渐近符号和其他东西的基础知识。

    现在,暂时忘记 a.sort() 函数,专注于您的列表理解: a = [random.randint(1,100) for i in xrange(1000000)]

    1000000 相当大,所以现在让我们将其减少到 10。

    a = [random.randint(1,100) for i in xrange(10)]

    您正在这里构建一个包含 10 个元素的新列表。每个元素都是通过 randint 函数生成的。假设这个函数的时间复杂度是 O(1)。对于 10 个元素,这个函数会被调用 10 次,对吧?

    现在,让我们概括一下。对于整数 'n' a = [random.randint(1,100) for i in xrange(n)]

    您将调用 randint 函数 'n' 次。

    所有这些也可以写成: 对于 xrange(n) 中的 i: a.append(randint(1, 100))

    这是 O(n)。

    按照代码,您有一个简单的打印语句。这又是 O(n) (在内部,python 解释器迭代整个列表)。现在是排序部分。您已经使用了排序功能。需要多少时间?那里有许多排序算法,并且不详细介绍所使用的确切算法,我可以安全地假设时间复杂度将是 O(n log n)

    因此,您的代码的实际时间复杂度为 T(n) = O(n log n) + O(n),即 O(n log n)(对于较大的 n,忽略较低的项)

    空间呢?您的代码初始化了一个大小为“n”的新列表。因此空间复杂度为 O(n)。

    你去。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-23
      • 2018-06-27
      • 2016-12-20
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      相关资源
      最近更新 更多