2014-04-15 9 views
5

So, ich lese, dass die count Operation ist O (1) für eine Clojure Vektoren, Listen und Karten.Was ist die Leistung von `count` auf einem Clojure-Set?

(count [1 2 3]) ;=> 3 

Aber ist es auch O (1) für eine Clojure eingestellt? Ich stelle mir vor es wahrscheinlich ist, aber ich bin nicht wirklich sicher, wie Sie herausfinden. Ich hatte eine kurze Lektüre von http://clojure.org/data_structures#Data%20Structures-Sets, konnte aber die Informationen dort nicht sehen.

Antwort

8

Es ist O(1)

Sie können dies überprüfen, indem die Beobachtung, dass clojure.lang.PersistentSet einen Quellcode _count Feld in der Java behauptet:

https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/PersistentList.java

+0

Danke, dass ich an der richtigen Stelle zeigen suchen! Ich kann jetzt die "Gezählt" -Schnittstelle sehen, die O (1) -Leistung für "count" anzeigt, und das PersistentSet implementiert es. '(instance? clojure.lang.Count # {: a: b:: c}) => true' –

+3

Ja' Gezählt' ist ein nützliches Marker-Interface, nach dem gesucht werden kann. Beachten Sie jedoch, dass es nicht unbedingt * O * (1) Verhalten garantiert - Sie müssen die tatsächliche konkrete Klassenimplementierung überprüfen, um sicher zu sein. Theoretisch könnte jemand "schlecht" mit O (n^2) Leistung oder schlechter umsetzen ... – mikera

Verwandte Themen