Struktura danych wykresu i Algorithms (Przykład)

⚡ Inteligentne podsumowanie

Struktura danych grafu to nieliniowy zbiór wierzchołków i krawędzi, gdzie każda krawędź łączy parę wierzchołków. Grafy modelują rzeczywiste sieci, takie jak mapy, połączenia społecznościowe i strony internetowe, i obsługują wiele zaawansowanych algorytmów.

  • 📐 Struktura: Graf G = (V, E) łączy zbiór wierzchołków (węzłów) z zbiorem krawędzi (łączy) pomiędzy nimi.
  • 🔤 Terminologia: Kluczowe terminy obejmują wierzchołek, krawędź, stopień, stopień wejściowy, stopień wyjściowy, pętlę własną i sąsiedztwo.
  • 🗂️. Reprezentacja: Wykresy są przechowywane przy użyciu macierzy sąsiedztwa lub listy sąsiedztwa, z których każda wiąże się z innymi kompromisami przestrzennymi.
  • 🧭 typy: Grafy skierowane, nieskierowane, ważone, cykliczne, acykliczne, zupełne, dwudzielne i inne klasyfikują grafy według struktury.
  • 🌐 Aplikacje: Google Trasowanie map, sieci społecznościowe, rankingi stron internetowych i zależności między zasobami — wszystkie te elementy opierają się na grafach.

Struktura danych wykresu i Algorithms

Co to jest wykres w strukturze danych?

Graf to nieliniowa struktura danych składająca się z wierzchołków i krawędzi. Wierzchołki zawierają informacje lub dane, a krawędzie pełnią funkcję łącznika między parami wierzchołków.

Służy do rozwiązywania rzeczywistych problemów, takich jak znajdowanie najlepszej trasy do miejsca docelowego oraz trasy dla sieci telekomunikacyjnych i społecznościowych. Użytkownicy są traktowani jako węzły w grafie, a przewody to krawędzie łączące użytkowników.

Jeśli krawędzie są reprezentowane jako E, a wierzchołki jako V, wówczas graf G można zapisać jako zbiór wierzchołków i krawędzi, np. G (V, E).

Przykład wykresu w strukturze danych

Oto prosty przykład struktury danych grafu:

Przykład wykresu w strukturze danych

To prosty graf nieskierowany (jeden rodzaj grafu). Tutaj zbiór wierzchołków to: {A, B, C, D, E, F}. Dwa wierzchołki tworzą krawędź. Na przykład, A i B są połączone krawędzią. Jednak A i F nie są połączone żadną krawędzią.

Terminologie dotyczące grafów w strukturze danych

Poniżej przedstawiono kilka ważnych terminów używanych w strukturze danych grafu:

SemestrOPIS
WierzchołekKażdy element danych nazywany jest wierzchołkiem lub węzłem. Na powyższym obrazku A, B, C, D i E to wierzchołki.
Krawędź (łuk)Łączniki między dwoma węzłami lub wierzchołkami nazywane są krawędzią (łukiem). Mają dwa końce i są reprezentowane przez (wierzchołek początkowy, wierzchołek końcowy).
Nieukierunkowana krawędźJest to krawędź dwukierunkowa.
Wyreżyserowany EdgeJest to krawędź jednokierunkowa.
Ważona krawędźKrawędź z przypisaną wartością.
StopieńW grafie liczbę krawędzi połączonych z wierzchołkiem nazywa się stopniem.
stopieńCałkowita liczba przychodzących krawędzi połączonych z wierzchołkiem.
stopień naukowyCałkowita liczba wychodzących krawędzi połączonych z wierzchołkiem.
Pętla własnaKrawędź nazywa się pętlą własną, jeśli jej dwa punkty końcowe pokrywają się.
PrzyleganieWierzchołki uznaje się za sąsiadujące, jeżeli łączy je krawędź.

Rodzaje grafów w strukturze danych

Oto lista najczęściej spotykanych rodzaje grafów w strukturze danych:

  • Kierowany wykres
  • Wykres nieskierowany
  • Wykres ważony
  • Wykres dwukierunkowy
  • Nieskończony wykres
  • Wykres zerowy
  • Trywialny wykres
  • Wielu wykres
  • Kompletny wykres
  • Połączony wykres
  • Wykres cykliczny
  • Skierowany graf acykliczny (DAG)
  • Wykres cyklu
  • Wykres dwudzielny
  • Wykres Eulera
  • Wykres Hamiltona

Jak przedstawić graf w strukturze danych?

Graf jest zazwyczaj przechowywany w pamięci przy użyciu jednej z dwóch reprezentacji. Wybór wpływa na ilość pamięci wykorzystywanej przez graf oraz szybkość wykonywania typowych operacji.

  • Macierz sąsiedztwa: Dwuwymiarowa tablica V × V, w której komórka [i][j] ma wartość 1 (lub wagę krawędzi), jeśli istnieje krawędź między wierzchołkiem i a wierzchołkiem j, a 0 w przeciwnym wypadku. Umożliwia wyszukiwanie krawędzi z częstotliwością O(1), ale wykorzystuje przestrzeń O(V²), co czyni ją najlepszą dla gęstych grafów.
  • Lista sąsiedztwa: Tablica list, w której każdy wierzchołek przechowuje listę sąsiednich wierzchołków. Wykorzystuje przestrzeń O(V + E) i jest wydajna w przypadku grafów rzadkich, dlatego korzysta z niej większość grafów rzeczywistych.

Więcej na ten temat możesz przeczytać w lista sąsiedztwa i reprezentacja macierzowa grafu poradnik.

Zastosowania struktury danych grafowych

Graf ma wiele zastosowań. Istnieje wiele algorytmów wykorzystujących grafy. Oto niektóre z zastosowań grafu:

  • Google Mapy wykorzystują wykresy do znajdowania skrzyżowań dwóch dróg i obliczania odległości między dwoma lokalizacjami. Na przykład: Dijkstra, w celu znalezienia najkrótszej odległości między lokalizacją źródłową i docelową.
  • Facebook wykorzystuje grafy do wyszukiwania wspólnych znajomych użytkowników. Jego algorytm traktuje każdego użytkownika jako węzeł grafu.
  • Do alokacji zasobów używany jest DAG (Directed Acyclic Graph), który sprawdza zależność zasobów.
  • Google Wyszukiwarka używa wykresów do ustalania rankingu stron internetowych.
  • Mapaping Urządzenie wykorzystuje strukturę danych grafu.
  • A Router a jego protokół wykorzystuje Graf do poznania ścieżki do celu.

FAQ

Sieci neuronowe grafów uczą się na podstawie danych o strukturze grafów, aby wykrywać oszustwa, formułować rekomendacje i odkrywać nowe leki. Grafy wiedzy wspierają odpowiedzi na pytania AI, a frameworki głębokiego uczenia modelują każde obliczenie jako graf operacji.

Tak. Asystenci AI, tacy jak GitHub Copilot, mogą generować implementacje sortowania BFS, DFS, Dijkstry i topologicznego na podstawie prostego opisu. Przed użyciem kodu nadal należy testować przypadki brzegowe, takie jak rozłączone węzły, cykle i puste grafy.

Drzewo to specjalny rodzaj grafu, który jest spójny i nie zawiera cykli, a między dowolnymi dwoma węzłami istnieje dokładnie jedna ścieżka. Graf jest bardziej ogólny: może zawierać cykle, części rozłączne oraz krawędzie skierowane lub ważone.

Dwiema głównymi metodami przeszukiwania są przeszukiwanie wszerz (BFS), które eksploruje poziom po poziomie za pomocą kolejki, oraz przeszukiwanie w głąb (DFS), które eksploruje tak głęboko, jak to możliwe, za pomocą stosu lub rekurencji przed powrotemtrackról.

Podsumuj ten post następująco: