Tag: 时间复杂性

为什么差异列表比常规连接更有效?

我现在正在通过在线学习你一个haskell书籍,并且已经到了一个章节,作者正在解释一些列表连接可能是不够的:例如 ((((a ++ b) ++ c) ++ d) ++ e) ++ f 据说效率不高。 作者提出的解决scheme是使用定义为“差异列表” newtype DiffList a = DiffList {getDiffList :: [a] -> [a] } instance Monoid (DiffList a) where mempty = DiffList (\xs -> [] ++ xs) (DiffList f) `mappend` (DiffList g) = DiffList (\xs -> f (g xs)) 我很难理解为什么在某些情况下DiffList在计算上比简单的级联更有效率。 有人能够简单地向我解释为什么上面的例子效率很低,DiffList以什么方式解决了这个问题?

Java中的LinkedList调用size()的时间复杂度是多less?

正如标题所问,我不知道LinkedList类中的size()方法是否需要O(1)时间或O(n)时间。

时间复杂度删除运营商

什么是delete[]运算符的时间复杂性 ? 我的意思是它是如何实现的 – 是否遍历数组中的所有元素并调用每个元素的析构函数? 这个操作符是否对原始types ( int等)和用户定义的types做同样的事情?

len()关于集合和列表的复杂性

len()关于集合和列表的复杂性同样是O(1)。 为什么需要更多的时间来处理集合? ~$ python -m timeit "a=[1,2,3,4,5,6,7,8,9,10];len(a)" 10000000 loops, best of 3: 0.168 usec per loop ~$ python -m timeit "a={1,2,3,4,5,6,7,8,9,10};len(a)" 1000000 loops, best of 3: 0.375 usec per loop 它是否与特定的基准相关,比如,构build集比构build列表需要更多的时间,并且基准也考虑到了这一点? 如果创build一个集合对象比创build一个列表需要更多的时间,那么根本原因是什么?

在计算时间方面,O(n)algorithm能否超过O(n ^ 2)?

假设我有两个algorithm: for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { //do something in constant time } } 这当然是O(n^2) 。 假设我也有: for (int i = 0; i < 100; i++) { for (int j = 0; j < n; j++) { //do something in constant […]

各种数据结构的时间复杂度是多less?

我试图列出常见的数据结构像数组,二叉search树,堆,链表等操作的时间复杂性,特别是我指的是Java。 他们是非常普遍的,但我想我们中的一些人并不是100%确切的答案。 任何帮助,特别是参考,非常感谢。 例如对于单链表:更改一个内部元素是O(1)。 你怎么能这样做? 在更改元素之前,您必须先search元素。 此外,对于vector,添加一个内部元素给出为O(n)。 但是,为什么我们不能以分期固定的时间使用指数呢? 请纠正我,如果我失去了一些东西。 我张贴我的发现/猜测作为第一个答案。

嵌套for循环的时间复杂度

我需要计算以下代码的时间复杂度: for (i = 1; i <= n; i++) { for(j = 1; j <= i; j++) { // Some code } } 是O(n ^ 2)吗?

O(log n)是什么意思?

我目前正在学习Big O Notation运行时间和分期次数。 我理解O(n)线性时间的概念,这意味着input的大小会按比例影响algorithm的增长…例如二次时间O(n 2 )等也是如此。甚至algorithm,例如置换生成器,具有O(n!)次,以阶乘增长。 例如,下面的函数是O(n),因为该algorithm与其inputn成比例增长: f(int n) { int i; for (i = 0; i < n; ++i) printf("%d", i); } 同样,如果有一个嵌套循环,时间将是O(n 2 )。 但究竟是O(log n) ? 例如,说一个完整的二叉树的高度是O(log n)是什么意思? 我知道(也许不是很详细)什么对数,在这个意义上说:log 10 100 = 2,但我不明白如何识别对数时间的函数。

斐波那契数列的计算复杂性

我理解Big-O符号,但我不知道如何计算它的许多function。 特别是,我一直在试图弄清斐波那契数列的天真版本的计算复杂性: int Fibonacci(int n) { if (n <= 1) return n; else return Fibonacci(n – 1) + Fibonacci(n – 2); } 斐波纳契数列的计算复杂度是多less?它是如何计算的?

什么是“大O”符号的简单英文解释?

我宁愿尽可能less的正式定义和简单的math。