我知道这个algorithm的大O复杂度是O(n^2) ,但我不明白为什么。 int sum = 0; int i = 1; j = n * n; while (i++ < j–) sum++; 即使我们在开始时设置j = n * n ,我们在每次迭代期间递增i和递减j,所以迭代的结果数量是不是应该比n*nless很多?
algorithmdevise中我有一个关于复杂性的问题。 在这个问题中给出了一段代码,我应该计算这个代码的复杂性。 伪代码是: for(i=1;i<=n;i++){ j=i do{ k=j; j = j / 2; }while(k is even); } 我尝试了一些数字的algorithm。 我得到了不同的结果。 例如,如果n = 6,则该algorithm输出如下所示 i = 1 -> executes 1 time i = 2 -> executes 2 times i = 3 -> executes 1 time i = 4 -> executes 3 times i = 5 -> executes 1 […]
Java中String#substring()方法的时间复杂度是多less?
维基百科: 该algorithm的复杂性是O(n(logn)(loglogn))位操作。 你如何到达? 复杂性包括loglogn术语告诉我,有一个sqrt(n)地方。 假设我在前100个数字( n = 100 )上运行筛选,假设将数字标记为复合需要一定的时间(数组实现),那么使用mark_composite()将会是 n/2 + n/3 + n/5 + n/7 + … + n/97 = O(n^2) 为了find下一个素数(例如在将所有5倍数的数字交叉之后跳到7 ),操作次数将是O(n) 。 所以复杂度是O(n^3) 。 你同意吗?
我正在四处寻找stackoverflow 非平凡的懒惰评估 ,这导致了我Keegan McAllister的介绍: 为什么学习Haskell 。 在幻灯片8中,他显示了最小函数,定义如下: minimum = head . sort 并指出它的复杂性是O(n)。 我不明白为什么复杂性被说成是线性的,如果通过replacesorting是O(nlog n)。 文章中提到的sorting不能是线性的,因为它不会假设数据,因为线性sorting方法(比如计数sorting)会要求sorting。 懒惰的评价在这里扮演着一个神秘的angular色吗? 如果是的话,背后的解释是什么?
什么是假多项时间 ? 它与多项式时间有什么不同? 在假多项式时间运行的一些algorithm具有如O(nW)(对于0/1背包问题 )或O(√n)(用于试划分 )的运行时间; 为什么不算多项式时间呢?
JavaScript中的数组非常容易通过添加和删除项目进行修改。 它有点掩盖了大多数语言数组是固定大小的事实,并且需要复杂的操作来resize。 JavaScript似乎很容易编写性能不佳的数组代码。 这导致了一个问题: 在数组性能方面,我可以从JavaScript实现中期望什么样的性能(就大O时间复杂度而言)? 我认为所有合理的JavaScript实现至less有以下大O. 访问 – O(1) 附加 – O(n) 预先计划 – O(n) 插入 – O(n) 删除 – O(n) 交换 – O(1) JavaScript允许使用new Array(length)语法将数组预先填充到特定的大小。 (奖金问题:以这种方式创build一个数组O(1)或O(n))这更像是一个常规的数组,如果用作预先大小的数组,可以允许O(1)追加。 如果添加了循环缓冲区逻辑,则可以实现O(1)预先计划。 如果使用dynamic扩展的数组,O(log n)将是这两者的平均情况。 我能期待比我的假设更好的performance吗? 我不希望在任何规范中列出任何内容,但实际上可能是所有主要实现都在后台使用优化的数组。 是否有dynamic扩展数组或其他性能提升algorithm在工作? PS 我想知道这个的原因是因为我正在研究一些sortingalgorithm,其中大部分似乎假定追加和删除O(1)操作时,描述他们的整体大O.
O(1),O(n log n)和O(log n)的复杂性,我们每天使用的algorithm是什么?
我对big-O的认识是有限的,当log方程出现在方程中的时候,它会把我抛到更远的地方。 有人可以简单地向我解释一下O(log n)algorithm是什么? 对数从哪里来? 当我试图解决这个中期实践问题时,这是特别提出的: 让X(1..n)和Y(1..n)包含两个整数列表,每个列表按非递减顺序sorting。 给出一个O(log n)时间algorithm来查找所有2n组合元素的中值(或第n个最小整数)。 例如,X =(4,5,7,8,9)和Y =(3,5,8,9,10),则7是组合列表的中间值(3,4,5,5,7 ,8,8,9,9,10)。 [提示:使用二进制search的概念]
我听到有人说,由于二进制search所需的input减半,所以它是log(n)algorithm。 由于我不是来自math背景,我不能与之相关。 有人可以更详细地解释一下吗? 它是否必须对对数级数做些什么?