logo

Naucz się struktur danych i algorytmów | Poradnik DSA

Struktury danych i algorytmy (DSA) odnoszą się do badania metod organizacji i przechowywania danych oraz projektowania procedur (algorytmów) rozwiązywania problemów, które działają na tych strukturach danych. DSA to jedna z najważniejszych umiejętności, którą musi posiadać każdy student informatyki. Często można zauważyć, że osoby posiadające dobrą wiedzę na temat tych technologii są lepszymi programistami niż inni i dlatego przechodzą wywiady z niemal każdym gigantem technologicznym. Ten Poradnik DSA ma na celu pomóc Ci szybko i łatwo nauczyć się struktur danych i algorytmów (DSA).



Spis treści

  • Naucz się algorytmów
  • Dowiedz się o złożonościach
  • Ćwicz ściągawki problemowe
  • Pełny formularz DSA

    Termin DSA oznacza Struktury danych i algorytmy , w kontekście informatyki.

    Co to jest DSA?

    Struktury danych i algorytmy (DSA) odnoszą się do badania metod organizacji i przechowywania danych oraz projektowania procedur (algorytmów) rozwiązywania problemów, które działają na tych strukturach danych.



    Jak nauczyć się DSA?

    Pierwszą i najważniejszą rzeczą jest podzielenie całej procedury na małe części, które należy wykonać sekwencyjnie. Cały proces nauki DSA od podstaw można podzielić na 5 części:

    1. Naucz się przynajmniej jednego języka programowania (zostawiamy to Twojemu wyborowi).
    2. Poznaj struktury danych
    3. Naucz się algorytmów
    4. Dowiedz się o złożoności czasu i przestrzeni
    5. Ćwicz problemy dotyczące DSA
    Jak nauczyć się DSA?

    Jak nauczyć się DSA?

    Mamy nadzieję, że nauczyłeś się wybranego języka programowania, przejdźmy do następnego kroku, aby nauczyć się DSA w tym samouczku DSA.



    Nadchodzi najważniejszy i najbardziej oczekiwany etap planu uczenia się struktury danych i algorytmu – etap, w którym rozpoczynasz naukę o DSA. Tematyka DSA składa się z dwóch części:

    • Struktury danych
    • Algorytmy

    Chociaż są to dwie różne rzeczy, są ze sobą ściśle powiązane i bardzo ważne jest, aby podążać właściwą drogą, aby nauczyć się ich najskuteczniej. Jeśli nie wiesz, którego uczyć się najpierw, zalecamy zapoznanie się z naszą szczegółową analizą na ten temat: Tutaj prześledziliśmy proces uczenia się struktury danych, a następnie najbardziej powiązane i najważniejsze algorytmy wykorzystywane przez tę strukturę danych.

    Poznaj struktury danych

    Struktury danych to podstawowe komponenty, które pomagają organizować i efektywnie przechowywać dane w pamięci komputera. Umożliwiają efektywne zarządzanie danymi i manipulowanie nimi, umożliwiając szybszy dostęp, operacje wstawiania i usuwania. Typowe struktury danych obejmują tablice, listy połączone, stosy, kolejki, drzewa i wykresy , z których każdy służy konkretnym celom w oparciu o wymagania danego problemu. Zrozumienie struktur danych ma fundamentalne znaczenie dla projektowania wydajnych algorytmów i optymalizacji wydajności oprogramowania.

    Szyk to liniowa struktura danych przechowująca zbiór elementów tego samego typu danych. Elementom przydzielana jest ciągła pamięć, co pozwala na stały dostęp. Każdy element ma unikalny numer indeksu.

    • Operacje na tablicy:
      • Przejście : Iteracja po elementach tablicy.
      • Wprowadzenie : Dodanie elementu do tablicy o określonym indeksie.
      • Usunięcie : Usuwanie elementu z tablicy o określonym indeksie.
      • Badawczy : Znajdowanie elementu w tablicy według jego wartości lub indeksu.
    • Rodzaje tablic :
      • Tablica jednowymiarowa : Prosta tablica z jednym wymiarem.
      • Tablica wielowymiarowa : Tablica o wielu wymiarach, taka jak macierz.
    • Zastosowania tablicy :
      • Przechowywanie danych w sposób sekwencyjny
      • Implementowanie kolejek, stosów i innych struktur danych
      • Reprezentowanie macierzy i tabel
    • Powiązane tematy dotyczące tablicy:
      • Samouczek dotyczący tablic
      • 50 najważniejszych problemów z kodowaniem tablicowym podczas rozmów kwalifikacyjnych
      • Ćwicz problemy na tablicach

    2. Sznurek

    A strunowy to ciąg znaków, zwykle używany do reprezentowania tekstu. Uważa się, że jest to typ danych umożliwiający manipulację i przetwarzanie danych tekstowych w programach komputerowych.

    • Operacje na ciągach :
      • Powiązanie : Łączenie dwóch ciągów znaków.
      • Porównanie : Porównywanie leksykograficzne dwóch ciągów znaków.
      • Podciąg ekstrakcja : Wyodrębnianie podciągu z ciągu.
      • Szukaj : Wyszukiwanie podciągu w ciągu.
      • Modyfikacja : Zmiana lub zamiana znaków w ciągu.
    • Zastosowania ciągu :
      • Przetwarzanie tekstu
      • Dopasowanie wzoru
      • Walidacji danych
      • Zarządzania bazami danych
    • Powiązane posty:
      • Poradnik dotyczący sznurków
      • 50 najważniejszych problemów z kodowaniem ciągów podczas rozmów kwalifikacyjnych
      • Ćwicz problemy na sznurku

    3. Połączone listy

    A połączona lista to liniowa struktura danych, która przechowuje dane w węzłach połączonych wskaźnikami. W przeciwieństwie do tablic, listy połączone nie są przechowywane w sąsiadujących lokalizacjach pamięci.

    • Charakterystyka listy połączonej:
      • Dynamiczny : Rozmiar list połączonych można łatwo zmieniać, dodając lub usuwając węzły.
      • Nieciągłe : Węzły są przechowywane w losowych lokalizacjach pamięci i połączone wskaźnikami.
      • Dostęp sekwencyjny : Dostęp do węzłów można uzyskać tylko sekwencyjnie, zaczynając od początku listy.
    • Operacje na liście połączonej:
      • kreacja : Tworzenie nowej połączonej listy lub dodanie nowego węzła do istniejącej listy.
      • Przejście : Iteracja po liście i uzyskiwanie dostępu do każdego węzła.
      • Wprowadzenie : Dodanie nowego węzła w określonej pozycji na liście.
      • Usunięcie : Usuwanie węzła z listy.
      • Szukaj : Znalezienie węzła o określonej wartości na liście.
    • Rodzaje list połączonych :
      • Lista pojedynczo połączona : Każdy węzeł wskazuje następny węzeł na liście.
      • Lista podwójnie połączona : Każdy węzeł wskazuje zarówno następny, jak i poprzedni węzeł na liście.
      • Okrągła lista połączona : Ostatni węzeł wskazuje z powrotem na pierwszy węzeł, tworząc okrągłą pętlę.
    • Zastosowania listy połączonej :
      • Listy połączone są używane w różnych aplikacjach, w tym:
      • Implementacja kolejek i stosów
      • Reprezentowanie wykresów i drzew
      • Utrzymanie uporządkowanych danych
      • Zarządzanie pamięcią
    • Powiązane tematy:
      • Samouczek dotyczący listy połączonych
      • 50 najważniejszych problemów na połączonej liście do rozmów kwalifikacyjnych
      • Ćwicz problemy dotyczące list połączonych

    4. Matryca/Siatka

    A matryca to dwuwymiarowa tablica elementów ułożonych w wierszach i kolumnach. Jest reprezentowany jako prostokątna siatka, w której każdy element znajduje się na przecięciu wiersza i kolumny.

    • Kluczowe idee:
      • Wydziwianie : Poziome linie elementów macierzy.
      • Kolumny : Pionowe linie elementów macierzy.
      • Wymiary : Liczba wierszy i kolumn w macierzy (np. macierz 3×4 ma 3 wiersze i 4 kolumny).
      • Element Dostęp : Dostęp do elementów można uzyskać za pomocą indeksów wierszy i kolumn (np. M[2][3] odnosi się do elementu w wierszu 2 i kolumnie 3).
    • Zastosowania macierzy/siatki :
      • Przetwarzanie obrazu
      • Analiza danych
      • Problemy z optymalizacją
    • Powiązane posty:
      • Poradnik dotyczący macierzy/siatki
      • 50 najważniejszych problemów w matrycy/siatce podczas rozmów kwalifikacyjnych
      • Ćwicz problemy na macierzy/siatce

    5. Stos

    Stos to liniowa struktura danych, która charakteryzuje się określoną kolejnością wykonywania operacji. Kolejność może być LIFO (ostatni na wejściu, pierwszy na wyjściu) Lub FILO (pierwsze weszło, ostatnie wyszło) . LIFO oznacza, że ​​element wstawiany jako ostatni wychodzi jako pierwszy i WIERSZ oznacza, że ​​element wstawiany jako pierwszy wychodzi jako ostatni.

    • Operacja na stosie :
      • Naciskać : Dodaje element na górę stosu
      • Muzyka pop : Usuwa i zwraca element na górze stosu
      • Zerkać : Zwraca element na szczycie stosu bez jego usuwania
      • Rozmiar : Zwraca liczbę elementów na stosie
      • Jest pusty : Sprawdza, czy stos jest pusty
    • Zastosowania stosu :
      • Wywołania funkcji
      • Ocena wyrażeń
      • Cofanie się
      • Operacje cofania/ponawiania
    • Powiązane tematy na stosie:
      • Samouczek dotyczący stosu
      • 50 najważniejszych problemów na stosie podczas rozmów kwalifikacyjnych
      • Ćwicz problemy na stosie

    6. Kolejka

    A Kolejka Struktura danych to podstawowe pojęcie w informatyce wykorzystywane do przechowywania danych i zarządzania nimi w określonej kolejności. Kieruje się zasadą Pierwsi weszli, pierwsi wyszli ( FIFO ), gdzie pierwszy element dodany do kolejki jest pierwszym, który zostanie usunięty

    • Operacja w kolejce :
      • Kolejkuj : Dodaje element na końcu kolejki
      • Odpowiednio : Usuwa element z przodu kolejki
      • Zerkać : pobiera przedni element bez jego usuwania
      • Jest pusty : Sprawdza, czy kolejka jest pusta
      • Jest pełna : Sprawdza, czy kolejka jest pełna
    • Typ kolejki :
      • Okrągła kolejka : Ostatni element łączy się z pierwszym elementem
      • Kolejka dwustronna (Deque) : Operacje można wykonywać z obu końców
      • Kolejka priorytetowa : Elementy są rozmieszczone według priorytetu
    • Zastosowania kolejki :
      • Planowanie pracy
      • Kolejkowanie wiadomości
      • Modelowanie symulacyjne
      • Buforowanie danych
    • Powiązane tematy:
      • Poradnik dotyczący kolejki
      • 50 najważniejszych problemów w kolejce na rozmowy kwalifikacyjne
      • Ćwicz problemy w kolejce

    7. Sterta

    A Sterta jest kompletną binarną strukturą danych drzewa, która spełnia właściwość sterty: dla każdego węzła wartość jego dzieci jest mniejsza lub równa jego własnej wartości. Do implementacji zwykle używa się stert kolejki priorytetowe , gdzie najmniejszy (lub największy) element zawsze znajduje się w korzeniu drzewa.

    • Operacje na stercie :
      • Wstawić : Dodaje nowy element do sterty, zachowując właściwości sterty.
      • Ekstrakt-Maks./Wyciąg-Min : Usuwa element główny i restrukturyzuje stertę.
      • Klawisz zwiększania/zmniejszania : Aktualizuje wartość węzła i restrukturyzuje stertę.
    • Rodzaje sterty :
      • Maksymalny stos : Węzeł główny ma maksymalną wartość wśród swoich dzieci.
      • Min-Sterta : Węzeł główny ma minimalną wartość wśród swoich dzieci.
    • Zastosowania sterty :
      • Kolejki priorytetowe
      • Sortowanie
      • Algorytmy grafowe (np. algorytm Dijkstry)
    • Powiązane posty:
      • Samouczek dotyczący sterty
      • 50 najważniejszych problemów na stosie podczas rozmów kwalifikacyjnych
      • Ćwicz problemy na stercie

    8. Haszysz

    Haszowanie to technika, która generuje wynik o stałym rozmiarze (wartość skrótu) z danych wejściowych o zmiennym rozmiarze za pomocą wzorów matematycznych zwanych funkcje skrótu . Haszowanie służy do określenia indeksu lub lokalizacji przechowywania elementu w strukturze danych, co pozwala na wydajne pobieranie i wstawianie.

    • Kluczowe idee:
      • Funkcja skrótu : Funkcja matematyczna, która odwzorowuje dane wejściowe na wartość skrótu.
      • Tabela mieszająca : Struktura danych przechowująca pary klucz-wartość, gdzie klucz jest wartością skrótu, a wartością są rzeczywiste dane.
      • Kolizja : Gdy dwa różne klucze dają tę samą wartość skrótu.
    • Rodzaje funkcji skrótu :
      • Metoda podziału : Dzieli dane wejściowe przez stałą, a resztę wykorzystuje jako wartość skrótu.
      • Plac Środkowy Metoda: Podnosi dane wejściowe do kwadratu i przyjmuje środkowe cyfry jako wartość skrótu.
      • Metoda składania : Dzieli dane wejściowe na bloki o równej wielkości i dodaje je do siebie, aby uzyskać wartość skrótu.
      • Metoda mnożenia : Mnoży dane wejściowe przez stałą i przyjmuje część ułamkową jako wartość skrótu.
    • Techniki rozwiązywania kolizji :
      • Oddzielne łańcuchy (otwarte mieszanie) : Przechowuje kolidujące elementy na połączonej liście z odpowiednią wartością skrótu.
      • Otwarte adresowanie (zamknięte haszowanie) : Używa różnych strategii, aby znaleźć alternatywną lokalizację kolidujących elementów w tabeli skrótów.
    • Zastosowania haszowania :
      • Efektywne przechowywanie i odzyskiwanie danych w bazach danych i systemach plików.
      • Weryfikacja haseł i podpisów cyfrowych.
      • Dystrybucja żądań na wiele serwerów.
      • Generowanie bezpiecznych skrótów dla integralności danych i uwierzytelniania.
    • Powiązane posty:
      • Poradnik dotyczący hasha
      • Ćwicz problemy dotyczące haszowania

    9. Drzewo

    A drzewo to nieliniowa hierarchiczna struktura danych składająca się z węzłów połączonych krawędziami, z górnym węzłem zwanym korzeniem i węzłami posiadającymi węzły podrzędne. Jest stosowany w informatyce do efektywnego organizowania danych.

    zaczyna się od Javy
    • Przejście przez drzewo : Metody przechodzenia przez drzewo służą do odwiedzania i przetwarzania węzłów w drzewiastej strukturze danych. Trzy popularne metody przechodzenia to:
      • W celu : Odwiedź lewe poddrzewo, bieżący węzeł, a następnie prawe poddrzewo.
      • Przed Sprzedaż : Odwiedź bieżący węzeł, lewe poddrzewo, a następnie prawe poddrzewo.
      • Po zamówieniu : Odwiedź lewe poddrzewo, prawe poddrzewo, a następnie bieżący węzeł.
    • Klasyfikacje drzew:
      • Klasyfikacje Drzewa odnoszą się do grupowania drzew w oparciu o pewne cechy lub kryteria. Może to obejmować kategoryzację drzew na podstawie ich współczynnika równowagi, stopnia węzłów, właściwości porządkowych itp. Poniżej znajduje się kilka ważnych klasyfikacji drzew.
    Klasyfikacja Opis

    Typ

    Opis

    Według stopnia

    Drzewa można klasyfikować na podstawie maksymalnej liczby dzieci, jakie może mieć każdy węzeł.

    Drzewo binarne

    Każdy węzeł ma co najwyżej dwójkę dzieci.

    Drzewo trójskładnikowe

    Każdy węzeł ma co najwyżej troje dzieci.

    Drzewo N-ary

    Każdy węzeł ma co najwyżej N dzieci.

    Zamawiając

    Drzewa można klasyfikować na podstawie kolejności węzłów i poddrzew

    Drzewo wyszukiwania binarnego (BST)

    Lewe dziecko

    Sterta

    Specjalistyczne drzewo binarne z właściwością sterty.

    Według równowagi

    Drzewa można klasyfikować na podstawie tego, jak dobrze są zrównoważone.

    Zrównoważone drzewo

    Wysokości poddrzew różnią się co najwyżej o jeden. Przykładami są drzewa AVL i drzewa czerwono-czarne.

    Niezrównoważone drzewo

    Wysokości poddrzew mogą się znacznie różnić, co wpływa na wydajność operacji takich jak wyszukiwanie i wstawianie.

    • Zastosowania drzew:
      • Systemy plików
      • Bazy danych
      • Dokumenty XML
      • Sztuczna inteligencja
    • Powiązane posty:
      • Poradnik dotyczący drzewa
      • 50 najważniejszych problemów z kodowaniem drzew
      • Ćwicz problemy na drzewie

    10. Wykres

    A Wykres to nieliniowa struktura danych składająca się ze skończonego zestawu wierzchołków (lub węzłów) i zestawu krawędzi łączących parę węzłów.

    Naucz się algorytmów

    Po wyjaśnieniu pojęć Struktury danych , teraz czas rozpocząć podróż przez Algorytmy . W zależności od rodzaju natury i zastosowania algorytmy są pogrupowane w kilka kategorii, jak pokazano poniżej:

    1. Algorytm wyszukiwania

    Algorytmy wyszukiwania służą do lokalizowania określonych danych w większym zestawie danych. Pomaga znaleźć w danych obecność wartości docelowej. Istnieją różne typy algorytmów wyszukiwania, każdy z własnym podejściem i wydajnością.

    • Najpopularniejsze algorytmy wyszukiwania:
      • Wyszukiwanie liniowe : Przeszukiwanie iteracyjne od jednego końca do drugiego.
      • Wyszukiwanie binarne : Wyszukiwanie typu „dziel i zwyciężaj” w posortowanej tablicy, zmniejszając o połowę przestrzeń poszukiwań przy każdej iteracji.
      • Wyszukiwanie trójskładnikowe : Przeszukiwanie typu „dziel i zwyciężaj” w posortowanej tablicy, dzieląc przestrzeń poszukiwań na trzy części w każdej iteracji.
    • Inne algorytmy wyszukiwania:
      • Przeskocz wyszukiwanie
      • Wyszukiwanie interpolacyjne
      • Wyszukiwanie wykładnicze
    • Powiązane tematy:
      • Ćwicz problemy dotyczące algorytmu wyszukiwania

    2. Algorytm sortowania

    Algorytmy sortowania służą do porządkowania elementów listy w określonej kolejności, np. numerycznej lub alfabetycznej. Porządkuje elementy w sposób systematyczny, ułatwiając wyszukiwanie i dostęp do poszczególnych elementów.

    Istnieje wiele różnych typów algorytmów sortowania. Niektóre powszechnie stosowane algorytmy to:

    Algorytm sortowania Opis
    Sortowanie bąbelkowe Iteracyjnie porównuje sąsiednie elementy i zamienia je, jeśli są niesprawne. Przy każdym przejściu największy element przesuwa się na koniec listy.
    Sortowanie przez wybór Znajduje minimalny element w nieposortowanej części listy i zamienia go z pierwszym elementem. Powtarza ten proces, aż cała lista zostanie posortowana.
    Sortowanie przez wstawianie Tworzy posortowaną listę po jednym elemencie na raz, wstawiając każdy nieposortowany element na właściwe miejsce w posortowanej części.
    Szybkie sortowanie Algorytm dziel i zwyciężaj, który wybiera element przestawny, dzieli listę na dwie podlisty na podstawie przestawnej i rekurencyjnie stosuje ten sam proces do podlist.
    Sortowanie przez scalanie Inny algorytm dziel i zwyciężaj, który rekurencyjnie dzieli listę na mniejsze podlisty, sortuje je, a następnie łączy z powrotem w celu uzyskania posortowanej listy.

    Powiązane tematy:

    • Samouczek algorytmu sortowania
    • Najczęściej sortowane pytania i problemy podczas rozmowy kwalifikacyjnej
    • Przećwicz zadania dotyczące algorytmu sortowania

    3. Algorytm dziel i zwyciężaj

    Dziel i rządź algorytmy stosują rekurencyjną strategię rozwiązywania problemów, dzieląc je na mniejsze podproblemy, rozwiązując te podproblemy i łącząc rozwiązania w celu uzyskania rozwiązania końcowego.

    Kroki:

    1. Dzielić : Podziel problem na mniejsze, niezależne podproblemy.
    2. Podbić : Rekurencyjnie rozwiązuj każdy podproblem.
    3. Łączyć : Połącz rozwiązania podproblemów, aby uzyskać rozwiązanie końcowe.

    Przykłady:

    • Sortowanie przez scalanie: Dzieli tablicę na dwie połowy, sortuje każdą połowę rekurencyjnie i łączy posortowane połówki.
    • Szybkie sortowanie: wybiera element przestawny, dzieli tablicę na dwie podtablice w oparciu o przestawną i rekursywnie sortuje każdą podtablicę.
    • Wyszukiwanie binarne: Dzieli przestrzeń poszukiwań na pół, aż do znalezienia elementu docelowego lub wyczerpania przestrzeni poszukiwań.

    Powiązane artykuły:

    • Poradnik Dziel i rządź
    • Ćwicz problemy z algorytmem „Dziel i zwyciężaj”.

    4. Chciwe algorytmy

    Jak sama nazwa wskazuje, algorytm ten buduje rozwiązanie po kawałku i wybiera następny element, który daje najbardziej oczywistą i natychmiastową korzyść, tj. który jest najbardziej optymalnym wyborem w tym momencie. Zatem problemy, w których wybór lokalnie optymalnych rozwiązań prowadzi również do rozwiązań globalnych, najlepiej pasują do Greedy.

    Oto kilka ważnych problemów zachłannych algorytmów:

    Algorytm Opis
    Ułamkowy plecak Znajdź maksymalną całkowitą wartość przedmiotów, które można umieścić w plecaku, umożliwiając ułamkowe włączenie przedmiotów.
    Algorytm Dijkstry Znajduje najkrótszą ścieżkę od wierzchołka źródłowego do wszystkich pozostałych wierzchołków grafu ważonego.
    Algorytm Kruskala Znajduje minimalne drzewo rozpinające grafu ważonego.
    Kodowanie Huffmana Tworzy optymalny kod prefiksu dla zestawu symboli, minimalizując całkowitą długość kodowania.

    Powiązane artykuły:

    • Poradnik dotyczący algorytmu zachłannego
    • Ćwicz problemy z algorytmem Greedy'ego

    5. Rekurencja

    Rekurencja to technika programowania, w której funkcja wywołuje samą siebie w ramach swojej własnej definicji. Zwykle stosuje się go do rozwiązywania problemów, które można podzielić na mniejsze wystąpienia tego samego problemu. Na przykład: Wieże Hanoi (TOH) , Obliczenia czynnikowe I Ciąg Fibonacciego itp.

    10 z 40

    Kroki :

    • Obudowa podstawowa : Zdefiniuj warunek, który zatrzymuje wywołania rekurencyjne i zapewnia rozwiązanie.
    • Przypadek rekurencyjny : Zdefiniuj kroki, aby podzielić problem na mniejsze instancje i wykonać wywołania rekurencyjne.
    • Powrót : Zwróć rozwiązanie z wywołań rekurencyjnych i połącz je, aby rozwiązać pierwotny problem.

    Cechą, która sprawia, że ​​rekurencja jest jednym z najczęściej używanych algorytmów, jest to, że stanowi ona podstawę dla wielu innych algorytmów, takich jak Przejścia przez drzewa , Przejścia wykresu , Algorytmy dziel i zwyciężaj I Algorytmy cofania .

    Powiązane tematy:

    • Poradnik dotyczący rekurencji
    • Funkcje rekurencyjne
    • Rekurencja ogona
    • 50 najważniejszych problemów związanych z algorytmem rekurencji w rozmowie kwalifikacyjnej
    • Ćwicz problemy dotyczące algorytmu rekurencji

    6. Algorytm cofania

    Jak wspomniano wcześniej, Cofanie się algorytm wywodzi się z algorytmu rekurencji, z możliwością przywrócenia, jeśli rozwiązanie rekurencyjne zawiedzie, tj. w przypadku niepowodzenia rozwiązania program śledzi moment, w którym zawiodło i buduje na innym rozwiązaniu. Zasadniczo wypróbowuje wszystkie możliwe rozwiązania i znajduje właściwe.

    Niektóre ważne i najczęstsze problemy algorytmów cofania, które należy rozwiązać przed kontynuowaniem, to:

    Problem Opis
    Problem z trasą Knighta Znalezienie takiej sekwencji ruchów skoczka na szachownicy, aby odwiedzał on każde pole dokładnie raz.
    Szczur w labiryncie Znalezienie ścieżki od pozycji początkowej do wyjścia w labiryncie, z przeszkodami przedstawionymi jako ściany.
    Problem N-Królowej Umieszczenie N hetmanów na szachownicy N×N tak, aby żadne dwa hetmany nie atakowały się nawzajem.
    Problem z sumą podzbiorów Ustalenie, czy istnieje podzbiór danego zbioru o danej sumie.
    Sudoku Rozwiązywanie łamigłówki o wymiarach 9×9 z liczbami od 1 do 9 w taki sposób, że każdy wiersz, kolumna i podsiatka 3×3 zawierają wszystkie cyfry bez powtórzeń.

    Powiązany artykuł:

    • Poradnik cofania się
    • Ćwicz problemy dotyczące algorytmu wycofywania się

    7. Programowanie dynamiczne

    Programowanie dynamiczne to metoda stosowana w matematyce i informatyce do rozwiązywania złożonych problemów poprzez rozbicie ich na prostsze podproblemy. Rozwiązując każdy podproblem tylko raz i przechowując wyniki, pozwala uniknąć zbędnych obliczeń, co prowadzi do bardziej wydajnych rozwiązań szerokiego zakresu problemów.

    Kluczowe idee:

    • Optymalna podbudowa : Optymalne rozwiązanie problemu można zbudować z optymalnych rozwiązań jego podproblemów.
    • Nakładające się podproblemy : Podproblemy często powtarzają się w większym problemie, co prowadzi do zbędnych obliczeń.
    • Zapamiętywanie / Tabulacja : Przechowywanie rozwiązań podproblemów w celu uniknięcia ponownego obliczania.

    Niektóre ważne i najczęstsze problemy algorytmów programowania dynamicznego, które należy rozwiązać przed kontynuowaniem, to:

    Problem Opis
    Ciąg Fibonacciego Generowanie liczb Fibonacciego przy użyciu programowania dynamicznego w celu uniknięcia zbędnych obliczeń.
    Najdłuższy wspólny podciąg Znalezienie najdłuższego podciągu wspólnego dla dwóch ciągów.
    Najdłuższy podciąg rosnący Znalezienie najdłuższego podciągu zadanego ciągu, w którym elementy są posortowane w kolejności rosnącej.
    0/1 Problem z plecakiem Określenie maksymalnej wartości, jaką można uzyskać wybierając przedmioty o zadanych masach i wartościach, nie przekraczając jednak określonego limitu wagowego.
    Problem z wycinaniem prętów Maksymalizacja zysku poprzez pocięcie pręta o określonej długości na kawałki i sprzedaż po zadanych cenach.
    Problem ze zmianą monety Wyznaczanie liczby sposobów wydania reszty na daną kwotę przy zadanym zestawie nominałów monet.
    Edytuj odległość Znalezienie minimalnej liczby operacji (wstawienie, usunięcie, podstawienie) wymaganych do zamiany jednego ciągu na inny.
    Problem z sumą podzbiorów Ustalanie, czy istnieje podzbiór danego zbioru o danej sumie.
    Najdłuższy podciąg palindromiczny Znalezienie najdłuższego podciągu danego ciągu czyli palindromu.
    Maksymalna suma podtablicy Znajdowanie ciągłej podtablicy z największą sumą w danej tablicy jednowymiarowej.
    Podziel równą sumę podzbioru Określenie, czy można podzielić dany zbiór na dwa podzbiory o jednakowej sumie.
    Ścieżka minimalnych kosztów Znalezienie ścieżki minimalnego kosztu od lewego górnego rogu do prawego dolnego rogu danej siatki.
    Maksymalna podtablica produktu Znajdowanie ciągłej podtablicy z największym iloczynem w danej jednowymiarowej tablicy.

    Powiązane artykuły:

    • Tabulacja a zapamiętywanie
    • Jak rozwiązać problem programowania dynamicznego?
    • Samouczek programowania dynamicznego
    • 50 najważniejszych problemów z kodowaniem w programowaniu dynamicznym podczas rozmów kwalifikacyjnych
    • Ćwicz problemy dotyczące algorytmu programowania dynamicznego

    8. Algorytmy grafowe :

    Algorytmy grafowe w strukturach danych i algorytmach (DSA) to zbiór technik i metod stosowanych do rozwiązywania problemów związanych z grafami, które są zbiorem węzłów i krawędzi. Algorytmy te służą do wykonywania różnych operacji na wykresach, np szukanie, przemierzanie, znajdowanie najkrótszej ścieżki i ustalanie łączność . Są niezbędne do rozwiązywania szerokiego zakresu problemów świata rzeczywistego, w tym routingu sieciowego, analizy sieci społecznościowych i alokacji zasobów.

    Temat

    Opis tematu

    Algorytm Opis algorytmu
    Przechodzenie wykresu

    Techniki odwiedzania wszystkich wierzchołków grafu.

    Wyszukiwanie w głąb (DFS) Bada możliwie najdalej każdą gałąź przed cofnięciem się.
    Wyszukiwanie wszerz (BFS) Eksploruje sąsiednie wierzchołki przed przejściem do następnego poziomu wierzchołków.

    Minimalne drzewa rozpinające

    Minimalne drzewa rozpinające to najmniejsze drzewa, które łączą wszystkie węzły grafu bez tworzenia cykli, co można osiągnąć poprzez dodanie możliwie najkrótszych krawędzi.

    Algorytm Kruskala

    Znajduje minimalne drzewo rozpinające dla połączonego grafu ważonego. Dodaje najmniejszą krawędź ciężaru, która nie tworzy cyklu.

    Algorytm Prima

    Znajduje również minimalne drzewo rozpinające dla połączonego grafu ważonego. Dodaje najmniejszą krawędź ciężaru, która łączy dwa drzewa.

    Sortowanie topologiczne

    Sortowanie topologiczne to liniowe uporządkowanie wierzchołków na skierowanym grafie acyklicznym (DAG) w taki sposób, że dla każdej skierowanej krawędzi od wierzchołka u do wierzchołka v u występuje w kolejności przed v.

    Algorytm Kahna Algorytm Kahna znajduje topologiczny porządek skierowanego grafu acyklicznego (DAG).
    Algorytm oparty na DFS Algorytm oparty na systemie DFS wykorzystuje przeszukiwanie w oparciu o głębokość w celu przeprowadzenia sortowania topologicznego na skierowanym grafie acyklicznym (DAG).

    Najkrótsza droga

    Najkrótsza ścieżka w grafie to droga między dwoma wierzchołkami grafu, która ma minimalną sumę wag na krawędziach w porównaniu do wszystkich innych ścieżek między tymi samymi dwoma wierzchołkami.

    Algorytm Dijkstry

    Algorytm zachłanny do znalezienia najkrótszej ścieżki pomiędzy wszystkimi węzłami w czasie O(E * V logV).

    Algorytm Floyda-Warshalla

    Znajduje najkrótszą ścieżkę pomiędzy wszystkimi parami węzłów w czasie O(V^3).

    Algorytm Bellmana Forda

    Znajduje najkrótszą ścieżkę z jednego źródła w czasie O(V * E).

    Algorytm Johnsona

    Znajduje najkrótsze ścieżki pomiędzy wszystkimi parami wierzchołków w czasie O(V^2 logV + V * E).

    Silnie połączone komponenty

    Składowa silnie spójna (SCC) grafu skierowanego to maksymalny zbiór wierzchołków taki, że istnieje ścieżka z każdego wierzchołka w zestawie do każdego innego wierzchołka w zestawie.

    Algorytm Kosaraju

    Algorytm Kosaraju to algorytm dwuprzebiegowy, który skutecznie znajduje silnie połączone składowe (SCC) grafu skierowanego.

    Algorytm Tarjana

    Algorytm Tarjana to kolejny skuteczny algorytm znajdowania SCC na grafie skierowanym

    Powiązane tematy:

    • Poradnik dotyczący wykresów
    • 50 najważniejszych problemów z kodowaniem wykresów podczas wywiadów
    • Ćwicz problem dotyczący algorytmów grafowych

    9 . Wyszukiwanie wzorców

    Wyszukiwanie wzorców to podstawowa technika w DSA używana do wyszukiwania wystąpień określonego wzorca w danym tekście.

    Poniżej znajduje się kilka standardowych algorytmów wyszukiwania wzorców:

    Algorytm Opis Złożoność czasu
    Brutalna siła Porównuje wzór z każdym podciągiem tekstu O(mn)
    Knutha-Morrisa-Pratta Wykorzystuje wstępnie obliczoną funkcję awarii, aby pominąć niepotrzebne porównania O(m + n)
    Boyera-Moore'a Porównuje wzór od prawej do lewej, pomijając znaki w oparciu o ostatnią niezgodność O(mn)
    Rabina-Karpa Używa funkcji mieszania, aby szybko sprawdzić potencjalne dopasowania O(m + n)

    Powiązane tematy:

    • Samouczek wyszukiwania wzorców
    • Ćwicz zadanie na Wyszukiwanie wzorców

    10 . Algorytmy matematyczne

    Algorytmy matematyczne to klasa algorytmów rozwiązujących problemy związane z pojęciami matematycznymi. Są szeroko stosowane w różnych dziedzinach, w tym w grafice komputerowej, analizie numerycznej, optymalizacji i kryptografii.

    Algorytm Opis
    GCD I LCM Znajdź największy wspólny dzielnik i najmniejszą wspólną wielokrotność dwóch liczb.
    Faktoryzacja pierwsza Rozłóż liczbę na czynniki pierwsze.
    Liczby Fibonacciego Wygeneruj ciąg Fibonacciego, w którym każda liczba jest sumą dwóch poprzednich.
    Liczby katalońskie Policz liczbę prawidłowych wyrażeń z podaną liczbą par nawiasów.
    Arytmetyka modułowa Wykonuj działania arytmetyczne na liczbach modulo o zadanej wartości.
    Funkcja totientu Eulera Policz liczbę dodatnich liczb całkowitych mniejszych od danej liczby, które są względem niej względnie pierwsze.
    Obliczenia nCr Oblicz współczynnik dwumianu, który reprezentuje liczbę sposobów wyboru r elementów ze zbioru n elementów.
    Liczby pierwsze i testy pierwszości Ustal, czy dana liczba jest pierwsza i sprawnie znajduj liczby pierwsze.
    Algorytmy sitowe Znajdź wszystkie liczby pierwsze aż do podanej granicy.

    Powiązane tematy:

    • Ćwicz problem dotyczący algorytmu matematycznego

    11. Algorytmy geometryczne

    Algorytmy geometryczne to klasa algorytmów rozwiązujących problemy związane z geometrią. Algorytmy geometryczne są niezbędne do rozwiązywania szerokiego zakresu problemów w informatyce, takich jak:

    Algorytm Opis
    Wypukły kadłub Znajduje najmniejszy wielokąt wypukły zawierający zbiór punktów.
    Najbliższa para punktów Znajduje dwa punkty w zbiorze, które są najbliżej siebie.
    Przecięcie linii Określa, czy dwie linie przecinają się, a jeśli tak, znajduje punkt przecięcia.
    Punkt w wielokącie Określa, czy dany punkt znajduje się wewnątrz, czy na zewnątrz wielokąta.

    Powiązane tematy:

    • Ćwicz zadanie dotyczące algorytmów geometrycznych

    12. Algorytmy bitowe

    Algorytmy bitowe to algorytmy działające na pojedynczych bitach liczb. Algorytmy te manipulują binarną reprezentacją liczb w celu wykonywania takich zadań, jak manipulowanie bitami, bitowe operacje logiczne (AND, OR, XOR), przesuwanie bitów , I ustawienie Lub czyszczenie określonych bitów w ramach liczby. Algorytmy bitowe są powszechnie stosowane w Zadania związane z programowaniem niskiego poziomu, kryptografią i optymalizacją gdzie wymagana jest wydajna manipulacja pojedynczymi bitami.

    Temat Opis
    Przesuwanie bitów Przesuwa bity w lewo lub w prawo o określoną liczbę pozycji.
    Przesunięcie w lewo (<<) Przesuwa bity w lewo, skutecznie mnożąc liczbę przez 2.
    Przesunięcie w prawo (>>) Przesuwa bity w prawo, skutecznie dzieląc liczbę przez 2.
    Wyodrębnij bity Używanie masek do wyodrębniania określonych bitów z liczby całkowitej.
    Ustawianie bitów Używanie masek do ustawiania określonych bitów na 1 w liczbie całkowitej.
    Czyszczenie bitów Używanie masek do ustawiania określonych bitów na 0 w liczbie całkowitej.
    Przełączanie bitów Używanie XOR (^) do przełączania określonych bitów w liczbie całkowitej.
    Liczenie Ustawia bity Zliczanie liczby ustawionych bitów (1s) w liczbie całkowitej.

    Powiązane tematy:

    • Samouczek algorytmów bitowych
    • Ćwicz zadanie dotyczące algorytmów bitowych

    13. Algorytmy losowe

    Algorytmy randomizowane to algorytmy wykorzystujące losowość do rozwiązywania problemów. Wykorzystują losowe dane wejściowe, aby osiągnąć swoje cele, często prowadząc do prostszych lub bardziej wydajnych rozwiązań.

    Rodzaje algorytmów losowych:

    1 milion ile 0
    • Las Vegas : Zawsze daje poprawny wynik, ale czas działania jest losowy.
    • Monte Carlo : Może dawać nieprawidłowy wynik z małym prawdopodobieństwem, ale czas działania jest zwykle krótszy.

    Ważne algorytmy wykorzystujące algorytmy randomizacji:

    Algorytm Opis
    Szybkie sortowanie Algorytm sortowania losowego ze złożonością czasową średniego przypadku O (n log n).
    Pomiń listę Losowa struktura danych zapewniająca szybkie operacje wyszukiwania i wstawiania.
    Filtr Blooma Probabilistyczna struktura danych do wydajnego testowania przynależności do zbioru.

    14. Algorytm rozgałęziony i związany

    The Algorytm rozgałęziony i związany jest metodą stosowaną w problemach optymalizacji kombinatorycznej w celu systematycznego poszukiwania najlepszego rozwiązania. Działa poprzez podzielenie problemu na mniejsze podproblemy lub gałęzie, a następnie wyeliminowanie niektórych gałęzi w oparciu o granice optymalnego rozwiązania. Proces ten trwa do momentu znalezienia najlepszego rozwiązania lub zbadania wszystkich gałęzi.

    Standardowe problemy dotyczące algorytmu rozgałęzionego i powiązanego:

    Unikalny problem Opis
    Plecak 0/1 za pomocą gałęzi i wiązania Szczegóły implementacji gałęzi i podejścia powiązanego do rozwiązania problemu plecakowego 0/1.
    Plecak 0/1 z wykorzystaniem najtańszego oddziału i wiązany Rozwiązanie problemu plecaka 0/1 przy użyciu najtańszej techniki gałęzi i wiązania.
    8 puzzli Problem z użyciem Branch and Bound Zastosowanie gałęzi i przywiązania do rozwiązania problemu 8 puzzli, popularnej gry logicznej z przesuwaniem.
    Problem z królową N przy użyciu gałęzi i wiązania Wykorzystanie gałęzi i znalezienie rozwiązań problemu N Queens, klasycznego problemu szachowego.

    Powiązane tematy:

    • Samouczek algorytmu rozgałęziania i wiązania

    Dowiedz się o złożonościach

    W strukturach danych i algorytmach (DSA) głównym celem jest skuteczne i wydajne rozwiązywanie problemów. Aby określić efektywność programu, przyglądamy się dwóm typom złożoności:

    1. Złożoność czasu : Mówi nam, ile czasu zajmuje wykonanie naszego kodu.
    2. Złożoność przestrzeni : Mówi nam, ile pamięci wykorzystuje nasz kod.

    Notacja asymptotyczna :

    Aby porównać efektywność algorytmów, używamy notacji asymptotycznej, narzędzia matematycznego służącego do estymacji czas oparte na rozmiar wejściowy bez uruchamiania kodu. Koncentruje się na liczbie podstawowych operacji w programie.

    Notacja Opis
    Duże-O (Ο) Opisuje najgorszy scenariusz, podając górną granicę czasu algorytmu.
    Omega (Ω) Opisuje najlepszy scenariusz, oferujący krótsze ograniczenie czasowe algorytmu.
    Theta (θ) Reprezentuje średnią złożoność algorytmu algorytmu.

    Najczęściej stosowaną notacją do analizy kodu jest Notacja dużego O , określając górny limit czasu działania lub zużycia pamięci w odniesieniu do rozmiaru wejściowego.

    Powiązane tematy:

    Ściągawki do rozwiązywania problemów praktycznych:

    Wyselekcjonowane listy problemów z poniższych artykułów:

    • Mapa drogowa DSA autorstwa Sandeepa Jaina
    • ARKUSZ SDE – kompletny przewodnik dotyczący przygotowania SDE
    • Arkusz główny techcodeview.com – lista wszystkich ściągawek