W Schemacie mogę użyć drzewa define-struct
do utworzenia drzewa wyszukiwania binarnego, ale jak to zrobić w Clojure?Jak zrobić drzewo wyszukiwania binarnego w Clojure?
Odpowiedz
Możesz użyć structmaps. Aby zdefiniować jedno:
(defstruct bintree :left :right :key)
Aby instancję:
(struct-map bintree :left nil :right nil :key 0)
Następnie można uzyskać dostęp do wartości w struct tak:
(:left tree)
itp
Lub może tworzyć nowe funkcje dodatkowe:
(def left-branch (accessor bintree :left))
i używać go:
(left-branch tree)
Nie znam Clojure, ale założę się, że to tak samo, jak robisz to na Scheme bez define-struct
... po prostu skontrastuje lewą i prawą gałąź. Aby znaleźć coś, powracaj, póki nie trafisz na atom.
Poważnie, jednak mapy strukturalne brzmią jak tego, co chcesz. Znalazłem this page. Poszukaj map struktury w połowie długości.
Najprostszym sposobem byłoby użyć drzewa, który jest już zdefiniowany w języku (co sortowane-map jest drzewem naprawdę, jeśli wystarczy inną funkcję porównać klucze, użyj posortowanej mapy-według).
;;define function for comparing keys
(defn compare-key-fn [key1 key2] (< key1 key2))
;;define tree and add elements
(def my-tree
(-> ;;syntax sugar
(sorted-map-by compare-key-fn) ;;this returns empty tree with given function to compare keys
(assoc 100 "data for key = 100") ;;below we add elements to tree
(assoc 2 "data for key = 2")
(assoc 10 "data for key = 10")
(assoc -2 "data for key = -1")))
;;accesing elements by key
(prn "element for key 100 =" (my-tree 100))
;;"erasing" elements from tree - in reality, what we are really doing, is returning a new tree that contains all elements of the old one, except the element we've just erased.
(def my-new-tree
(dissoc my-tree 2))
(prn my-new-tree) ;; to verify, that element 2 is "erased"
Nie posortowano-zestaw? Myślę, że to byłoby lepsze dopasowanie, a kluczem może być część przechowywanych przez ciebie struktur. Posortowana mapa zmusza do oddzielenia klucza i obsługi go osobno na zawsze. –
+1 w każdym razie, jest blisko tego, co powiedziałbym, gdybym zobaczył pytanie, kiedy zostało zadane. –
- 1. Drzewo wyszukiwania binarnego w C
- 2. Rekurencyjne drzewo wyszukiwania binarnego x = zmień (x)
- 3. Strategia wyszukiwania duplikatów w drzewie wyszukiwania binarnego
- 4. Dlaczego drzewa wyszukiwania binarnego?
- 5. Tabela Big O of Hash vs. Drzewo wyszukiwania binarnego
- 6. Utwórz zbalansowane drzewo wyszukiwania binarnego ze strumienia liczb całkowitych
- 7. Wdrażanie zrównoważonego drzewa wyszukiwania binarnego?
- 8. Znajdź medianę w drzewie wyszukiwania binarnego
- 9. Destruktor drzewa wyszukiwania binarnego
- 10. wyszukiwania XML w Clojure
- 11. drzewa wyszukiwania binarnego w rubinach
- 12. Jak zrobić letcc w Clojure?
- 13. Włóż posortowaną tablicę do drzewa wyszukiwania binarnego
- 14. Budowanie zrównoważonego drzewa wyszukiwania binarnego
- 15. Jak utworzyć drzewo binarne
- 16. Zrozumienie budowy drzewa wyszukiwania binarnego
- 17. Funkcja porównawcza wewnątrz wyszukiwania binarnego w C++
- 18. Jak zrobić obiekt do wywołania w Clojure?
- 19. jak zrobić max-by w clojure?
- 20. Usuń rekursywnie z drzewa wyszukiwania binarnego
- 21. Złożoność czasowa wyszukiwania binarnego dla nieposortowanej tablicy
- 22. Czy in_array() używa binarnego algorytmu wyszukiwania?
- 23. Sprawdź, czy drzewo jest drzewem binarnym wyszukiwania
- 24. Jak dostosować drzewo wyszukiwania Minimax do gry bez terminów?
- 25. Czy istnieje implementacja drzewa wyszukiwania binarnego w .NET 4?
- 26. Jak utworzyć drzewo Expression zrobić to samo co „startswith”
- 27. cakephp: jak zrobić TERAZ() działa w stanie wyszukiwania?
- 28. Drzewo rankingowe w C++
- 29. Czy drzewo binarne zawiera inne drzewo?
- 30. android jak zrobić AutoCompleteTextView działa jak google pole wyszukiwania
Jak to jest lepsze niż przy użyciu zagnieżdżonej listy lub wektora? – Zaz
Jest to lepsze, ponieważ klucze są nazwane i mają gwarantowany stały dostęp do czasu (listy są liniowe, ale wektory są stałe). Chociaż zostało to napisane w 2009 roku, od tego czasu wiele się zmieniło. Ja tylko polecałem 'defstruct', ponieważ pytanie dotyczyło' define-structure' schematu. –