Drum Hamiltonian în DAG

Analizor didactic interactiv bazat pe matricea de adiacență, vizualizare dinamică și sandbox de cod.

PLAYGROUND

Vizualizator & Editor de Grafuri

Matricea de Adiacență

Bifează celula (linie, coloană) pentru a adăuga un arc orientat de la nodul liniei la nodul coloanei. Diagonala este blocată (fără bucle).

Seturi Predefinite (Presetări)

Reprezentarea Vizuală a Grafului

💡 Poți glisa (drag) nodurile grafului pentru a rearanja aspectul vizual.

Consola de Execuție
Gata
[Sistem] Generatorul a fost inițializat. Alege o presetare sau editează matricea pentru a începe.
SANDBOX JS

Modifică & Testează Codul Algoritmului

Aici poți edita logica JavaScript direct în browser! Codul tău primește ca intrare numărul de noduri și matricea de adiacență, apoi rulează în timp real. Mesajele din console.log() vor apărea direct în Consola de mai sus.

algoritm_hamiltonian.js
ECMAScript 6 (Strict)
MATH DOCS

Documentația Algoritmului & Suport Academic

1. Concepte Fundamentale

Drumul Hamiltonian: Într-un graf orientat G = (V, E), un drum Hamiltonian este un drum simplu care trece prin fiecare vârf v ∈ V exact o singură dată. Determinarea existenței unui drum Hamiltonian în grafuri generale este o problemă extrem de dificilă (NP-completă), echivalentă cu problema comis-voiajorului.

Graf Orientat Acyclic (DAG): Un DAG este un graf orientat care nu conține circuite (cicluri). În această structură particulară, relațiile de ordine între vârfuri permit simplificarea drastică a multor probleme computaționale grele.

Sortarea Topologică: Sortarea topologică a unui DAG este o aranjare liniară a vârfurilor sale astfel încât pentru fiecare arc orientat u → v, nodul u să preceadă nodul v în ordonare. Orice DAG are cel puțin o sortare topologică.

2. Teorema Existenței Drumului Hamiltonian în DAG-uri

Un graf orientat fără circuite (DAG) are un drum Hamiltonian dacă și numai dacă sortarea sa topologică este UNICĂ.

Demonstrație intuitivă:

  • Necesitate (⇒): Să presupunem că DAG-ul G conține un drum Hamiltonian v1 → v2 → ... → vn. Acest drum vizitează toate vârfurile exact o dată. Arcele drumului determină o relație de ordine totală strictă în care vi trebuie să apară înaintea lui vi+1 în orice sortare topologică. Prin urmare, singura sortare topologică validă este chiar succesiunea vârfurilor din drumul Hamiltonian, făcând sortarea topologică unică.
  • Suficiență (⇐): Să presupunem că graful G are o singură sortare topologică v1, v2, ..., vn. Presupunem, prin reducere la absurd, că pentru o anumită poziție i (1 ≤ i < n), nu există arcul direct vi → vi+1 în graf. Deoarece este o sortare topologică, nu pot exista alte căi orientate de la vi+1 la vi (altfel s-ar forma un circuit). De asemenea, din moment ce nu există arcul direct vi → vi+1 și niciun element intermediar nu se află între ele în sortare, nu există nicio cale de la vi la vi+1 care să nu implice alte vârfuri. Asta înseamnă că relația de precedență directă între ele este nedeterminată; prin urmare, am putea inversa ordinea nodurilor obținând sortarea topologică validă v1, ..., vi+1, vi, ..., vn, ceea ce contrazice ipoteza că sortarea este unică. Astfel, arcul vi → vi+1 trebuie să existe pentru orice i, generând drumul Hamiltonian.

3. Descrierea Pas cu Pas a Algoritmului

Pentru a determina drumul Hamiltonian, algoritmul implementat parcurge următorii pași:

  1. Verificarea prezenței circuitelor: Se rulează o parcurgere în adâncime (DFS) unde nodurile sunt marcate ca: 0 (nevizitat), 1 (în curs de procesare / în stivă), sau 2 (complet explorat). Dacă se întâlnește un arc către un nod cu marcajul 1, s-a detectat un circuit înapoi, iar graful nu este un DAG.
  2. Generarea Sortării Topologice: Dacă graful este DAG, se rulează DFS pe nodurile nevizitate. Când un nod își termină explorarea vecinilor săi, este adăugat în fruntea unei liste (sau adăugat într-o stivă și extras la final). Ordinea rezultată reprezintă sortarea topologică.
  3. Validarea drumului: Având sortarea topologică v1, v2, ..., vn, se folosește matricea de adiacență pentru a interoga dacă celula M[vi][vi+1] == 1 pentru orice i ∈ [1, n - 1].
  4. Verdict: Dacă toate interogările returnează 1, atunci sortarea topologică reprezintă drumul Hamiltonian valid și unic. În caz contrar, graful nu admite un drum Hamiltonian.

4. Analiza Complexității

  • Complexitate Temporală: Parcurgerea DFS pentru sortare topologică și detecția ciclurilor vizitează fiecare nod și arc exact o singură dată, consumând timp O(V + E). Verificarea conexiunilor adiacente din sortare efectuează exact V - 1 interogări în matricea de adiacență, consumând O(V) pași. Prin urmare, complexitatea temporală totală este de **O(V + E)** (respectiv O(V²) dacă graful este dens și reprezentat prin matrice de adiacență, deoarece popularea și interogarea acoperă celulele matricei).
  • Complexitate Spațială: Spațiul auxiliar utilizat este destinat structurilor de vizitare (vectori de vizitare, stiva recursivă și lista sortării), însumând o complexitate spațială de **O(V)**.
← Înapoi la Arhiva de Proiecte