Najlepsza odpowiedź
Istnieją różne typy drzewiastych struktur danych. Niektóre z nich to
- Drzewo binarne : jest to najbardziej podstawowy element struktury drzewa. Gdzie każdy węzeł może mieć maksymalnie dwoje dzieci. idealne drzewo binarne to drzewo binarne, w którym wszystkie węzły wewnętrzne mają dwoje dzieci i wszystko liście mają tę samą głębokość lub ten sam poziom. pełne drzewo binarne (czasami określane jako właściwe [15] lub płaskie drzewo binarne) to drzewo, w którym każdy węzeł w drzewie ma 0 lub 2 dzieci. W zakończono drzewo binarne każdy poziom, z wyjątkiem ostatniego, jest całkowicie zapełniony, a wszystkie węzły na ostatnim poziomie znajdują się jak najdalej na lewo. W nieskończonym ukończeniu drzewo binarne, każdy węzeł ma dwoje dzieci.
- Drzewo wyszukiwania binarnego: BST to drzewo binarne z określonymi właściwościami takie jak, a lewe dziecko danego węzła zawiera wartość mniejszą niż równa danemu węzłowi, a prawe dziecko zawiera węzeł większy niż podany węzeł.
- Drzewo AVL lub drzewo binarne o zrównoważonej wysokości : Jest to odmiana drzewa binarnego, w której różnica wysokości między lewym i prawym poddrzewem może wynosić maksymalnie 1. Jeśli w dowolnym momencie różnią się o więcej niż jedno, następuje ponowne zrównoważenie przywrócić tę właściwość. Wszystkie operacje wyszukiwania, wstawiania i usuwania zajmują O (log n) czasu zarówno w przeciętnym, jak i najgorszym przypadku, gdzie n to liczba węzłów w drzewie przed operacją.
- Czerwono-czarne drzewo : Kolejna odmiana drzewa binarnego podobna do drzewa AVL jest to samo równoważące się drzewo binarne wyszukiwania. Węzły tego drzewa są albo w kolorze czerwonym, albo czarnym.
- Drzewo splay: Drzewo splay to samodopasowujące się drzewo wyszukiwania binarnego z dodatkowa właściwość, która umożliwia szybki dostęp do ostatnio otwieranych elementów. Wszystkie normalne operacje na drzewie wyszukiwania binarnego są połączone z jedną podstawową operacją zwaną splaying. Rozłożenie drzewa na określony element zmienia układ drzewa, tak aby element był umieszczony w korzeniu drzewa.
- Drzewo N-ary: W tym drzewie ograniczenie drzewa binarnego zostało usunięte. Tutaj węzeł może mieć najwyżej n dzieci. Podobnie jak drzewo binarne, może to być pełne, kompletne lub doskonałe drzewo n-arowe. N-ary jest czasem znany jako las.
- Trie Structure : W informatyce trie, zwane także cyfrowym drzewem, a czasem radix drzewo lub drzewo prefiksów (ponieważ można je wyszukiwać według przedrostków) to uporządkowana struktura danych drzewa, która jest używana do przechowywania zestawu dynamicznego lub tablicy asocjacyjnej, w której klucze są zwykle ciągami. Wszyscy potomkowie węzła mają wspólny prefiks ciągu powiązanego z tym węzłem, a korzeń jest powiązany z pustym ciągiem.
- Drzewo sufiksów : Trie i drzewo sufiksów są ze sobą ściśle powiązane. drzewo sufiksów (nazywane również drzewem PAT lub we wcześniejszej formie drzewem pozycji) jest skompresowaną próbą zawierającą wszystkie sufiksy danego tekstu jako ich klucze i pozycje w tekście jako ich wartości. Drzewa sufiksowe pozwalają na szczególnie szybką implementację wielu ważnych operacji na łańcuchach.
- Drzewo Huffmana: Drzewo Huffmana to drzewo binarne posortowane według częstotliwości, szeroko stosowane w kompresji dane. Drzewo Huffmana jest tak skonstruowane, aby przydzielać krótkie słowo kodowe do długiego tekstu na podstawie jego częstotliwości występowania.
- Struktura sterty [Edytuj zgodnie z sugestią ]: Struktura sterty to kolejna szeroko stosowana struktura drzewa z określoną właściwością porządkowania. Istnieją dwa rodzaje sterty – sterta minimalna i sterta maksymalna. W stosie minimalnym rodzic węzła musi być mniejszy niż wartości wszystkich jego dzieci. Podobnie w max heap rodzic zawsze ma większą wartość w porównaniu do wszystkich swoich dzieci. Jedną z powszechnych implementacji sterty jest sterta binarna, w której każdy rodzic może mieć co najwyżej dwoje dzieci.
Inna popularna struktura drzewa obejmuje, ale nie wyczerpująco, B -Drzewo, B + – drzewo, R-Drzewo, Drzewo liczone-B, Drzewo KD (lub K-wymiarowe BST), Drzewo decyzyjne (a wariant drzewa n-ary), drzewo Markela, drzewo Fenwicka (lub drzewo indeksu binarnego), Drzewo zakresów.
Odpowiedź
- Szablon jako kod poprzez utworzenie drzewa zależności.
Teraz poczekaj ze mną przez 5 minut, aby szczegółowo wyjaśnić, jak wykorzystaliśmy drzewo jako strukturę danych do rozwiązania naszego złożonego przypadku użycia.
Aby wyjaśnić scenariusz, weźmy mały przykład pobierania danych z interfejsu API poprzez uwierzytelnianie oparte na tokenach.
Więc jeśli chcesz osiągnąć ten wyczyn,
- najpierw uzyskujesz nazwę użytkownika, hasło i informacje o dzierżawie i wywołujesz interfejs API w celu pobrania tokenu.
- Następnie za pomocą pobranego tokenu wywołaj aktywny interfejs API, przekazując go w nagłówkach żądania.
To bardzo prosty scenariusz, ale sprawy stają się dość złożone, gdy trzeba wykonać łańcuch 10 interfejsów API, z których każde jest zależne od siebie.
W tym miejscu wymyśliliśmy podejście oparte na drzewie zależności.
Najpierw musimy utworzyć szablon taki jak ten
Teraz tworzymy drzewo zależności takie jak to
Wszystko zdefiniowane jako $ {} oznaczało, że jest zależne od danych wyjściowych innych zmiennych.
ResourceOps oznacza API do wykonania
W ten sposób tworzone jest drzewo zależności
- Oceniamy parametry, które są niezależne i dołącz je do katalogu głównego.
- Następnie przechodzimy do operacji na zasobach i rozumiemy, że zależy to od wartości dołączonych do węzła głównego. Odłączamy je więc od katalogu głównego, a następnie podłączamy do nowego węzła.
- To samo zostanie zrobione ze wszystkimi operacjami na zasobach i
Po utworzeniu drzewa zależności do węzła-liścia wykonaj go, a następnie przyjdź do rodzica z wynikiem wykonania węzła-liścia, a następnie jest on rodzicem i rodzicem, dopóki nie osiągniemy węzła najwyższego.
Gdy dotrzemy do węzła najwyższego, otrzymujemy wynik i wrócimy jako odpowiedź HTTP udana.
Jeśli wystąpi jakikolwiek błąd w wykonaniu, zwracamy odpowiedź błędu w czytelny sposób.
Nie sądzę, żebym to trochę wyjaśnił, ale chcę tylko podkreślić, w jaki sposób rozwiązaliśmy rzeczywisty problem z drzewiastą strukturą danych dla dynamicznych akcji wykonywanych bez pisania kodu przez programistę.