Clojure 映射降低复杂性
假设我有这个输入:一个列表 (def list-of-list-3(list(list 1 2 3)(list 4 5 6)(list 7 8 9)) (映射#(减少*%1)列表3) 在这种情况下,map reduce的复杂度为O(n^2) 是否将map reduce转换为两个嵌套对象? 因此,当我在clojure REPL上运行上面的示例时,复杂性时间看起来像O(n) 当我复制输入大小时(list-of-list-6(list(list)(list)1236)(list 756)(list 789)(list 823)(list 981)(list 764)),时间以线性方式增加,而不是以二次方式增加 有人能说为什么吗 提前感谢这不是O(n^2),大致是O(n*m),其中n是列表的数量,m是列表的长度。 还有其他因素与各种数字的长度有关。用手去做,自己计时看看为什么 不是O(n^2),大致是O(n*m),其中n是列表的数量,m是列表的长度。 还有其他因素与各种数字的长度有关。用手去做,自己计时看看为什么 在这种情况下,map reduce有一个Clojure 映射降低复杂性,clojure,complexity-theory,jvm-languages,Clojure,Complexity Theory,Jvm Languages,假设我有这个输入:一个列表 (def list-of-list-3(list(list 1 2 3)(list 4 5 6)(list 7 8 9)) (映射#(减少*%1)列表3) 在这种情况下,map reduce的复杂度为O(n^2) 是否将map reduce转换为两个嵌套对象? 因此,当我在clojure REPL上运行上面的示例时,复杂性时间看起来像O(n) 当我复制输入大小时(list-of-list-6(list(list)(list)1236)(list 756)(list 7
O(n^2)
复杂度
很难说,除非您告诉我们list-of-list-3
表达式中的n
对应什么
顺便说一下,O(n^2)
或O(n*n)
是二次复杂度,而不是指数复杂度。指数复杂性itO(e^n)
当我[加倍]输入大小时
( list-of-list-6 (list (list 1 2 3) (list 4 5 6) ( list 7 8 9)
(list 8 2 3) (list 9 8 1) (list 7 6 4)) )
时间呈线性增长,而不是指数增长
由此,我推测n
应该是外部列表的长度。如果是这样,那么reduce
实际上是O(n)
而不是O(n^2)
。要获得二次增长,您需要将list-of-list-6
定义为:
( list-of-list-6 (list (list 1 2 3 4 5 6) (list 4 5 6 1 3 2)
(list 7 8 9 1 2 3) (list 8 2 3 2 3 4)
(list 9 8 1 2 3 4) (list 7 6 4 5 6 7)) )
在这种情况下,map reduce有一个O(n^2)
复杂度
很难说,除非您告诉我们list-of-list-3
表达式中的n
对应什么
顺便说一下,O(n^2)
或O(n*n)
是二次复杂度,而不是指数复杂度。指数复杂性itO(e^n)
当我[加倍]输入大小时
( list-of-list-6 (list (list 1 2 3) (list 4 5 6) ( list 7 8 9)
(list 8 2 3) (list 9 8 1) (list 7 6 4)) )
时间呈线性增长,而不是指数增长
由此,我推测n
应该是外部列表的长度。如果是这样,那么reduce
实际上是O(n)
而不是O(n^2)
。要获得二次增长,您需要将list-of-list-6
定义为:
( list-of-list-6 (list (list 1 2 3 4 5 6) (list 4 5 6 1 3 2)
(list 7 8 9 1 2 3) (list 8 2 3 2 3 4)
(list 9 8 1 2 3 4) (list 7 6 4 5 6 7)) )
是的,斯蒂芬。n是外部列表的大小。m代表内部列表。复杂度为n*m。在最坏的情况下,大O是二次的。不同意,请看下面我的答案。n是外部列表的大小。m代表内部列表。复杂度为n*m。在最坏的情况下,Big-O是二次的。不同意,请看下面我的答案。从标记列表中删除“java”是个好主意。这个实现看起来像一个LISP变体。是的,David,我会的。这种变体称为Clojure,另一种JVM语言。真的很酷!我的下一个语言将是scala或clojure:从标记列表中删除“java”是个好主意。这个实现看起来像一个LISP变体。是的,David,我会的。这种变体称为Clojure,另一种JVM语言。真的很酷!我的下一个语言将是scala或clojure:D