Cỏc thuật toỏn tỡm đường ngắn nhất

Một phần của tài liệu bai_giang_ky_thuat_chuyen_mach (Trang 85 - 88)

Cỏc thuật toỏn tớnh toỏn định tuyến được sử dụng để tớnh toỏn và quyết định chọn đường trờn cơ sở thụng tin định tuyến nhận được qua cỏc giao thức định tuyến. Cỏc thuật toỏn tốt và phự hợp với mụi trường mạng sẽ đảm bảo được tốc độ và hiệu năng của quy trỡnh định tuyến. Trong mục này sẽ trỡnh bày về cỏc cơ sở lý thuyết và thuật toỏn của hai thuật toỏn thường được sử dụng trong mạng truyền thụng: thuật toỏn

Bellman–Ford và thuật toỏn Dijkstra. Hai thuật toỏn này được gọi là cỏc thuật toỏn tỡm đường ngắn nhất, với mục tiờu tỡm ra con đường ngắn nhất từ node nguồn tới node đớch trong cỏc mụ hỡnh mạng tổng quỏt (tập trung, phõn tỏn).

i, Thut toỏn Bellman-Ford và định tuyến vecto khong cỏch

Thuật toỏn Bellman-Ford được sử dụng trong mụ hỡnh tập trung để tớnh toỏn một đường dẫn ngắn nhất giữa một node nguồn và một node đớch. Trong mụ hỡnh phõn tỏn, thuật toỏn được sử dụng đểtớnh toỏn cỏc đường dẫn ngắn nhất.

a, Mụ hỡnh tập trung.

Để xem xột thuật toỏn Bellman-ford trong tiếp cận mụ hỡnh tập trung, ta xem xột vớ dụ một mụ hỡnh húa mạng trờn hỡnh 3.22. Mụ hỡnh mạng vớ dụ được thể hiện qua một đồ thị cú trọng số thể hiện trờn cỏc liờn kết, kết quảtớnh toỏn đường dẫn ngắn nhất dựa trờn cỏc trọng số trờn đồ thị. Gọi dij là trọng số (giỏ) liờn kết giữa node i và node j, Dij là giỏ tối thiểu giữa node i và node j. Nếu hai node khụng cú kết nối trực tiếp giỏ liờn kết được đặt bằng . Gọi nỳt trung gian cú kết nối trực tiếp tới một trong hai node là k và biểu thức Bellman-Ford được biểu diễn như sau.

Hỡnh 3.22: vớ dụ về mụ hỡnh kết nối mạng

85

Wijmin{Wik w }kj với i≠j. (3.13)

Như vậy, giỏ tối thiểu phụ thuộc vào giỏ tối thiểu từ i tới k và giỏ của liờn kết k-j. Cú thể cú nhiều node k kết nối trực tiếp tới node j(k1, k2,..) ngoại trừ node k=i .

Hỡnh 3.23: Thuật toỏn Bellman-Ford tập trung

Một vấn đề quan trọng trong thuật toỏn này là: nếu node k khụng kết nối trực tiếp tới node j nờn dkj=. Với giả thiết đó biết giỏ tối thiểu Dik từ node i tới node k, trong tớnh toỏn thực tế, một biến chạy được sử dụng để tớnh giỏ tối thiểu sau một sốbước, ta cú giỏ tối thiểu sau bước thứ h là ijh

D .

b, Mụ hỡnh phõn tỏn.

Trong tiếp cận mụ hỡnh phõn tỏn, cỏc node mạng tự tớnh toỏn trờn cơ sở thụng tin thu nhõn được từ mạng để xỏc định con đường ngắn nhất từ tới đớch bất kỳ. Vỡ vậy, node nguồn cần biết giỏ đường dẫn ngắn nhất tới tất cả cỏc node trung gian tới đớch

Dik. Theo mụ hỡnh phõn tỏn, ta tỡm kiếm cỏc liờn kết ra khỏi node i trực tiếp tới node k với giỏ liờn kết dik và coi giỏ liờn kết tối thiểu giữa k và j là Djk mà khụng cần biết cỏch thức xỏc định giỏ trị này của k. Danh sỏch cỏc kết nối trực tiếp tới i được ký hiệu là Ni. Nếu node i tỡm được một node lõn cận của nú cú đường đi ngắn nhất tới đớch, nú cú thể sử dụng thụng tin này đểxỏc định giỏ tới đớch bằng cỏch cộng với giỏ liờn kết dik.

Trong phương phỏp tớnh theo vector khoảng cỏch, một node nhờ vào cỏc node lõn cận đó biết giỏ của đường đi tới đớch để xỏc định tuyến tốt nhất. Để thực hiện nhiệm vụđú, phương phỏp này thường xuyờn tớnh toỏn lại theo định kỳ hoặc khi cú thụng tin từ cỏc node lõn cận. í tưởng then chốt của thuật toỏn trong mụ hỡnh phõn tỏn là node k cần phõn tỏn giỏ của nú tới node j (Dkj) tới tất cả cỏc kết nối trực tiếp tới i, phụ thuộc vào i và thời gian. Sự khỏc biệt với thuật toỏn Bellman-Ford tập trung là thứ tự tớnh toỏn cựng với cỏc liờn kết đó đưa ra một gúc độ khỏc để tớnh toỏn đường dẫn ngắn nhất.

ii, Thut toỏn Dijkstra

Thuật toỏn Dijkstra là một kiểu tiếp cận khỏc trong kỹ thuật tỡm đường dẫn ngắn nhất giữa hai node trong mạng. Thuật toỏn Dijkstra hoạt động trờn một tập node ứng

86

cử lõn cận của node nguồn để tớnh toỏn và cỏc định đường dẫn ngắn nhất tới một node đớch. Một đặc tớnh nổi trội của thuật toỏn Dijkstra là cú thể tớnh toỏn cỏc đường dẫn ngắn nhất tới tất cảcỏc node đớch từ một node nguồn, thay vỡ tớnh toỏn theo từng cặp nguồn – đớch. Thuật toỏn Dijkstra cũng được phõn loại hoạt động theo mụ hỡnh tập trung và phõn tỏn.

a, Mụ hỡnh tập trung

Giả thiết một node i bất kỳ trong một mạng gồm N node mà từđú ta muốn tớnh toỏn cỏc đường dẫn ngắn nhất tới tất cả cỏc node cũn lại. Danh sỏch N node được định nghĩa bởi N={1, 2, 3…,N}. Một node đớch được ký hiệu là j (j≠i). Ta sử dụng hai ký hiệu sau: dij =giỏ liờn kết giữa node i và j; Dij= giỏ đường dẫn tối thiểu giữa node i và j. Thuật toỏn Dijkstra chia danh sỏch N node thanh hai danh sỏch: Nú được bắt đầu với danh sỏch cố định S thể hiện cỏc node đó được xem xột, danh sỏch đề nghị S’ cho cỏc node sẽđược xem xột tớnh toỏn. Trong quỏ trỡnh tớnh toỏn, danh sỏch S sẽ mở rộng với cỏc node mới trong khi danh sỏch S’ sẽ rỳt ngắn lại khi node trong đú gia nhập vào

S. Thuật toỏn dừng khi tất cả cỏc node trong danh sỏch của S’ nằm trong danh sỏch S. Mấu chốt của thuật toỏn nằm tại hai phần: (1) cỏch thức mở rộng tập S và (2) cỏch tớnh toỏn đường dẫn ngắn nhất tới cỏc node lõn cận của cỏc node trong S (cỏc node chưa nằm trong danh sỏch S). Danh sỏch S được mở rộng sau mỗi vũng lặp tớnh toỏn một node k của node i cú giỏ tối thiểu tới node i. Tại mỗi vũng lặp, thuật toỏn tớnh toỏn cỏc node lõn cận của node k (kS) để tỡm giỏ tối thiểu cú thểthay đổi sau mỗi vũng lặp.

b, Tiếp cận phõn tỏn

Biến phõn tỏn của thuật toỏn Dijkstra tương tựnhư trong tiếp cận tập trung. Sự khỏc biệt lớn nhất là giỏ của liờn kết nhận được bởi một node cú thể khỏc với cỏc node khỏc khi cỏc thụng tin chuyển tới cỏc node khụng đồng bộ. Vỡ vậy ta định nghĩa giỏ của liờn kết (k-m) nhận được tại node i là i ( )

km

d t , tương tựnhư vậy đối với giỏ tối thiểu từ i tới j phụ thuộc vào thời gian Dij(t). Như vậy, thuật toỏn Dijkstra cho mụi trường phõn tỏn trao đổi thụng tin giỏ liờn kết theo cỏch phõn tỏn được đưa vào trong thuật toỏn, cỏc bước tăng theo thời gian học thụng tin từ cỏc liờn kết và giỏ liờn kết trong mạng.

iii, So sỏnh thut toỏn Bellman-Ford và Dijkstra

Hai so sỏnh dưới đõy nhằm đưa ra hướng tới cỏc ứng dụng thực tiễn của hai thuật toỏn trờn.

 Đầu tiờn, thuật toỏn Bellman-Ford tớnh toỏn đường dẫn ngắn nhất tới một node đớch trong một khoảng thời gian trong khi Dijkstra tớnh toỏn đường dẫn ngắn nhất tới tất cả cỏc node đớch (đụi khi gọi là cõy đường dẫn ngắn nhất). Khi so sỏnh quỏ trỡnh tớnh toỏn giỏ tối thiểu ta thấy sựtương tự nhau. Tuy nhiờn, ởđõy cú sự khỏc biệt rất

87

quan trọng. Trong cả hai thuật toỏn đều sử dụng node trung gian k; thuật toỏn

Bellman-Ford coi node k là chung cho tất cả cỏc node để tỡm bước nhảy kế tiếp tốt nhất tới node j, trong khi thuật toỏn Dijkstra là node trung gian được lựa chọn đầu tiờn và cố định và vỡ vậy tớnh toỏn đường dẫn tới tất cả cỏc node j chưa được thực hiện ngay.

 Thứ hai, khi cú cỏc kiểu tớnh toỏn khỏc nhau trong một thuật toỏn sẽ dẫn tới độ phức tạp thuật toỏn khỏc nhau. Giả thiết N là tổng số node và L là tổng số liờn kết thỡ độ phức tạp tớnh toỏn của thuật toỏn Bellman-Ford là O(LN). Độ phức tạp tớnh toỏn của thuật toỏn Dijkstra là O(N2) và cú thể giảm xuống cũn O(L+NlogN) nếu sử dụng một cấu trỳc cơ sở dữ liệu tốt. Chỳ ý rằng nếu mạng được kết nối theo hỡnh lưới đầy đủ thỡ số lượng liờn kết song hướng là N(N-1)/2. và độ phức tạp tớnh toỏn của thuật toỏn Bellman-Ford là O(N3) và Dijkstra là O(N2).

iv, Tớnh toỏn k đường dn ngn nht

Trong rất nhiều tỡnh huống ta cần phải tớnh toỏn khụng chỉ một đường dẫn ngắn nhất mà cũn cần cỏc đường dẫn thứ hai, thứ ba.. tới k đường dẫn từ một node nguồn tới một node đớch. Cỏc thuật toỏn sử dụng đểxỏc định cỏc đường dẫn ngắn nhất được gọi là cỏc thuật toỏn k đường dẫn ngắn nhất. Một cỏch tiếp cận đơn giản nhất để tạo ra thờm cỏc đường dẫn ngắn nhất bằng cỏch sử dụng cỏc thuật toỏn tỡm một đường dẫn (vớ dụ thuật toỏn Dijkstra), sau đú xúa tạm thời liờn kết trờn đường dẫn ngắn nhất trong một khoảng thời gian và thực hiện tớnh toỏn lại trờn đồ thị đó rỳt gọn để tỡm đường dẫn tiếp theo. Kết quả là cỏc đường dẫn được tớnh toỏn tiếp theo sẽ khụng tối ưu bằng đường dẫn thứ nhất và sử dụng cỏch thức tương tựnhư cỏc đường dẫn thứ 2, thứ 3, hoặc thứ k.

Giả thiết ta muốn tỡm k đường dẫn ngắn nhất tỏch biệt. Trong trường hợp này, ta xúa tạm thời tất cả cỏc liờn kết trờn đường dẫn ngắn nhất và chạy lại thuật toỏn

Dijkstra một lần nữa để tỡm được đường dẫn ngắn nhất tỏch biệt với đường dẫn cũ, tiếp tục tới k đường dẫn. Đụi khi phương phỏp này khụng thực hiện tỡm được đường dẫn tỏch biệt tiếp theo nếu đồ thị thu gọn bị cụ lập.

Một phần của tài liệu bai_giang_ky_thuat_chuyen_mach (Trang 85 - 88)

Tải bản đầy đủ (PDF)

(133 trang)