- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在使用 Python 测量复杂性时遇到了问题。给出接下来的两个脚本:
1 def program1(L):
2 multiples = []
3 for x in L:
4 for y in L:
5 multiples.append(x*y)
6 return multiples
1 def program3(L1, L2):
2 intersection = []
3 for elt in L1:
4 if elt in L2:
5 intersection.append(elt)
6 return intersection
在第一个最好的情况下(运行 sript 的最少步骤)是两个考虑空列表 L
所以只执行第二行和第六行。最佳情况的解决方案:2
。
在最坏的情况下 L
是一个长列表,它在 L
n
中遍历 x
的循环> 次。
内部循环有三个操作(给y
赋值,x*y
,和列表追加)。所以内层循环在外层循环的每次迭代中执行 3*n
次。因此,嵌套循环结构被执行 n * (3*n + 1) = 3*n**2 + n
次。添加第二行和第六行,我们得到解决方案 3n²+n+2
。
但我的问题是:n(3n+1)
中的数字 1
是从哪里来的?
根据我的说法,解决方案是 n(3n)+2 = 3n²+2
vs 正确答案 n(3n+1)+2 = 3n²+n+2
.
同时在第二个中,最坏的情况是 n²+2n+2
但我不明白如果只有一个循环,为什么会有二次项。
最佳答案
根据您的说法,y
的最内层( program1
)循环中有三个指令.
按照同样的逻辑,最外层 ( x
) 循环中有一条指令:
这将使外循环:
n * (1 {assign to x} + n * 3 {assign, multiply, append})
或者:
n * (1 + 3n)
添加 init/return 指令给出:
2 + n + 3n²
在program2
,有一个类似的情况有一个“隐藏循环”:
2 instructions for init/return, plus ...
然后你运行for elt in L1
,这将是 n
迭代(n 是 L1 的大小)。您的内部代码是 if
陈述。在最坏的情况下,if 主体总是运行。在最好的情况下,它永远不会运行。
if
条件正在测试 elt in L2
,它将运行一个迭代函数,type(L2).__contains__()
在 L2 上。简单的情况是一个 O(m) 操作,其中 m
是L2的长度。有可能 L2
不是一个列表,而是某种类型,其中 in
操作不需要线性扫描。例如,它可能是 B 树、字典、集合,或者谁知道是什么?所以你可以假设最好的情况是 elt in L2
是O(1),答案是否定的,而最坏的情况是elt in L2
是 O(m),答案是肯定的。
Best case: 2 + n * (1 {assign to elt} + 1 {search L2})
Best case if L2 is a list: 2 + n * (1 {assign to elt} + m {search L2})
Worst case: 2 + n * (1 {assign to elt} + m {search L2} + 1 {append})
这给你 2 + 2n 最好的情况,2 + n + nm 如果 L2 是一个列表,最好的情况是 2 + 2n + nm 最坏的情况。
您可能倾向于对待m
等于n
.那是你的决定,但如果你计算赋值语句,我会反对它。
关于python - 在 python 脚本中测量复杂性的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35589607/
我正在尝试将游戏中的 GPS map 系统复制到网络中。基本上游戏中有 12 张 map ,每张 map 都有不同的安全区域,你可以在其中扭曲你的 Angular 色或走动,但我一路上遇到了一些问题。
给定一个根目录,逐行读取 rootDirectory 或子目录中的所有文件,并对每个文件中的所有数字求和。每个文件的每一行都有一个编号。所以我只需要读取所有文件并对所有数字求和并返回。我想出了下面的代
我使用的是 MySQL 5.5,有两个表 T1(ID, NAME) 和 T2(ID, MARKS),下面是表中的数据。 T1的数据 ID NAME 1 A 2 B 3 C T2的数据 ID MA
我必须确定以下函数的时间复杂度(大 O): void BET::makeEmpty(BinaryNode* &n) { if(n != NULL) { makeEmpt
我基本上了解如何计算函数的复杂度。这同样适用于确定数学函数的增长顺序。 [我可能不像我想的那样理解它,这就是为什么我可能会问这个。] 例如: an^3 + bn^2 + cn + d 可以用大 O 表
我有一个家庭作业问题,一段时间以来我一直在努力解决,但我终其一生都无法解决。 我有一张尺寸为 X*Y 的纸和一组尺寸较小的图案,以及与之相关的价格值。我可以水平或垂直切割板材,我必须找到优化的切割模式
我写了这个字符串所有排列的解决方案。我对这个解决方案的时间和空间复杂性有疑问。我假设时间复杂度为 O(n³),因为嵌套循环和递归以及空间复杂度为 O(n),因为递归。 我的假设是否正确?如果可以,有没
刚遇到这个问题: 子集求和问题:求给定数组中两对数字的总和等于给定数字的个数 例如:给定总和为 9,数组为 { 0, 1, 2, 7, 13 } => O/P 为 1 对(2 和 7) 似乎这可以在
鉴于我有一个包含一组单词的文件: 1) 如果我选择一个哈希表来存储单词 -> 计数,查找特定单词出现的时间复杂度是多少? 2) 我怎样才能按字母顺序返回这些单词? 如果我选择哈希表,我知道 1) 的时
我很难理解大 O 时间复杂度。 Big O 的正式定义: f(n) = O(g(n)) means there are positive constants c and k, such that 0
有人知道 ECMAScript5 的 Object.keys() 在常见实现中的时间复杂度吗? n 个键的时间复杂度是 O(n) 吗?假设采用哈希实现,时间与哈希表的大小成正比吗? 我正在寻找语言实现
我需要知道,就复杂性而言,什么更好。要么为每个按钮从 xml 中标识一个单独的 onClick 方法,如下所示: android:onClick:"clickHandler" 和java代码: pub
无论如何我都不是 Javascript 的新手;也就是说,我对 bind 的作用及其行为方式有了基本的了解。但是,我遇到了一个我对结果有点不确定的用例。让我详细说明一个示例设置: 示例设置 首先,我有
这个问题在这里已经有了答案: Python list.clear() time and space complexity? (4 个答案) 关闭 1 年前。 Python 3 方法 list.cle
我创建的这个计算两个数组的交集是线性的方法的复杂度(在良好、平均、最差的情况下)? O(n) public void getInt(int[] a,int[] b){ int i=0; int
假设我已经使用 PriorityQueue 实现了 dijkstras,因此在未访问的节点中添加和删除需要 O(log n)。 PQ 最多包含 E 个节点,因此清空它我们得到 O(E)。当 PQ 不为
我能得到一些帮助来理解如何解决这个教程问题吗?我仍然不明白教授的解释。我不确定如何计算第三个/最内层循环的大 0。她解释说,该算法的答案是 O(n^2),并且第二个和第三个循环必须被视为具有 O(n)
有人可以告诉我这个过程在 for 迭代中的时间复杂度吗?这段代码是FloydWarshall算法的“重构路径”部分。prev[n][n]是最短路径中源节点和目的节点之间的节点矩阵。printAllSP
运行时间、复杂性、编译时间和执行时间有什么区别? 运行时间与时间复杂度有冲突,执行时间和执行时间有什么区别? 最佳答案 您真正需要的是如何将大O时间复杂度转换为运行时。这不像一开始看起来那么容易。 因
我对算法复杂度的计算很困惑。对于一项任务,我们被赋予以下功能并要求找到它的复杂性。 int selectkth(int a[], int k, int n) { int i, j, mini,
我是一名优秀的程序员,十分优秀!