2013-06-11 18 views
5

Czy ktoś może wskazać mi źródło zawierające listę złożoności Big-O podstawowych funkcji bibliotecznych clojure, takich jak conj, cons itd.? Wiem, że Big-O różni się w zależności od rodzaju danych wejściowych, ale czy jest dostępny taki zasób? Czuję się niekomfortowo, kodując coś, nie mając pojęcia, jak szybko to się skończy.Funkcje Big O z biblioteki clojure

Odpowiedz

15

Oto tabela składa się John Jacobsen i podjęte from this discussion:

enter image description here

+4

"1" w cudzysłowie, jest tak blisko, że nie ma znaczenia (według Rich Hickey.) Ale tak naprawdę jest O (log_32 głębokość)? –

+0

Ta tabela nie jest całkowicie poprawna. "last" jest zawsze O (n). 'cons' jest zawsze O (1) (zakładając, że' seq' jest zawsze O (1)). 'conj' w wektorze to tylko" 1 ", a nie 1. – kotarak

+0

@kotarak Czy byłbyś w stanie trochę poprawić swoje poprawki? :) – Anonymous

7

późno do partii tutaj, ale znalazłem the link in the comments of the first answer być bardziej ostateczne, więc jestem przeksięgowanie go tutaj z kilkoma modyfikacjami (to znaczy, english->big-o)

enter image description here
Table Markdown source

W kolekcjach nieposortowanych, O (log n) jest prawie stały czas, a ponieważ 2 węzłów może zmieścić się w węzłach podzielonych na bity trie, oznacza to worst-case complexity of log32232 = 6.4. Wektory są również tries where the indices are keys.

Posortowane kolekcje wykorzystują wyszukiwanie binarne tam, gdzie to możliwe. (Tak, są to zarówno technicznie O (log n), w tym stały współczynnik służy jako odniesienie.)

Listy gwarantują stały czas operacji dla pierwszego elementu i O (n) dla wszystkich pozostałych.