Questions tagged «time-complexity»

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

2
在有向图中找到至少两个相同长度的路径
假设我们有一个有向图和两个节点和。我想知道是否已经有算法来计算以下决策问题:G=(V,E)G=(V,E)G=(V,E)AAABBB 和之间是否至少有两条相同长度的路径?AAABBB 复杂度如何?我可以在多项式时间内求解吗? 我想在图表上添加一个新的约束,也许这个问题可以解决。在邻接矩阵上,每一列都不为空。因此,每个节点在输入上至少有一个箭头,并且至少还有一个与其连接的节点。因此,如果节点是第个节点,则是图中的边。iii(i,i)(i,i)(i,i)

3
在运行时边界中是否出现比逆Ackermann增长慢的函数?
一些复杂的算法(联合查找)具有渐近时间复杂度中出现的近似恒定的逆阿克曼函数,如果忽略近似恒定的逆阿克曼项,则它们是最坏情况下的时间最优。 是否有已知算法的运行时间有任何示例,这些算法的运行时间从根本上比逆阿克曼倒数慢(例如,在多项式或指数等变换下不等同于阿克曼的函数倒数)给出了最著名的最坏情况时间解决根本问题的复杂性?

3
寻找离散对数有多难?
的离散对数是相同的发现在给出,Ç,和Ñ。a b = c mod N a c Nbbbab=cmodNab=cmodNa^b=c \bmod NaaacccNNN 我想知道这属于什么复杂度组(例如,对于经典计算机和量子计算机),以及哪种方法(即算法)最适合完成此任务。 上面的Wikipedia链接并没有给出非常具体的运行时。我希望找到最类似的方法来找到这种方法。

1
查找稀疏图的周长的最佳算法?
我想知道如何找到一个稀疏无向图的周长。稀疏的意思是。最佳的意思是最低的时间复杂度。|E|=O(|V|)|E|=O(|V|)|E|=O(|V|) 我考虑过对Tarjan的无向图算法进行一些修改,但是没有找到好的结果。实际上,我以为,如果我可以在找到2个相连的分量,那么可以通过从第一部分实现的某种归纳法找到周长。不过,我可能走错了路。渐近优于(即)的任何算法都可以使用。Θ (| V | 2)o (| V | 2)O(|V|)O(|V|)O(|V|)Θ(|V|2)Θ(|V|2)\Theta(|V|^2)o(|V|2)o(|V|2)o(|V|^2)

7
有什么特点
有时候,仔细检查一下,很容易确定算法的时间复杂度。具有两个嵌套循环算法显然为。该探索的所有可能的组合的算法两个值中的基团是明显。N 2 N 2 NñNNñ2N2N^2ñNN2ñ2N2^N 但是,我不知道如何“发现”具有复杂度的算法。例如,递归mergesort实现就是一个。mergesort或其他算法的共同特征是什么,如果我正在分析的话会给我一个提示?Θ (N log N )Θ (N日志ñ)Θ(Nlog⁡N)\Theta(N \log N)Θ (N日志ñ)Θ(Nlog⁡N)\Theta(N \log N) 我敢肯定,算法具有复杂度的方法不止一种,因此任何答案都值得赞赏。顺便说一句,我正在寻求一般特征和提示,而不是严格的证明。Θ (N日志ñ)Θ(Nlog⁡N)\Theta(N \log N)


2
可证明需要二次时间的问题
我正在寻找输入的下限为Ω(|x|2Ω(|x|2\Omega(|x|^2)的问题的示例。xxx 该问题需要具有以下属性: Ω(n2)Ω(n2)\Omega(n^2)任何算法的运行时证明-第一优先级是具有尽可能简单的下限参数。 O(n2)O(n2)O(n^2)算法(如果可能)也很简单。 输出大小为(或更小)。显然,任何需要加长输出的问题都至少需要相似的运行时间,但这不是我想要的。注意,任何决策问题都适合于此。O(n)O(n)O(n)Ω(n2)Ω(n2)\Omega(n^2) (如果可能)“自然”问题。如果没有正式定义,则任何CS毕业生都会认识到的问题是更可取的。 最近有人问我这样的问题,但无法提出一个简单的问题。我想到的第一个问题是,它被构想为运行时问题。这还不够简单,而且,最近证明这种变形是错误的:o。3SUM3SUM3SUMΩ(n2)Ω(n2)\Omega(n^2) 谈到一个非常不自然的问题,我相信这个问题是输入确定性TM并输入作为输入,并在之后输出磁带头的位置的问题。在上运行时的步骤可能会回答问题。⟨M⟩,x⟨M⟩,x\langle M \rangle,x(|M|+|x|)2(|M|+|x|)2(|M|+|x|)^2xxx 如果您绝对需要,请同意我们正在使用单磁带TM模型,尽管我更喜欢其运行时间与确切模型无关的问题(只要它是合理的模型即可)。 因此,我们能否找到一个运行时间为的简单(证明),自然(众所周知)的问题?Θ(n2)Θ(n2)\Theta(n^2)

2
可以通过图灵折减来显示NP硬度吗?
Ramírez-Alfonsín 在论文的Frobenius问题的复杂度中,使用图灵归约法证明了一个问题是NP完全的。那可能吗?到底如何 我以为这只有通过多项式时间多减一才有可能。有什么参考吗? 是否存在两种不同的NP硬度概念,甚至是NP完整性?但是然后我感到困惑,因为从实际的角度来看,如果我想证明我的问题是NP难题,我该使用哪一个? 他们开始进行如下描述: 从问题 到另一个问题的多项式时间Turing约简 是一种算法A,它 通过使用假设子例程A'求解来求解 , 使得如果A'是的多项式时间算法, 则A将是多项式时间算法 。我们说 可以被图灵简化为 。P1P1P_1P2P2P_2P1P1P_1P2P2P_2P2P2P_2P1P1P_1P1P1P_1P2P2P_2 一个问题 被调用(图灵)NP-硬,如果有一个NP完全决策问题 使得 可以图灵降低到 。P1P1P_1P2P2P_2P2P2P_2P1P1P_1 然后,他们使用NP完全问题的Turing约简来显示其他一些问题的NP完全性。

2
垂直能见度问题的高效算法
在思考一个问题时,我意识到我需要创建一种有效的算法来解决以下任务: 问题:我们给了nnn边的二维方盒,其边与轴平行。我们可以从顶部进行调查。但是,也有mmm水平段。每段具有的整数yyy -协调(0≤y≤n0≤y≤n0 \le y \le n)和xxx坐标- (0≤x1&lt;x2≤n0≤x1&lt;x2≤n0 \le x_1 < x_2 \le n)并连接点(x1,y)(x1,y)(x_1,y)和(x2,y)(x2,y)(x_2,y)(看下图)。 我们想知道,对于框顶部的每个单元段,如果我们仔细观察该段,可以在框内垂直看到多深。 x∈{0,…,n−1}x∈{0,…,n−1}x \in \{0,\dots,n-1\}maxi: [x,x+1]⊆[x1,i,x2,i]yimaxi: [x,x+1]⊆[x1,i,x2,i]yi\max_{i:\ [x,x+1]\subseteq[x_{1,i},x_{2,i}]} y_i 示例:给定和分段,如下图所示,结果为。看看有多深的光线可以进入盒子。米= 7 (5 ,5 ,5 ,3 ,8 ,3 ,7 ,8 ,7 )n=9n=9n=9m=7m=7m=7(5,5,5,3,8,3,7,8,7)(5,5,5,3,8,3,7,8,7)(5, 5, 5, 3, 8, 3, 7, 8, 7) 对我们来说幸运的是,和都非常小,我们可以离线进行计算。米nnnmmm 解决此问题的最简单算法是蛮力:对于每个段,遍历整个数组并在必要时进行更新。然而,它给我们不是很可观。O(mn)O(mn)O(mn) 很大的改进是使用了一个片段树,该树能够在查询过程中最大化片段上的值并读取最终值。我不会进一步描述它,但是我们看到时间复杂度是。O((m+n)logn)O((m+n)log⁡n)O((m+n) \log n) 但是,我想出了一个更快的算法: 大纲: 按坐标的降序对段进行排序(线性时间使用计数排序的变化)。现在注意,如果以前任何段都被任何段覆盖,则随后的任何段都不能再束缚通过该段的光束。然后,我们将从框的顶部到底部进行扫线。yyyxxxxxx …

3
具有恒定时间操作的智能内存管理?
让我们考虑一个内存段(可以在需要时增大或缩小文件的大小,就像文件一样),您可以在该内存段上执行两个涉及固定大小块的基本内存分配操作: 分配一个块 释放先前已分配的不再使用的块。 同样,作为一项要求,不允许内存管理系统在当前分配的块之间移动:它们的索引/地址必须保持不变。 最幼稚的内存管理算法将增加一个全局计数器(初始值为0),并将其新值用作下一个分配的地址。但是,当只剩下几个分配的块时,这绝不允许缩短段。 更好的方法:保留计数器,但维护一个释放块列表(可以在固定时间内完成),并在不为空的情况下将其用作新分配的源。 接下来是什么?在保持恒定的时间分配和解除分配约束的情况下,有什么办法可以使内存段尽可能地短而可以完成? (目标可能是使用最小的地址跟踪当前未分配的块,但是在恒定时间内似乎不可行……)

3
为什么循环比递归快?
在实践中,我知道任何递归都可以写成一个循环(反之亦然(?)),如果我们用实际的计算机进行测量,我们发现对于相同的问题,循环比递归要快。但是,有什么理论可以使这种区别发生或者它主要是实证的?

2
为什么认为分解大整数很困难?
我在某处读到,发现最有效的算法可以计算时间的因数,但是我写的代码是或可能是具体取决于快速除法和模数。我敢肯定我在某个地方误解了一些东西,但是我不确定在哪里。这就是我以伪代码形式编写。O(exp((64/9⋅b)1/3⋅(logb)2/3)O(exp⁡((64/9⋅b)1/3⋅(log⁡b)2/3)O(\exp((64/9 \cdot b)^{1/3} \cdot (\log b)^{2/3})O(n)O(n)O(n)O(nlogn)O(nlog⁡n)O(n \log n) function factor(number) -&gt; list factors = new list if number &lt; 0 factors.append(-1) number = -number i = 2 while i &lt;= number while number % i == 0 factors.append(i) number /= i i++ return factors

2
密集的NP完整语言表示P = NP
我们说,如果存在多项式使得,则语言是密集的所有换句话说,对于任何给定的长度,仅存在多项式中长度为多个单词,它们不在中 p | Ĵ ç ∩ &Sigma; ñ | ≤ p (Ñ )ñ ∈ Ñ。n nJ⊆Σ∗J⊆Σ∗J \subseteq \Sigma^{*}ppp|Jc∩Σn|≤p(n)|Jc∩Σn|≤p(n) |J^c \cap \Sigma^n| \leq p(n)n∈N.n∈N.n \in \mathbb{N}.nnnññnĴ。Ĵ。J. 我目前正在研究的问题要求显示以下内容 如果存在密集的ñPñPNP语言,则P=NPP=NPP = NP 本文所建议的是考虑将多项式简化为 -,然后构造一种算法,该算法试图满足给定的公式,同时生成元素S A T C N F J c。333SATSATSATCNFCNFCNFJc.Jc.J^c. 我想知道的是 还有更直接的证据吗?在更一般的情况下知道这个概念吗?

1
蛮力Delaunay三角剖分算法的复杂度
在马克·德·伯格等人的“计算几何:算法和应用”一书中,有一种非常简单的蛮力算法,用于计算Delaunay三角剖分。该算法使用了非法边的概念-可能不会出现在有效Delaunay三角剖分中的边,必须用其他一些边替换。在每个步骤中,该算法仅查找这些非法边缘并执行所需的位移(称为“ 边缘翻转”),直到没有非法边缘为止。 算法LegalTriangulation(TTT) 输入。一些三角TTT点集的PPP。 输出。的合法三角剖分PPP。 而 TTT包含非法边缘pipjpipjp_ip_j do \quad让pipjpkpipjpkp_i p_j p_k和pipjplpipjplp_i p_j p_l邻近于两个三角形pipjpipjp_ip_j。 \quad从T删除,然后添加p k p l。返回牛逼。pipjpipjp_ip_jTTTpkplpkplp_kp_l TTT 我听说这种算法在最坏的情况下会在时间内运行;但是,我不清楚这句话是否正确。如果是,如何证明这一上限?O(n2)O(n2)O(n^2)

2
这个显然是O(n lg n)乘法算法的错误在哪里?
最近一篇有关找到三个等距间隔的难题的博客文章将我引向一个stackoverflow问题,该问题的最高答案声称是在O(n lg n)时间内完成的。有趣的是,该解决方案涉及对多项式求平方,并参考描述了如何在O(n lg n)时间内进行的论文。 现在,多项式相乘实际上与数字相乘。唯一真正的区别是缺少携带。但是...进位也可以在O(n lg n)时间内完成。例如: var value = 100; // = 0b1100100 var inputBitCount = value.BitCount(); // 7 (because 2^7 &gt; 100 &gt;= 2^6) var n = inputBitCount * 2; // 14 var lgn = n.BitCount(); // 4 (because 2^4 &gt; 14 =&gt; 2^3) var c = …

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.