在研究算法和数据结构时,我手动评估脚本的BigO复杂性。有没有一种方法,比如说任何Python IDE或包中的一个按钮,可以计算任何给定函数或程序的BigO?
更新:
假设我有
def print_first_element(a):
print a[0]
为什么我不能编写一个分析器,它会告诉我可以,你可以通过索引及其O(1)访问数组(列表),或者
def print_all_element_of_list(a):
for i in a:
print i
好的,您进行了完全扫描,因此复杂性为O(n)
等等
一般来说这是不可能的。这里有一个python程序可以计算某些程序的复杂性:https://github.com/Mortal/complexity
不幸的是,不可行。请参阅停止问题。
在最近的一次测试中,我们得到了一个函数来计算未排序的ArrayList中出现了多少个double(不是原语double,而是一个项目出现了两次)。 我正确地确定了Big O复杂度为O(N^2),但由于我错误地确定了全部复杂度,因此只获得了部分学分。函数如下: 在他刚刚发布的考试解决方案中,他给出了这样的解释: 输入集合中有N个项,该方法通过一个缩减步骤反复调用自己,该步骤生成一个新索引N次,直到达
我想确定两个函数的复杂性。 第一个我只需要知道我的解决方案是否正确,第二个是因为我正在努力寻找解决方案的两个递归调用,如果可能的话,最好进行工作,这样我就可以了解它是如何完成的。 第一: 尝试的解决方案: 第二: 任何帮助将不胜感激。 当做
如何计算以下函数的时间复杂度? 现在,我知道循环具有O(n)时间复杂度,但在这种情况下,I以更快的速度增长。一次又一次地迭代,我发现,对于每一个第m次迭代,I=m^2。但我仍然不知道如何计算大O。
算法的时间复杂度定义为其运行所需的时间量,作为输入长度的函数。 如果我在C中有一个简单的for循环函数,它针对给定的输入n运行,那么:n的长度是log n(表示它所需的位数)。由于输入为对数n,循环运行n次,因此代码在其输入长度(2^(对数n)=n))中以指数形式运行多次 这个for循环就是一个例子。 但我们永远不会听到任何人说,这样的for-loop程序在其输入(存储n所需的位)中是指数的。为什
我在考虑如何正确计算这个函数的时间复杂度: 我假设它是 O(n),其中 n 是列表的长度。我们的 while 循环是 O(n),for 循环也是 O(n), 这意味着我们得到了 2*O(n),等于 O(n)。 我说的对吗?