Questions tagged «complexity-theory»

计算复杂度理论是理论计算机科学和数学中计算理论的一个分支,其重点是根据计算问题的内在难度对其进行分类。在编程中特别常见的是对时间或空间的“摊销分析”



9
如何找到算法的时间复杂度
问题 如何找到算法的时间复杂度? 在发布SO问题之前我做了什么? 我经历了这个,这个和许多其他链接 但是,在任何地方我都无法找到关于如何计算时间复杂度的清晰直接的解释。 我知道什么 ? 说一个简单的代码如下: char h = 'y'; // This will be executed 1 time int abc = 0; // This will be executed 1 time 说一个像下面这样的循环: for (int i = 0; i < N; i++) { Console.Write('Hello World !'); } int i = 0; 这将仅执行一次。时间实际上是计算到的,i=0而不是声明的。 …


17
如何建立堆的时间复杂度为O(n)?
有人可以帮助解释如何建立堆的O(n)复杂性吗? 将项目插入堆中是O(log n),插入重复n / 2次(其余为叶子,并且不能违反堆属性)。因此,O(n log n)我认为这意味着复杂度应为。 换句话说,对于我们“堆砌”的每个项目,它有可能不得不针对到目前为止的堆的每个级别(即log n个级别)过滤一次。 我想念什么?



12
斐波那契数列的计算复杂度
我了解Big-O表示法,但是我不知道如何为许多函数计算它。特别是,我一直在尝试找出Fibonacci序列的朴素版本的计算复杂性: int Fibonacci(int n) { if (n <= 1) return n; else return Fibonacci(n - 1) + Fibonacci(n - 2); } 斐波那契数列的计算复杂度是多少,如何计算?


5
确定递归函数的复杂度(Big O表示法)
明天我有计算机科学中期课程,我需要帮助确定这些递归函数的复杂性。我知道如何解决简单的案例,但我仍在尝试学习如何解决这些较困难的案例。这些只是我无法弄清楚的一些示例问题。任何帮助将不胜感激,将极大地帮助我的学习,谢谢! int recursiveFun1(int n) { if (n <= 0) return 1; else return 1 + recursiveFun1(n-1); } int recursiveFun2(int n) { if (n <= 0) return 1; else return 1 + recursiveFun2(n-5); } int recursiveFun3(int n) { if (n <= 0) return 1; else return 1 + recursiveFun3(n/5); } void …

6
什么是“ P = NP?”,为什么它是一个如此著名的问题?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 7年前关闭。 改善这个问题 在计算机科学中,P = NP是否可能是最著名的问题。这是什么意思?为何如此有趣? 哦,为了获得额外的荣誉,请张贴声明的真实性或虚假性证明。:)

9
log(n!)=Θ(n·log(n))吗?
我要证明log(n!)=Θ(n ·log(n))。 提示我应该用n n表示上限,而用(n / 2)(n / 2)表示下限。在我看来,这似乎并不那么直观。为什么会这样呢?我绝对可以看到如何将n n转换为n ·log(n)(即,记录方程的两边),但这有点倒退。 解决这个问题的正确方法是什么?我应该画递归树吗?对此没有任何递归,因此这似乎不是一种可行的方法。

30
如何在任何二叉树中找到两个节点的最低公共祖先?
这里的二叉树不一定是二叉搜索树。 该结构可以视为- struct node { int data; struct node *left; struct node *right; }; 我可以和一个朋友一起解决的最大解决方案就是这种情况- 考虑这个二叉树: 有序遍历收益-8,4,9,2,5,5,1,6,3,7 后订单遍历收益-8、9、4、5、2、6、7、3、1 因此,例如,如果我们要找到节点8和5的公共祖先,那么我们将列出在有序树遍历中8到5之间的所有节点的列表,在这种情况下碰巧是[4,9 ,2]。然后,我们检查此列表中的哪个节点在后遍历中最后出现,即2。因此,8和5的共同祖先是2。 我认为该算法的复杂度为O(n)(对于有序/后序遍历为O(n),其余步骤又为O(n),因为它们仅是数组中的简单迭代)。但是很有可能这是错误的。:-) 但这是一种非常粗糙的方法,我不确定在某些情况下它是否会崩溃。是否还有其他(可能是最佳的)解决方案?

5
2 ^ n和n * 2 ^ n是否具有相同的时间复杂度?
我发现的有关时间复杂度的资源尚不清楚何时可以忽略时间复杂度方程式中的术语,尤其是对于非多项式示例。 对我来说很明显,给定形式为n 2 + n + 1的东西,后两项是无关紧要的。 具体来说,给定两个分类2 n和n *(2 n),第二个的顺序与第一个相同吗?那里的附加n乘数有关系吗?通常,资源只是说x n呈指数形式并且增长得更快...然后继续前进。 我能理解为什么2 n不会超过n,但是为什么不将它们加在一起,所以在比较这两个方程时就显得尤为重要,事实上,它们之间的差总是n的因数,至少可以说这很重要。

6
HashMap的获取/输入复杂度
我们习惯说HashMap get/put运算是O(1)。但是,这取决于哈希实现。默认对象哈希实际上是JVM堆中的内部地址。我们确定声称get/putO(1)是否足够好? 可用内存是另一个问题。据我从javadocs理解,HashMap load factor应该是0.75。如果我们在JVM中没有足够的内存并且load factor超出限制怎么办? 因此,似乎无法保证O(1)。是有意义还是我想念什么?

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.