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
答案 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))。