Získávání znalostí
/ Knowledge Discovery >> Získávání znalostí >> technologie >> počítač >> počítačový hardware >>

Jak směrovací algoritmy Work

to seznam uzlů ukazuje nejlepší cestu od V1 do V2

budeme používat tento algoritmus jako příklad na další straně
. Příklad:. Dijkstra algoritmus
Krok 1
Krok 2 Krok 3

Krok 4

Zde chceme najít nejlepší trasu mezi A a E (viz níže). Můžete vidět, že existuje šest možné cesty mezi A a E (ABE, ACE, Abde, ACDE, ABDCE, ACDBE), a je zřejmé, že Abde je nejlepší cesta, protože jeho hmotnost je nejnižší. Ale život není vždy tak snadné, a tam jsou některé složité případy, kdy máme použít algoritmy najít nejlepší trasu.

  1. Jak vidíte na prvním obrázku, zdrojový uzel (A) byl vybrán jako T-uzel, a tak jeho značka je trvalá (ukážeme trvalé uzly s vyplněnými kruhy a T-uzly, které mají - > symbolu).
  2. V dalším kroku, uvidíte, že Stav sada záznamů předběžných uzlů přímo spojených s T-uzlu (B, C), byl změněn. Také, protože B má menší váhu, že byl vybrán jako T-spoje a štítkem se změnil na trvalé (viz níže).
  3. V kroku 3, stejně jako v kroku 2, stav záznamu souboru předběžných uzlů které mají přímou vazbu na T-uzlu (D, E), byl změněn. Také, protože D má menší váhu, to bylo vybráno jako T-uzel a štítkem se změnilo na trvalé.
  4. V kroku 4, nemáme žádné opatrné uzly, a tak jsme hned identifikovat další T -uzel. Vzhledem k tomu, E má nejmenší váhu, to bylo vybráno jako T-uzel.

    A konečně, E je cíl, a tak jsme tady zastavit.

    Jsme na konci! Nyní musíme určit trasu. Předchozí uzel E je D, a předchozí uzel D je B, a B je předcházející uzel A. Takže nejlepší cesta je Abde. V tomto případě je celková hmotnost je 4 (1 + 2 + 1).

    Ačkoli tento algoritmus funguje dobře, je to tak složité, že to může trvat dlouhou dobu pro routery je zpracovávat, a účinnosti Síť se nezdaří. Také v případě, router dává špatné informace pro ostatní směrovače, všechny směrovací rozhodnutí bude neúčinná. Pro lepší pochopení tohoto algoritmu, tady je zdrojem programu napsané C:

     #define MAX_NODES 1024 /* maximální počet uzlů * /# define INFINITY 1000000000 /* číslo větší než každý maximální cesta * /int n, dist [MAX_NODES] [MAX_NODES]; /* dist [I] [j] je vzdálenost od i do j * /void shortest_path (int s, int t, int path []) {struct stav {/* cesta se pracuje * /int předchůdce; /* předchozí délka uzlu * /int /* délka od pramene k tomuto uzlu * /enum {trvalý, orientační} Etiketa /* Stát štítek * /} state [MAX_NODES], int i, k, min; struct stav * p; pro (p = & stavu [0]; p < & stav [n], p ++) 

    Page [1] [2] [3] [4] [5] [6]