Questions tagged «time-complexity»

算法的时间复杂度根据问题输入的大小来量化算法运行所需的时间。通常使用大O表示法来表示算法的时间复杂度,这会抑制乘法常数和低阶项。


6
什么会导致算法具有O(log n)复杂度?
我对big-O的知识是有限的,当对数项出现在等式中时,甚至会使我失望得多。 有人可以简单地向我解释什么是O(log n)算法吗?对数从何而来? 当我尝试解决这个期中练习问题时,特别是这样: 令X(1..n)和Y(1..n)包含两个整数列表,每个列表以非降序排列。给出O(log n)时间算法以查找所有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)。[提示:使用二进制搜索的概念]

2
JavaScript数组的大O
JavaScript中的数组很容易通过添加和删除项来进行修改。它在某种程度上掩盖了一个事实,即大多数语言数组都是固定大小的,并且需要复杂的操作来调整大小。看起来,JavaScript使编写性能不佳的数组代码变得容易。这导致了一个问题: 对于数组性能,我可以从JavaScript实现中获得什么样的性能(就O时间复杂度而言)? 我假设所有合理的JavaScript实现最多都具有以下大O。 存取权-O(1) 追加-O(n) 前置-O(n) 插入-O(n) 删除-O(n) 交换-O(1) JavaScript使您可以使用以下命令将数组预填充为特定大小 new Array(length)语法。(奖金问题:是以O(1)或O(n)的方式创建数组)这更像是常规数组,并且如果用作预大小数组,则可以允许添加O(1)。如果添加了循环缓冲区逻辑,则可以实现O(1)前置。如果使用动态扩展数组,则O(log n)将是这两种情况的平均情况。 我可以期望某些事情比我的假设有更好的性能吗?我不希望任何规范概述任何内容,但实际上,可能是所有主要实现都在幕后使用了优化的数组。是否在工作中动态扩展数组或其他一些提高性能的算法? 聚苯乙烯 我想知道这是因为我正在研究一些排序算法,当描述它们的整体大O时,大多数似乎都假定追加和删除是O(1)运算。



11
Euclid算法的时间复杂度
我很难确定Euclid最大的公分母算法的时间复杂度。该伪代码算法为: function gcd(a, b) while b ≠ 0 t := b b := a mod b a := t return a 它似乎取决于a和b。我的想法是时间复杂度为O(a%b)。那是对的吗?有没有更好的方法可以写呢?

4
Eratosthenes算法的筛选时间复杂度
从维基百科: 该算法的复杂性是 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) 并且要查找下一个质数(例如,7在除掉所有倍数为的数字后跳至5),操作数将为O(n)。 因此,复杂度为O(n^3)。你同意吗?


4
迭代字符串的时间复杂性实际上是O(n ^ 2)还是O(n)?
我正在处理CTCI之外的问题。 第1章的第三个问题是您采用了诸如 'Mr John Smith ' 并要求您将中介空间替换为%20: 'Mr%20John%20Smith' 作者使用Python提供了此解决方案,称其为O(n): def urlify(string, length): '''function replaces single spaces with %20 and removes trailing spaces''' counter = 0 output = '' for char in string: counter += 1 if counter > length: return output elif char == ' ': output = output + …

12
在计算机科学中进行分类与在“真实”世界中进行分类
我正在考虑对软件中的算法进行排序,以及可能克服O(nlogn)障碍的可能方法。从实际意义上讲,我认为不可能进行更快的排序,所以请不要以为我可以。 话虽如此,看来对于几乎所有的排序算法,软件都必须知道每个元素的位置。否则有意义的是,它将如何知道根据某些排序标准将每个元素放置在何处? 但是,当我将这种想法与现实世界相冲突时,离心机不知道每个分子在按密度对分子进行“分类”时所处的位置。实际上,它并不关心每个分子的位置。但是,由于每个分子都遵循密度和引力定律,因此它可以在相对较短的时间内对数万亿个项目进行分类-这让我思考。 在每个节点上有一些开销(附加到每个节点上的某个值或方法)是否有可能“强制”列表的顺序?类似于离心机,其中只有每个元素都在乎其在空间中的相对位置(相对于其他节点)。或者,这是否违反了计算中的某些规则? 我认为这里提出的主要观点之一是自然界的量子力学效应以及它们如何同时并行应用于所有粒子。 也许经典计算机会固有地将排序限制在的范围内O(nlogn),因为量子计算机可能能够将阈值越过进入O(logn)并行运行的算法。 离心机基本上是平行气泡排序的观点似乎是正确的,它的时间复杂度为O(n)。 我想下一个想法是,如果自然可以分类O(n),为什么计算机不能?

1
各种数据结构的时间复杂度是多少?
我试图列出常见数据结构(如数组,二进制搜索树,堆,链表等)的时间复杂性,尤其是我指的是Java。它们很常见,但我想我们当中有些人对确切答案并不100%自信。任何帮助,特别是参考资料,将不胜感激。 例如,对于单链表:更改内部元素为O(1)。你怎么能这样做?你HAVE更改它之前要搜索的元素。同样,对于向量,添加内部元素的方式为O(n)。但是为什么我们不能使用索引在固定的摊销时间内完成呢?如果我缺少某些东西,请纠正我。 我将我的发现/猜测发布为第一个答案。

2
Javascript ES6集合的计算/时间复杂度
ES6规范为键集合(Set,Map,WeakSet和WeakMap)提供了什么时间复杂度(大O表示)? 我的期望,我期望的大多数开发人员,是规范和实现将使用被广泛接受的高性能算法,在这种情况下Set.prototype.has,add并delete在平均情况下都是O(1)。这同样适用于Map和Weak–等效物。 对我来说,实现的时间复杂性是否在例如ECMAScript 2015 Language Specification-6th Edition — 23.2 Set Objects中规定,并不是完全显而易见的。 除非我误解了(当然我确实很可能这样做),否则ECMA规范要求实现(例如Set.prototype.has)必须使用线性时间(O(n))算法。令我惊讶的是,规范中没有要求或什至不允许使用性能更高的算法,并且我对解释为何如此的情况非常感兴趣。

5
Max-Heapify中最坏的情况-如何获得2n / 3?
在CLRS,第三版,第155页中,假定在MAX-HEAPIFY中, 子树的每个子树的大小最大为2n / 3-最坏的情况是树的底部恰好是一半满了。 我知道为什么当树的底部恰好是一半满时最糟糕。在此问题中还回答了MAX-HEAPIFY中的最坏情况:“最坏情况发生在树的底部恰好是一半满时” 我的问题是如何获得2n / 3? 为什么如果底层为半满,则子树的大小最大为2n / 3? 如何计算? 谢谢



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.