3 zaawansowane struktury danych, które powinien znać każdy programista
Przekonasz się, że używanie struktur danych jest dość powszechnym zjawiskiem wśród programistów, więc biegłość w posługiwaniu się podstawowymi strukturami danych, takimi jak drzewa binarne, stosy i kolejki, ma kluczowe znaczenie dla Twojego sukcesu. Ale jeśli chcesz poprawić swoje umiejętności i wyróżnić się z tłumu, będziesz chciał zapoznać się również z zaawansowanymi strukturami danych.
Zaawansowane struktury danych są niezbędnym elementem nauki o danych i pomagają uporządkować nieefektywne zarządzanie oraz zapewniają przechowywanie dużych zestawów danych. Inżynierowie oprogramowania i analitycy danych stale wykorzystują zaawansowane struktury danych do projektowania algorytmów i oprogramowania.
Czytaj dalej, ponieważ omawiamy zaawansowane struktury danych, o których powinien wiedzieć każdy doświadczony programista.
1. Kupa Fibonacciego
Jeśli poświęciłeś już trochę czasu na naukę struktur danych, musisz być zaznajomiony z binarnymi stertami. Kopce Fibonacciego są dość podobne i mają właściwości min-heap lub max-heap . Możesz myśleć o kopcu Fibonacciego jako o zbiorze drzew, w którym węzeł wartości minimalnej lub maksymalnej znajduje się zawsze w korzeniu.
Sterta spełnia również właściwość Fibonacciego, tak że węzeł n będzie miał co najmniej F (n + 2) węzłów. W kopcu Fibonacciego korzenie każdego węzła są ze sobą połączone, zwykle za pomocą okrągłej, podwójnie połączonej listy. Umożliwia to usunięcie węzła i połączenie dwóch list w czasie zaledwie O(1).
Kopce Fibonacciego są znacznie bardziej elastyczne niż kopce binarne i dwumianowe, dzięki czemu są przydatne w szerokim zakresie zastosowań. Są powszechnie używane jako kolejki priorytetowe w algorytmie Dijkstry, aby znacznie poprawić czas działania algorytmu.
2. Drzewo AVL
Drzewa AVL (Adelson-Velsky i Landis) są jednym z wielu różnych typów drzew w informatyce. Zasadniczo są to samobalansujące się drzewo wyszukiwania binarnego. Standardowe drzewa wyszukiwania binarnego mogą ulec przekrzywieniu w niektórych przypadkach skrajnych i mieć złożoność czasową w najgorszym przypadku O(n), co czyni je nieefektywnymi w rzeczywistych zastosowaniach. Samobalansujące się drzewa automatycznie zmieniają swoją strukturę, gdy narusza to właściwość balansowania.
W drzewie AVL każdy węzeł zawiera dodatkowy atrybut, który zawiera jego współczynnik równoważący. Współczynnik równowagi to wartość uzyskana przez odjęcie wysokości lewego poddrzewa od prawego poddrzewa w tym węźle. Właściwość samorównoważenia drzewa AVL wymaga, aby współczynnik równowagi zawsze wynosił -1, 0 lub 1.
Jeśli naruszona zostanie właściwość samorównoważenia (współczynnik równowagi), drzewo AVL obraca swoje węzły, aby zachować współczynnik równowagi. Drzewo AVL wykorzystuje cztery główne obroty — obrót w prawo, obrót w lewo, obrót w lewo-prawo i obrót w prawo-lewo.
Właściwość samobalansowania drzewa AVL poprawia jego złożoność czasową w najgorszym przypadku do zaledwie O (log n), co jest znacznie bardziej wydajne w porównaniu z wydajnością drzewa wyszukiwania binarnego.
Ponieważ drzewo AVL utrzymuje się dzięki współczynnikowi równowagi, można obliczyć minimalną liczbę węzłów, biorąc pod uwagę wysokość. Relacja powtarzalności sprowadza się do N(h) = N(h-1) + N(h-2) + 1 i muszą być co najmniej trzy węzły w drzewie AVL (n > 2). Przypadki bazowe relacji powtarzalności to odpowiednio N(0) = 1 i N(1) = 2.
3. Czerwono-czarne drzewo
Drzewo czerwono-czarne to kolejne samobalansujące się drzewo wyszukiwania binarnego, które wykorzystuje dodatkowy bit jako swoją właściwość samobalansującą. Bit jest zwykle określany jako czerwony lub czarny, stąd nazwa drzewa czerwono-czarnego.
Każdy węzeł w czerwono-czarnym jest albo czerwony, albo czarny, ale węzeł główny zawsze musi być czarny. Nie może być dwóch sąsiednich czerwonych węzłów, a wszystkie węzły liści muszą być czarne. Reguły te zachowują samobalansującą właściwość drzewa.
W przeciwieństwie do drzew Wyszukiwania Binarnego, drzewa Czerwono-Czarne mają wydajność w przybliżeniu O(log n), co czyni je znacznie bardziej wydajnymi. Jednak drzewa AVL są znacznie bardziej zrównoważone ze względu na ostateczną właściwość samorównoważenia.
Popraw swoje struktury danych
Znajomość zaawansowanych struktur danych może mieć duże znaczenie podczas rozmów kwalifikacyjnych i może być czynnikiem, który odróżnia Cię od konkurencji. Inne zaawansowane struktury danych, którym warto się przyjrzeć, to n-drzewa, wykresy i zbiory rozłączne.
Identyfikacja idealnej struktury danych dla danego scenariusza jest częścią tego, co sprawia, że dobry programista jest świetny.
Dodaj komentarz