Nhóm 9 BTL MMT

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 17

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ VIỄN THÔNG


---------------

BÀI TẬP LỚN HỌC PHẦN


MẠNG MÁY TÍNH
ĐỀ TÀI: LẬP TRÌNH MÔ PHỎNG MÔ HÌNH ĐỊNH TUYẾN SỬ
DỤNG THUẬT TOÁN ĐƯỜNG ĐI NGẮN NHẤT
(SHORTEST PATH ROUTING)

Giảng viên: PGS.TS. Trần Quang Vinh


Nhóm 9:
1. Phạm Trọng Phụng 20182723
2. Lưu Văn Công 20182390
3. Đoàn Hữu Hải 20182479
4. Đặng Văn Bình 20182379
5. Lê Quang Huy 20182578

Hà Nội, tháng 11 năm 2021


MỤC LỤC

DANH MỤC HÌNH VẼ...............................................................................................


I. LÝ THUYẾT..........................................................................................................
1. Định tuyến trong mạng thông tin:.........................................................................
a. Định tuyến (routing):...........................................................................................4
b. Các lớp thuật toán định tuyến:............................................................................4
2. Giao thức định tuyến:...........................................................................................
a. Giao thức định tuyến trong:...........................................................................5
b. Giao thức định tuyến ngoài:..........................................................................6
3.Nút trong mạng thông tin.......................................................................................
a. Khái niệm nút......................................................................................................6
b. Vai trò của nút.....................................................................................................6
c. Các loại nút khác.................................................................................................7
4.Switch....................................................................................................................
a. Khái niệm Switch................................................................................................7
b. Tầm quan trọng của Switch................................................................................8
c. Ích lợi của bộ chuyển mạch Switch....................................................................8
d. Đặc điểm chính của Switch.................................................................................9
5. Đường truyền........................................................................................................
II. MÔ TẢ ĐỀ BÀI...................................................................................................
1. Định tuyến đường dẫn ngắn nhất (Shortest Path Routing):.................................
2.Thuật toán Dijkstra:.............................................................................................
III. Mô phỏng.............................................................................................................
1. Ý tưởng giả thuật................................................................................................
2. Code minh họa....................................................................................................
3. Kết quả mô phỏng...............................................................................................
4. Nhận xét.............................................................................................................
DANH MỤC HÌNH VẼ
Hình 1. Switch

Hình 2. Các đường đi ngắn nhất lồng nhau.

Hình 3. Ví dụ một mạng.

Hình 4. Mô hình đường dẫn ngắn nhất.

Hình 5. Bảng chọn tuyến cho nút 1.


I. LÝ THUYẾT.
1. Định tuyến trong mạng thông tin:
a. Định tuyến (routing):
Định tuyến là quá trình chọn lựa các đường đi trên một mạng máy tính để gửi
dữ liệu qua đó. Việc định tuyến được thực hiện cho nhiều loại mạng, trong đó có mạng
điện thoại, liên mạng, Internet, mạng giao thông.

Định tuyến chỉ ra hướng, sự di chuyển của các gói (dữ liệu) được đánh địa chỉ
từ mạng nguồn của chúng, hướng đến đích cuối thông qua các node trung gian. Thiết
bị phần cứng chuyên dùng được gọi là router (bộ định tuyến). Tiến trình định tuyến
thường chỉ hướng đi dựa vào bảng định tuyến, đó là bảng chứa những lộ trình tốt nhất
đến các đích khác nhau trên mạng. Vì vậy việc xây dựng bảng định tuyến, được tổ
chức trong bộ nhớ của router, trở nên vô cùng quan trọng cho việc định tuyến hiệu
quả.

Routing khác với bridging (bắc cầu) ở chỗ trong nhiệm vụ của nó thì các cấu
trúc địa chỉ gợi nên sự gần gũi của các địa chỉ tương tự trong mạng, qua đó cho phép
nhập liệu một bảng định tuyến đơn để mô tả lộ trình đến một nhóm các địa chỉ. Vì thế,
routing làm việc tốt hơn bridging trong những mạng lớn, và nó trở thành dạng chiếm
ưu thế của việc tìm đường trên mạng internet.

b. Các lớp thuật toán định tuyến:


Thuật toán vector (distance-vector routing protocol):

Thuật toán này dùng thuật toán Bellman-Ford. Nó chỉ định một con số, gọi là
chi phí (hay trọng số), cho mỗi một liên kết giữa các node trong mạng. Các node sẽ
gửi thông tin từ điểm A đến điểm B qua đường đi mang lại tổng chi phí thấp nhất (là
tổng các chi phí của các kết nối giữa các node được dùng).

Thuật toán hoạt động với những hành động đơn giản. Khi một node khởi động
lần đầu, nó chỉ biết các node kề trực tiếp với nó, và chi phí trực tiếp để đi đến đó
(thông tin, danh sách của các đích, tổng chi phí của từng node, và bước kế tiếp để gửi
dữ liệu đến đó tạo nên bảng định tuyến, hay bảng khoảng cách). Mỗi node, trong một
tiến trình, gửi đến từng “hàng xóm” tổng chi phí của nó để đi đến các đích mà nó biết.
Các node “hàng xóm” phân tích thông tin này, và so sánh với những thông tin mà
chúng đang “biết”; bất kì điều gì cải thiện được những thông tin chúng đang có sẽ
được đưa vào các bảng định tuyến. Đến khi kết thúc, tất cả các node trên mạng sẽ tìm
ra bước truyền kế tiếp tối ưu đến tất cả mọi đích, và tổng chi phí tốt nhất.

Thuật toán trạng thái kết nối (Link-state routing protocols):

Khi áp dụng các thuật toán trạng thái kết nối, mỗi node sử dụng cơ sở dữ liệu
của nó như là một bản đồ của mạng với dạng đồ thị. Để làm để làm điều này, mỗi node
phát đi tới tổng thể mạng những thông tin về các node khác mà nó có thể kết nối được,
và từng node góp thông tin một cách độc lập vào bản đồ. Sử dụng bản đồ này, mỗi
router sau đó sẽ quyết định về tuyến đường tốt nhất từ nó đến mọi node khác.

Các router sẽ trao đổi gói tin LSA với những router khác. Đây là những gói tin
nhỏ, chứa thông tin về các router. Mỗi router sẽ dựa vào LSAs này để tạo ra
topological database, sử dụng giải thuật SPF (Short Path First) để tìm ra đường đi. Mỗi
router đều xác định được chính xác topology của mạng. Chính vì vậy router sẽ đưa ra
quyết định để đưa packet đến đích tốt hơn. Mỗi router trong mạng sẽ báo cáo trạng thái
của nó, các link nối trực tiếp và trạng thái của mỗi link. Router sẽ nhân bản thông tin
này tới tất cả các router trên mạng. Cuối cùng tất cả các router trên mạng đều có cái
nhìn giống nhau về topology mạng.

Thuật toán làm theo cách này là thuật toán Dijkstra (thuật toán mà ta sẽ tìm hiểu
và ứng dụng), bằng cách xây dựng cấu trúc dữ liệu khác, dạng cây, trng đó node hiện
tại là gốc, và chứa mọi node khác trong mạng. Bắt đầu với một cây ban đầu chỉ chứa
chính nó. Sau đó lần lượt từ tập các node chưa được thêm vào cây, nó sẽ thêm node có
chi phí thấp nhất để đến một node đã có trên cây. Tiếp tục quá trình đến khi mọi node
đều được thêm. Cây này sau đó phục vụ để xây dựng bảng định tuyến, đưa ra bước
truyền kế tiếp tối ưu… để từ một node đến bất kì node khác trên mạng.

Thuật toán định tuyến bằng trạng thái kết nối phản ứng nhanh nhạy hơn, và
trong một khoảng thời gian có hạn, đối với sự thay đổi kết nối. Ngoài ra, những gói
được gửi qua mạng trong định tuyến bằng trạng thái kết nối thì nhỏ hơn những gói
dùng trong định tuyến bằng vector.

2. Giao thức định tuyến:


Giao thức định tuyến được dùng trong khi thi hành thuật toán định tuyến để
thuận tiện cho việc trao đổi thông tin giữa các mạng, cho phép các router xây dựng
bảng định tuyến một cách linh hoạt. Trong một số trường hợp, giao thức định tuyến có
thể tự chạy đè lên giao thức đã được định tuyến.

Danh sách các giao thức định tuyến:


a. Giao thức định tuyến trong:
Router Information Protocol (RIP).

Open Shortest Path First (OSPF).

Intermediate System to Intermediate System (IS-IS).

Interior Gateway Routing Protocol (IGRP) (thuộc sở hữu của Cisco).

Enhanced IGRP (EIGRP) (thuộc sở hữu của Cisco).

b. Giao thức định tuyến ngoài:


Exterior Gateway Protocol (EGP).

Border Gateway Protocol (BGP).

Constrained Shortest Path First (CSPF).

3.Nút trong mạng thông tin


a. Khái niệm nút.
Nút là bất kỳ thiết bị vật lý nào trong mạng của các thiết bị khác có thể gửi,
nhận và / hoặc chuyển tiếp thông tin. Máy tính là nút phổ biến nhất, và thường được
gọi là nút máy tính hoặc nút internet.

Modem, switch, hub, bridge, server, và printer cũng là các nút, cũng như các
thiết bị khác kết nối qua WiFi hoặc Ethernet. Ví dụ, một mạng kết nối ba máy tính và
một máy in, cùng với hai thiết bị không dây khác, có sáu nút tổng.

Các nút trong mạng máy tính phải có một số dạng nhận dạng nào đó, như địa
chỉ IP hoặc địa chỉ MAC, để nó được các thiết bị mạng khác nhận diện. Một nút không
có thông tin này hoặc một nút đã được thực hiện ngoại tuyến, không còn hoạt động
như một nút nữa.

b. Vai trò của nút.


Các nút mạng là các phần vật lý tạo thành một mạng, vì vậy thường có một vài
loại khác nhau.

Nút mạng thường là bất kỳ thiết bị nào nhận và sau đó truyền đạt thông tin qua
mạng, nhưng thay vào đó chỉ nhận và lưu trữ dữ liệu, chuyển tiếp thông tin ở nơi khác
hoặc tạo và gửi dữ liệu.

Ví dụ, một nút máy tính có thể sao lưu các tập tin trực tuyến hoặc gửi một
email, nhưng nó cũng có thể dòng video và tải về các tập tin khác. Máy in mạng có thể
nhận các yêu cầu in từ các thiết bị khác trên mạng trong khi máy quét có thể gửi ảnh
trở lại máy tính. Một bộ định tuyến sẽ xác định dữ liệu nào được cung cấp cho các
thiết bị yêu cầu tải tệp xuống trong mạng, nhưng cũng được sử dụng để gửi các yêu
cầu tới Internet công cộng.

c. Các loại nút khác


Trong một mạng lưới truyền hình cáp dựa trên cáp, các nút là nhà và / hoặc các
doanh nghiệp được kết nối với cùng một bộ thu sợi quang.

Một ví dụ khác của một nút là một thiết bị cung cấp dịch vụ mạng thông minh
trong một mạng di động, như bộ điều khiển trạm gốc (BSC) hoặc Nút Hỗ trợ GPRS
của Cổng (GGSN). Nói cách khác, nút di động là những gì cung cấp phần mềm điều
khiển phía sau thiết bị di động, giống như cấu trúc với anten được sử dụng để truyền
tín hiệu đến tất cả các thiết bị trong mạng di động.

Siêu nút là một nút trong mạng ngang hàng không chỉ hoạt động như một nút
thông thường mà còn là máy chủ proxy và thiết bị chuyển tiếp thông tin cho những
người dùng khác trong mạng P2P. Bởi vì điều này, các siêu âm đòi hỏi nhiều CPU và
băng thông hơn các nút thông thường.

4.Switch
a. Khái niệm Switch.
Switch là một thiết bị chuyển mạch tối quan trọng trong mạng, dùng để kết nối
các đoạn mạng với nhau theo mô hình hình sao (Star). Trong mô hình này, switch
đóng vai trò trung tâm và tất cả các thiết bị vệ tinh khác kể cả máy tính đều được kết
nối về đây, từ đó định tuyến tạo đường nối tạm trung chuyển dữ liệu đi. Ngoài ra,
Switch được hỗ trợ công nghệ Full Duplex dùng để mở rộng băng thông của đường
truyền, điều mà các thiết bị khác không làm được.

Hình 1. Switch
Có thể hiểu đơn giản thiết bị chuyển mạch Switch giống như cảnh sát giao
thông phân luồng dữ liệu của một mạng cục bộ. Nó có khả năng chọn đường dẫn để
quyết định chuyển frame (đơn vị của tầng liên kết dữ liệu) nên mạng LAN hoạt động
hiệu quả hơn. Switch có khả năng nhận dạng máy được kết nối với nó nhờ cách đọc
địa chỉ MAC nguồn trong frame nó nhận được. Khi hai máy trong mạng liên lạc với
nhau, chính Switch sẽ tạo mạch ảo giữa hai cổng tương ứng mà không làm ảnh hưởng
đến lưu thông trên các cổng khác.

b. Tầm quan trọng của Switch.


Hiểu được tầm quan trọng của thiết bị chuyển mạch là gì sẽ giải thích được tại
sao Switch lại cần thiết phải có trong cơ sở mạng đến vậy. Mạng LAN hoạt động ổn
định, hiệu suất cao là nhờ Switch có khả năng tạo đường dẫn kết nối ảo giữa hai thiết
bị với nhau mà không làm ảnh hưởng đến những kết nối khác.
Tương tự như Switch, một thiết bị khác khá phổ biến là Hub. Về cơ bản thì cả
hai thiết bị chuyển mạch này có vai trò tương đương nhau, giúp kết nối nhiều máy tính
và thiết bị với 1 mạng và chúng đóng vai trò là trung tâm. Tuy nhiên, thay vì tạo ra
mạng ảo kết nối giữa hai thiết bị thì Hub sẽ chia sẻ bang thông trên cùng một đường
truyền. Khi có hai máy trạm giao tiếp với nhau thì chúng sẽ chiếm dung lượng băng
thông đáng kể, khi đó hoạt động của các thiết bị khác kết nối vào Hub sẽ bị giảm
xuống. Nói như vậy để biết được thiết bị chuyển mạch Switch thông minh và ưu việt
hơn hẳn nhờ khả năng tạo đường truyền ảo để kết nối riêng biệt giữa hai thiết bị, đảm
bảo cung cấp trọn băng thông.

c. Ích lợi của bộ chuyển mạch Switch


Có thể các bạn đã hình dung ra được phần nào lợi ích của thiết bị chuyển mạch
là gì, nó cần thiết như thế nào đối với tổ chức hay doanh nghiệp. Switch giúp cho các
hoạt động diễn ra một cách song công (có thể đọc – ghi, nghe – nói) cùng lúc trên cùng
một thiết bị. Ưu việt hơn khi không phải chia sẻ băng thông giống như các thiết bị
tương tự khác, không ảnh hưởng đến kênh truyền khác cũng như không bị ảnh hưởng
bởi chúng. Hơn nữa với cơ chế tự kiểm tra lỗi Frame nên sẽ giảm tỉ lệ lỗi trong frame,
các gói tin tốt khi được nhận sẽ được lưu lại trước khi chuyển đi (công nghệ store-and-
forward).

Switch hoạt động chủ yếu ở tầng liên kết dữ liệu Layer 2 hay còn gọi là Switch
Layer 2 trong mô hình tham chiếu OSI (mô hình lý giải một cách trừu tượng kỹ thuật
kết nối truyền thông giữa các máy vi tính và thiết kế giao thức mạng giữa chúng). Nó
có thể giới hạn lưu lượng truyền đi ở mức ngưỡng nào đó. Một Switch Layer 2 đi kèm
với các loại giao diện khác nhau như 10Mbps, 100Mbps, 1Gbps, 10Gbps… Tất nhiên
là nó cũng hỗ trợ giao tiếp Full-duplex trên mỗi cổng của nó.

Không chỉ có thế, mỗi Switch đều tạo điều kiện để mở rộng mạng và kết nối với
phần còn lại của mạng thông qua các cổng Uplink tốc độ cao, ở đây có thể kết nối với
các thiết bị chuyển mạch Switch Layer 2 khác hay các Switch Layer 3 định tuyến.
Tóm lại, một Switch hoạt động như một bộ điều khiển trung tâm, cho phép tất cả các
thiết bị kết nối đến nó giao tiếp hiệu quả. Thông qua việc chia sẻ thông tin và phân bổ
nguồn lực giúp tăng năng suất làm việc của nhân viên và tiết kiệm tiền bạc cho doanh
nghiệp.

d. Đặc điểm chính của Switch


Có trường hợp người dùng internet bình thường hỏi rằng thiết bị chuyển mạch
là gì? Nó có tác dụng như thế nào? Đặc điểm ra sao? Tôi có cần phải trang bị cho
mạng gia đình không? Xin trả lời luôn với các bạn là “Không”, chỉ các tổ chức hay
doanh nghiệp phải xây dựng cơ sở mạng tốt, phục vụ cho nhiều người mới cần phải
quan tâm tới Switch.

Nhìn chung Switch có đặc điểm giống như các thiết bị tương tự khác như Hub
hay Router. Tuy nhiên Switch có hai đặc điểm riêng biệt:

Phân chia kết nối riêng biệt trên mỗi đoạn mạng: Switch chia nhỏ hệ thống
mạng thành những đơn vị cực nhỏ gọi là microsegment. Chính điều này cho phép
nhiều người dùng trên nhiều segment khác nhau có thể giao tiếp và gửi dữ liệu cùng
lúc mà không làm ảnh hưởng đến ai.

Cung cấp băng thông lớn hơn cho mỗi người dùng bằng cách tạo ra các miền
đụng độ nhỏ hơn. Switch chia nhỏ mạng LAN thành nhiều đoạn mạng nhỏ, tương ứng
là một kết nối riêng giống như một làn đường riêng.

5. Đường truyền
Đường truyền là hệ thống các thiết bị truyền dẫn có dây hay không dây dùng để
chuyển các tín hiệu điện tử từ máy tính này đến máy tính khác. Các tín hiệu điện tử đó
biểu thị các giá trị dữ liệu dưới dạng các xung nhị phân (On – Off). Tất cả các tín hiệu
được truyền giữa các máy tính đều thuộc một dạng sóng điện từ. Tùy theo tần số của
sóng điện từ có thể dùng các đường truyền vật lý khác nhau để truyền các tín hiệu. Ở
đây đường truyền được kết nối có thể là dây cáp đồng trục, cáp xoắn, cáp quang, dây
điện thoại, sóng vô tuyến … Các đường truyền dữ liệu tạo nên cấu trúc của mạng.

Tốc độ truyền dữ liệu trên đường truyền còn được gọi là thông lượng của
đường truyền – thường được tính bằng số lượng bit được truyền đi trong một giây
(Bps). Thông lượng còn được đo bằng đơn vị khác là Baud (lấy từ tên nhà bác học –
Emile Baudot). Baud biểu thị số lượng thay đổi tín hiệu trong một giây.

Một đơn vị đo tốc độ truyền dẫn dữ liệu khác là megabyte trên giây (MBps
hoặc MB\s), bằng:

1 megabyte\s (1MBps) = 1024 Kilobytes\s (1024 KBps) = 1024*1024 Bytes\s =


1024*1024*8 bits\s

II. MÔ TẢ ĐỀ BÀI.
1. Định tuyến đường dẫn ngắn nhất (Shortest Path Routing):
Bài toán tìm đường đi ngắn nhất là một bài toán khá quan trọng trong quá trình
thiết kế và phân tích mạng. Hầu hết các bài toán định tuyến có thể giải quyết như giải
quyết bài toán tìm đường đi ngắn nhất khi một “độ dài” thích hợp được gắn vào mỗi
cạnh (hoặc cung) trong mạng. Trong khi các thuật toán thiết kế thì cố gắng tìm kiếm
cách tạo ra các mạng thỏa mãn tiêu chẩn độ dài đường đi.

Bài toán đơn giản nhất của loại toán này là tìm đường đi ngắn nhất giữa hai nút
cho trước. Loại bài toán này có thể là bài toán tìm đường đi ngắn nhất từ một nút tới
tất cả các nút còn lại, tương đương bài toán tìm đường đi ngắn nhất từ tất cả các điểm
đến một điểm. Đôi khi đòi hỏi phải tìm đường đi ngắn nhất giữa tất cả các cặp nút.

Ta xét các graph hữu hướng và giả sử rằng đã biết độ dài của một cung giữa
mỗi cặp nút i và j là l. Các độ dài này không cần phải đối xứng. Khi một cung không
tồn tại thì độ dài l được giả sử là rất lớn (chẳng hạn lớn gấp n lần độ dài cung lớn nhất
trong mạng). Chú ý rằng có thể áp dụng quá trình này cho các mạng vô hướng bằng
cách thay mỗi cạnh bằng hai cung có cùng độ dài. Ban đầu giả sử rằng l là dương hoàn
toàn; sau đó giả thiết này có thể được thay đổi.

Phần lớn các mạng chuyển mạch gói sử dụng các thuật toán khác nhau của
phương pháp chọn tuyến đường ngắn nhất do lớp mạng thực hiện. Một số mạng chọn
tuyến theo cách thức tập trung, thiết lập đường dẫn giữa nút nguồn và nút đích ở trung
tâm điều hành mạng NMC (Network Management Center) hay trung tâm điều khiển
chọn tuyến RCC (Routing Control Center) rồi sau đó phân phối các thông tin chọn
tuyến đến tất cả các nút chuyển mạch trong mạng. Các nút mạng khác sử dụng cách
thức phi tập trung hay còn gọi là cách thức phân bố, từng nút trao đổi thông tin chọn
tuyến và giá thành với các nút khác trong mạng trên cơ sở tương tác cho đến khi các
bảng định tuyến đáp ứng được yêu cầu định tuyến ngắn nhất.
2.Thuật toán Dijkstra:
Tất cả các thuật toán tìm đường đi ngắn nhất đều dựa vào việc lồng nhau giữa
các đường đi ngắn nhất nghĩa là một nút k thuộc một đường đi ngắn nhất từ i tới j thì
đường đi ngắn nhất từ i tới j sẽ bằng đường đi ngắn nhất từ i tới k kết hợp với đường đi
ngắn nhất từ j tới k. Vì thế chúng ta có thể tìm đường đi ngắn nhất bằng công thức đệ
quy sau:

d = (d + d)

Hình 2. Các đường đi ngắn nhất lồng nhau.

Dxy là độ dài của đường đi ngắn nhất từ x tới y. Khó khăn của cách tiếp cận
này là phải có một cách khởi động đệ quy nào đó vì chúng ta không thể khởi động với
các giá trị bất kỳ ở vế phải của phương trình trên.

Thuật toán Dijkstra phù hợp cho việc tìm đường đi ngắn nhất từ một nút i tới tất
cả các nút khác. Bắt đầu bằng cách thiết lập

d = 0 và d =   i ≠ j

Sau đó thiết lập

d  l  j là nút kề cận của i

Sau đó tìm nút j có d là bé nhất. Tiếp đó lấy chính nút j vừa chọn để khai triển
các khoảng cách các nút khác, nghĩa là bằng cách thiết lập

d  min (d, d + l)

Tại mỗi giai đoạn của quá trình, giá trị của d là giá trị ước lượng hiện có của
đường đi ngắn nhất từ i tới k, và thực ra là độ dài đường đi ngắn nhất đã được tìm cho
tới thời điểm đó. Xem d như là nhãn trên nút k. Quá trình sử dụng một nút để triển
khai các nhãn cho các nút khác gọi là quá trình quét nút.

Thực hiện tương tự, tiếp tục tìm các nút chưa được quét có nhãn bé nhất và quét
nó. Chú ý rằng, vì giả thiết tất cả các l đều dương do đó một nút không thể gán cho nút
khác một nhãn bé hơn chính nhãn của nút đó. Vì vậy, khi một nút được quét thì việc
quét lại nó nhất thiết không bao giờ xảy ra. Nếu nhãn trên một nút thay đổi, nút đó
phải được quét lại.
Ví dụ: xét mạng như hình sau, trên mỗi đường ghép nối có các trọng số tương
ứng với giá thành của từng đường, để đơn giản ta coi các trọng số này theo cả hai
chiều là như nhau, mặc dù trên thực tế chúng có thể khác nhau về giá trị. Để chọn
được đường dẫn ngắn nhất từ một nguồn tới tất cả các nút trong mạng, đòi hỏi phải có
kiến thức về cấu hình tổng thể của mạng (danh sách các nút và các ghép nối giữa
chúng) cũng như giá thành của từng đường nối. Điều đó dẫn tới việc tính toán tập
trung dựa trên thông tin đầy đủ lưu trong các cơ sở dữ liệu trung tâm (Central
Database).

Hình 3. Ví dụ một mạng.


Thuật toán được thực hiện theo từng bước, xây dựng mô hình cây đường ngắn
nhất (Shortest Path Tree) có gốc tại nút nguồn (nút 1). Các đường dẫn ngắn nhất tới k
nút khác được tính toán trong k bước, chúng được tập hợp lại trong tập N.
Coi D(v) là khoảng cách (tổng của các trọng số đường nối dọc theo đường dẫn)
từ nút nguồn 1 tới nút v. Coi l(i,j) là giá thành đã cho giữa 2 nút i và j. Thuật toán gồm
2 bước:
1.Bước khởi đầu
Đặt N={1} (tập N ban đầu chỉ gồm duy nhất 1 nút), với mỗi nút v  N đặt
D(v)=l(l,v), với các nút không nối trực tiếp với nút l ta coi giá thành bằng  .
2.Bước lặp
Tìm nút w không thuộc N sao cho D(w) là tối thiểu và bổ sung w vào tập N.
Sau đó thay D(v) cho toàn bộ các nút không thuộc N còn lại bằng cách tính:
D(v)  min[D(v),D(w) + l(w,v)]
Bước này được lặp lại cho đến khi tất cả các nút đều có trong N.
Sau khi thực hiện, ta lần lượt có được các bước mô tả bởi bảng thống kê sau:
Bước Tập N D (2) D (3) D (4) D (5) D (6)
0 {1} 2    5

1 {1,2} 2 3   3

2 {1,2,3} 2 3 4 5 3

3 {1,2,3,6} 2 3 4 5 3

4 {1,2,3,6,4} 2 3 4 5 3

5 {1,2,3,6,4,5} 2 3 4 5 3

Mô hình cây đường đi ngắn nhất nếu lấy nút 1 làm nút nguồn có thể mô tả như
hình vẽ sau:

Hình 4.Mô hình đường dẫn ngắn nhất.

Đích Nút tiếp theo

2 2

3 3

4 4

5 5

6 3

Hình 5.Bảng chọn tuyến cho nút 1.

Với thuật toán này ta có thể tính được các tuyến đường có đường dẫn ngắn nhất
cho từng nút, cụ thể ta coi nút đó là nút nguồn rồi thực hiện các bước giải thuật kể trên.
Trong trường hợp chọn tuyến theo phương thức tập trung, NMC sẽ gửi các bảng chọn
tuyến cho từng nút một sau khi đã thiết lập xong, còn nếu mạng sử dụng phương thức
phân bố thì từng nút phải tính lấy bảng định tuyến, cùng sử dụng các thông tin tổng thể
như trên (được cung cấp bởi các nút lân cận hoặc bởi NMC) và chọn ra cây đường dẫn
cho riêng nó.

III. Mô phỏng
1. Ý tưởng giả thuật
Dựa trên giải thuật Dijkstra, nhóm em sẽ mô phỏng lại cách hoạt động
của giải thuật bằng ngôn ngữ C++ thông qua các bước dưới đây:

Step 1: Khởi tạo khoảng cách của tất cả các đỉnh là vô hạn.

Step 2: Tạo một tập hợp trống. Mỗi mục của bộ là một cặp (trọng số, đỉnh).
Trọng số (hoặc khoảng cách) được sử dụng để so sánh hai cặp.

Step 3: Chèn đỉnh gốc vào tập hợp và tạo khoảng cách bằng 0.

Step 4: Trong khi Set không trống:

a) Trích xuất khoảng cách tối thiểu của đỉnh. Cho đỉnh được trích xuất là
u.

b) Vòng qua tất cả các lân cận của u và làm như thế cho mọi đỉnh v.

Nếu dist [v]> dist [u] + weight (u, v)

(i) Cập nhật khoảng cách của v, tức là:

dist [v] = dist [u] + weight (u, v)

(ii) Nếu v được đặt, cập nhật khoảng cách của nó bằng cách xóa nó
trước, sau đó chèn với khoảng cách mới

(iii) Nếu v không có trong bộ, thì chèn nó với khoảng cách mới

Step 5: In mảng khoảng cách dist [] để in tất cả các khoảng cách ngắn nhất

2. Code minh họa


#include<bits/stdc++.h>

using namespace std;

# define INF 0x3f3f3f3f

class Graph{
int V;

list< pair<int, int> > *adj;

public:

Graph(int V); // Constructor

void addEdge(int u, int v, int w);

void shortestPath(int s);

};

Graph::Graph(int V){

this->V = V;

adj = new list< pair<int, int> >[V];

void Graph::addEdge(int u, int v, int w){

adj[u].push_back(make_pair(v, w));

adj[v].push_back(make_pair(u, w));

void Graph::shortestPath(int src){

set< pair<int, int> > setds;

vector<int> dist(V, INF);

setds.insert(make_pair(0, src));

dist[src] = 0;

while (!setds.empty()){

pair<int, int> tmp = *(setds.begin());

setds.erase(setds.begin());

int u = tmp.second;

list< pair<int, int> >::iterator i;


for (i = adj[u].begin(); i != adj[u].end(); ++i) {

int v = (*i).first;

int weight = (*i).second;

if (dist[v] > dist[u] + weight){

if (dist[v] != INF)

setds.erase(setds.find(make_pair(dist[v], v)));

dist[v] = dist[u] + weight;

setds.insert(make_pair(dist[v], v));

printf("Vertex Distance from Source\n");

for (int i = 0; i < V; ++i)

printf("%d \t\t %d\n", i, dist[i]);

int main(){

int V = 9;

Graph g(V);

g.addEdge(0, 1, 4);

g.addEdge(0, 7, 8);

g.addEdge(1, 2, 8);

g.addEdge(1, 7, 11);

g.addEdge(2, 3, 7);

g.addEdge(2, 8, 2);

g.addEdge(2, 5, 4);
g.addEdge(3, 4, 9);

g.addEdge(3, 5, 14);

g.addEdge(4, 5, 10);

g.addEdge(5, 6, 2);

g.addEdge(6, 7, 1);

g.addEdge(6, 8, 6);

g.addEdge(7, 8, 7);

g.shortestPath(0);

return 0;

3. Kết quả mô phỏng


Vertex Distance from Source
0 0
1 4
2 12
3 19
4 21
5 11
6 9
7 8
8 14
4. Nhận xét
Độ chính xác của mô phỏng: đạt yêu cầu, mô phỏng chính xác và đạt được
những kết quả như kì vọng ban đầu.
Độ phức tạp về thời gian: Thiết lập trong C++ thường được thực hiện bằng cách
sử dụng cây tìm kiếm nhị phân tự cân bằng. Do đó, độ phức tạp thời gian của các hoạt
động tập hợp như chèn, xóa là logarit và độ phức tạp thời gian của giải pháp trên là O
(ELogV)).

You might also like