Questions tagged «time-complexity»

解决问题所需的时间资源(原子操作或机器步骤数)以输入大小表示。如果您的问题与算法分析有关,请改用[runtime-analysis]标记。如果您的问题是关于计算是否会*完成*,请改用[computability]标签。时间复杂性也许是复杂性理论中最重要的子主题。

6
我们如何假设对数字的基本运算需要固定的时间?
通常,在算法中,我们不关心数字的比较,加法或减法-我们假设它们在时间。例如,当我们说基于比较的排序是时,我们就假设了这一点,但是当数字太大而无法放入寄存器时,我们通常将它们表示为数组,因此基本操作需要为每个元素进行额外的计算。O (n log n )O (1 )O(1)O(1)Ø (ñ 日志n )O(nlog⁡n)O(n\log n) 是否有证据表明可以在完成两个数字(或其他原始算术函数)的比较?如果不是,为什么我们说基于比较的排序是?O (n log n )O (1 )O(1)O(1)Ø (ñ 日志n )O(nlog⁡n)O(n\log n) 我遇到这个问题时,我回答了一个SO问题,我意识到,我的算法是不,因为我迟早要处理大INT,也是它不是伪多项式算法,它是。PO (n )O(n)O(n)PPP

8
对数复杂度的算法直觉
我相信我对,和这样的复杂性有一定的了解。Θ (n )Θ (n 2)O(1)O(1)\mathcal{O}(1)Θ(n)Θ(n)\Theta(n)Θ(n2)Θ(n2)\Theta(n^2) 就列表而言,是一个常量查找,因此它只是成为列表的开头。 是我遍历整个列表的位置,而对于列表中的每个元素遍历该列表一次。Θ (n )Θ (n 2)O(1)O(1)\mathcal{O}(1)Θ(n)Θ(n)\Theta(n)Θ(n2)Θ(n2)\Theta(n^2) 除了只知道位于和之间,有没有类似的直观方法来掌握它?Θ(logn)Θ(log⁡n)\Theta(\log n)Θ (n )O(1)O(1)\mathcal{O}(1)Θ(n)Θ(n)\Theta(n)


2
要找到未排序数组的中位数,我们可以在n 个元素的时间内进行最小堆操作,然后可以以n / 2个元素中的一个来提取一个中值。但是这种方法将花费O (n log n )时间。Ø (ñ 日志n )O(nlog⁡n)O(n\log n)ñnnn / 2n/2n/2Ø (ñ 日志n )O(nlog⁡n)O(n \log n) 我们可以在时间内通过某种方法执行相同操作吗?如果可以,那怎么办?O (n )O(n)O(n)

3
决策问题与并非是或不是的“实际”问题
我在很多地方都读到有些问题很难近似( NP很难近似 )。但是,逼近并不是一个决定性的问题:答案是一个实数,而不是是或否。同样对于每个所需的逼近因子,有许多正确的答案和许多错误的答案,并且随着所需的逼近因子而变化! 因此,如何说这个问题是NP问题呢? (灵感来自有向图中计算两个节点之间的简单路径的数量有多困难?)中的第二个项目符号。)

1
是否有支持这些字符串操作的“字符串堆栈”数据结构?
我正在寻找一种数据结构,该结构可在字符集上存储一组字符串,该字符集能够执行以下操作。我们将为存储字符串集合的数据结构。D(S )SΣΣ\SigmaD(S)D(S)\mathcal{D}(S)SSS Add-Prefix-Set在:给定一组(可能为空)字符串,其大小由一个常数限制,而字符串长度由一个常数限制,则返回。这两个边界常量都是全局的:对于所有输入它们都是相同的。Ť d({ 吨小号|吨∈ Ť ,小号∈ 小号} )ŤD(S)D(S)\mathcal{D}(S)TTTD({ts | t∈T,s∈S})D({ts | t∈T,s∈S})\mathcal{D}( \{ t s\ |\ t \in T, s \in S\} )TTT Get-Prefixes在:返回。请注意,只要我可以在时间内枚举其内容,我就不介意此集合使用什么结构。{ a | 一个小号∈ 小号,一个∈ Σ } Ö (|Σ |)D(S)D(S)\mathcal{D}(S){a | as∈S,a∈Σ}{a | as∈S,a∈Σ}\{ a \ | \ as \in S, a \in \Sigma \}O(|Σ|)O(|Σ|)O(|\Sigma|) Remove-Prefixes在D(S)D(S)\mathcal{D}(S):返回D({s …

4
查找图形直径的时间复杂度
找到图的直径的时间复杂度是 多少?G=(V,E)G=(V,E)G=(V,E) O(|V|2)O(|V|2){O}(|V|^2) O(|V|2+|V|⋅|E|)O(|V|2+|V|⋅|E|){O}(|V|^2+|V| \cdot |E|) O(|V|2⋅|E|)O(|V|2⋅|E|){O}(|V|^2\cdot |E|) O(|V|⋅|E|2)O(|V|⋅|E|2){O}(|V|\cdot |E|^2) 图的直径是图中所有顶点对之间的最短路径距离的集合中的最大值。GGG 我不知道该怎么办,我需要对如何解决这样的问题进行完整的分析。

2
具有在摊销时间内搜索,插入和删除的数据结构
是否有数据结构可维护在摊销时间内支持以下操作的有序列表?O(1)Ø(1个)O(1) GetElement(k):返回列表的第个元素。kķk InsertAfter(x,y):将新元素y插入x后面的列表中。 Delete(x):从列表中删除x。 对于最后两个操作,您可以假定x是直接作为指向数据结构的指针而给出的。InsertElement返回y的相应指针。InsertAfter(NULL,y)在列表的开头插入y。 例如,从一个空的数据结构开始,以下操作将更新有序列表,如下所示: InsertAfter(NULL,a) ⟹⟹\implies [一种] InsertAfter(NULL,b) ⟹⟹\implies [b,a] InsertAfter(b,c) ⟹⟹\implies [b,c,a] InsertAfter(a,d) ⟹⟹\implies [b,c,a,d] 删除(c) ⟹⟹\implies [b,a,d] 在这五个更新之后,GetElement(2)应该返回d,而GetElement(3)应该返回一个错误。

3
真的有可能证明下界吗?
给定任何计算问题,为这种计算找到下界的任务确实可行吗?我想它可以归结为如何定义单个计算步骤以及我们用于证明的模型,但是鉴于此,我们是否真的能证明通常的下界?我的意思是,我们能否证明“问题不能比时间更快地解决”而不是“问题可以在时间内或更快地解决”?XXXt(X)Ť(X)t(X)XXXt(X)Ť(X)t(X) 我试图找到有关下限及其证明的信息,但是我真的找不到任何有趣的东西,关于该主题的书籍/论文/网站有什么建议吗?

2
为什么C ++向量中的push_back会被摊销?
我正在学习C ++,注意到向量的push_back函数的运行时间是恒定的“摊销”。该文档进一步指出:“如果发生重新分配,则重新分配本身在整个大小上都是线性的。” 这不应该意味着push_back函数是,其中是向量的长度吗?毕竟,我们对最坏情况分析感兴趣,对吧?O(n)O(n)O(n)nnn 我想至关重要的是,我不知道形容词“摊销”如何改变运行时间。


6
在O(n)时间中:在不传递比较的集合中找到最大元素
标题说明了问题。 作为输入,我们可以比较一个元素列表(确定最大)。没有元素可以相等。 关键点: 比较不是传递性的(想像石头剪刀布):这可能是正确的:A> B,B> C,C> A (请注意,这不是有效的输入,因为此处没有有效的答案,我仅描述“非及物比较”) 每个输入数组将保证有一个答案 最大表示元素必须大于其他所有元素 拥有逆属性,即A> B表示B <A 例: Input: [A,B,C,D] A > B, B > C, C > A D > A, D > B, D > C Output: D 我无法找出在O(n)时间内完成此操作的方法,我最好的解决方案是O(n ^ 2)。 因为要确定答案,所以必须将每种元素与其他所有元素进行显式比较,以证明它确实是答案(因为比较不是可传递的),因此我对每种方法都感到困惑。 这排除了堆的使用,排序等。

2
如何有效地找到数字和序列的元素?
出于兴趣,我试图解决Euler项目(数字总和序列)的“最近”类别中的问题 。但是我想不出一种有效解决问题的方法。问题如下(在最初的问题序列中,开始时有两个问题,但不会改变序列): 的数字和序列是1,2,4,8,16,23,28,38,49 ....其中nthnthn^{th}序列的术语是和数字序列中它前面。找到序列的1015th1015th10^{15}th项。 天真的解决方案无法实现,因为它需要大量时间。我试图减少的问题,以矩阵幂的情况下(这将花费O(log(1015))O(log(1015))O(log ( 10^{15}))的时间量),但不能想出这样的复发拟合线性标准作为复发,这种序列是相当特有。可以看出,该序列由重复控制: an=an−1+d(an−1).....(1)an=an−1+d(an−1).....(1) a_n = a_{n-1} + d( a_{n-1} ) ..... (1 ) 其中anana_n是nthnthn^{th}序列的术语和ddd是给定的自然数作为数(例如数字输入返回总和时的功能。d(786)=21d(786)=21\;d(786)=21)。我的第二种方法是尝试在序列中找到某种模式。可以看出,序列的前几项可以写成 a_1 = 1 a_2 = 1 + d( 1 ) a_3 = 1 + d( 1 ) + d( 1 + d( 1 ) ) a_4 = 1 + d( 1 …

1
无锁,恒定的更新时间并发树数据结构?
我最近阅读了一些文献,并且发现了一些相当有趣的数据结构。 我研究了各种不同的方法来将更新时间降低到最坏情况下的更新时间[1-7]。O(1)O(1)\mathcal{O}(1) 最近,我开始研究无锁数据结构,以支持有效的并发访问。 在无锁数据结构的实现中是否使用了这些最坏情况下的更新时间技术?O(1)O(1)\mathcal{O}(1) 我问是因为 在我看来,它们似乎是这种“理论上的增强”的明显实践扩展。 Tarjan,Robert Endre。“以O(1)循环更新平衡的搜索树。”《信息处理快报》,第16号,否。5(1983):253 – 257。 Driscoll,JR,N Sarnak,DD Sleator和RE Tarjan。“使数据结构持久化”。在第18届ACM计算理论年度学术会议论文集中,109-121。STOC '86。美国纽约州:ACM,1986年。 Levcopoulos,C。和Mark H. Overmars。“具有O(1)最坏情况更新时间的平衡搜索树。” Acta Inf。26号 3(1988年11月):269-277。 鲁道夫·弗莱舍。具有O(1)最坏情况更新时间的简单平衡搜索树 Dietz,Paul F和Rajeev Raman。“一个恒定的更新时间手指搜索树。”信息处理,第52号信。3(1994):147 – 154。 Lagogiannis,George,Christos Makris,Yannis Panagis,Spyros Sioutas和Kostas Tsichlas。“具有最坏情况下恒定更新时间的新动态平衡搜索树。” J. Autom。郎 梳子。8号 4(2003年7月):607-632。 Brodal,GerthStølting,George Lagogiannis,Christos Makris,Athanasios Tsakalidis和Kostas Tsichlas。“指针机器中的最佳手指搜索树。” J. Comput。Syst。科学 67号 2(2003年9月):381-418。

1
河内塔楼的复杂性
我对河内塔的复杂性存有以下疑问,我想请您发表评论。 是NP吗? 尝试的答案:假设Peggy(提供者)解决了问题并将其提交给Victor(验证者)。Victor可以轻松地看到解决方案的最终状态是正确的(在线性时间内),但是他别无选择,只能遍历Peggy的每一个举动,以确保她没有做出非法举动。由于Peggy必须至少制作2 ^ |个磁盘| -1步(可证明),Victor也必须效仿。因此,Victor没有多项式时间验证(NP的定义),因此不能出现在NP中。 在PSPACE中吗?似乎如此,但我想不出如何扩展上述推理。 它是PSPACE完整的吗?似乎没有,但是我只有一个模糊的想法。ToH是特定实例的自动计划是PSPACE完整的。我认为,规划比ToH困难得多。 更新:输入= nnn,磁盘数;输出=每个步骤的磁盘配置。更新此内容后,我意识到此输入/输出格式不适合决策问题。对于这种问题,我不确定要获取NP,PSPACE等概念的正确形式。 更新#2:在Kaveh和Jeff发表评论后,我被迫使问题更加精确: 假设输入为一对整数,其中n是磁盘数。如果磁盘采取的移动顺序是以(磁盘编号,from-peg,to-peg)(磁盘编号,from-peg,to-peg)...的格式记下的,则从第一次移动到最后,以二进制编码,输出第i位。(n,i)(n,i)(n,i)nnniii 让我知道是否需要更详细的编码。我想卡夫的评论在这种情况下适用吗?

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.