2010-12-28 8 views
1

Läßt nehmen, dass ich diese Eingabe haben: eine Liste der ListeKarte reduzieren Komplexität

(def list-of-list-3 (Liste (Liste 1 2 3) (Liste 4 5 6) (list 7 8 9)))

(Karte # (reduzieren *% 1) list-of-list3)

die Karten reduzieren hat eine O (n^2) Komplexität in diesem Fall?

ist map-reduce übersetzt als zwei verschachtelt für?

Also, wenn ich das obige Beispiel auf der Clojure REPL ausführen, scheint die Komplexität Zeit wie O (n).

wenn ich die Eingabegröße dupliziere (Liste-Liste-6 (Liste (Liste 1 2 3) (Liste 4 5 6) (Liste 7 8 9) (Liste 8 2 3) (Liste 9 8 1) (Liste 7 6 4))) Die Zeit steigt linear, nicht quadratisch.

Kann jemand sagen warum?

Dank im Voraus

+1

Es wäre eine gute Idee sein, entfernen Sie ‚Java‘ aus der Tag-Liste. Die Implementierung sieht wie eine LISP-Variante aus. – Davidann

+0

Ja David, ich werde. Diese Variante heißt Clojure, eine weitere JVM-Sprache. Es ist wirklich abgefahren ! Meine nächsten Sprachen werden Scala oder Clojure sein. : D – CHAPa

Antwort

2

Die Map-reduzieren hat eine O(n^2) Komplexität in diesem Fall?

Unmöglich zu sagen, es sei denn, Sie sagen uns, was n in dem Ausdruck list-of-list-3 entspricht.

Übrigens, O(n^2) oder O(n*n) ist quadratische Komplexität, nicht exponentielle Komplexität. Exponentielle Komplexität es O(e^n).

wenn i [double] die Eingangsgröße

(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))) 

erhöhen die Zeit in einer linearen Art und Weise, nicht exponentiell.

Davon vermute ich, dass die n die Länge der äußeren Liste sein soll. Wenn ja, dann ist die reduce eigentlich O(n) nicht O(n^2). Um quadratisches Wachstum zu bekommen, müßten Sie definieren list-of-list-6 als:

(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))) 
+0

ja stephen. n ist die Größe der äußeren Liste. m für innere Liste. Die Komplexität ist n * m. im schlimmsten Fall ist das Big-O quadratisch. – CHAPa

+0

nicht einverstanden, siehe meine Antwort unten – zabeltech

4

Es ist nicht O ist (n^2), ist es in etwa O (n * m), wobei n die Anzahl der Listen und m ist die Länge von ihnen. Es gibt noch andere Faktoren, die mit den Längen verschiedener Zahlen zu tun haben. Tun Sie es von Hand und Zeit sich selbst zu sehen, warum!

Verwandte Themen