计算xrange(),random.randint()和sort()函数的时间和空间复杂度

时间:2015-06-06 12:29:17

标签: python time-complexity space-complexity

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

2 个答案:

答案 0 :(得分:1)

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

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

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

1000000非常大,所以现在让它减少到10个。

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

您在此处使用10个元素构建新列表。每个元素都是通过randint函数生成的。让我们假设这个函数的时间复杂度是O(1)。对于10个元素,此函数将被调用10次,对吧?

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

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

所有这一切也可以写成: for x in xrange(n): 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)。

你去。

答案 1 :(得分:0)

如果没有关于问题的更多信息,你的实际任务和你的解决尝试,答案可能只是足够......但我会尝试至少给你一些意见。

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()高度依赖于使用的排序算法。大多数语言都使用merge-sort,在所有情况下都是O(n * log(n))。