1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đề tài thuật toán gán nhãn Đồ thị và lập trình tìm Đường Đi ngắn nhất bằng thuật toán disjstra

35 0 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 35
Dung lượng 4,68 MB

Nội dung

Bằng hình vẽ ta có thể biêu điễn mỗi đỉnh của đồ thị bởi một điểm trên mặt phẳng, mỗi cạnh bởi một đường nối hai điểm tương ứng hai đỉnh.. Bậc của đỉnh Với mỗi đỉnh v của đồ thị, ta định

Trang 1

BAO CAO HOC THUAT

Đề tài: Thuật toán gán nhãn đề thị và lập trình tìm đường đi

ngăn nhất băng thuật toán Disjstra

Người thực hiện: Nguyễn Tuấn Anh

Bộ môn: Mạng máy tính — Khoa Công nghệ thông tin

Hà nội- 6/2022

Trang 2

MỤC LỤC

1.1 ĐỊNH NGHĨA ĐÔ THỊ VÀ CÁC KHÁI NIỆM - 5-52 S222 2ESErrcrerrrrrrerree 4

1.1.3 Đỉnh kề .Ă 2.22Q2.2.H.S.HH HH Heo 5

1.1.4 Cạnh liên thUỘC .- C01 Q 1Q n nọ nh ng ng cv vs 5 1.1.5 Bậc của đỉnh cọ HH HH TH ng gu KH kg 5

1.2 ĐƯỜNG ĐI VÀ CHU TRÌNH 2 2S 2212122 221212181111 2121 1011211111111 erreg 6

Non 6 I2 ti ThhkdđadđaiaŨ 6

1.2.4 Đơn đồ thị, đa đồ thị và đồ thị COF - 222221212 SH 1x re go 6

2.1.BIEU DIEN DO THI BANG MA TRAN KE ccccccccsssescssecesesescesescscsesreseseateceseseseeneess 9 2.2 BIÊU DIỄN ĐỒ THỊ BẰNG DANH SÁCH CẠNH -0- 2c 0S crrrerererree 12 2.3 BIÊU DIỄN ĐÔ THỊ BẰNG DANH SÁCH LÂN GẬN KÈ 2-7 75255: 16

3.1.KHÁI NIỆM VỀ ĐƯỜNG ĐI VÀ ĐƯỜNG ĐI NGẮN NHÁT 5 525552 19 3.2 THUAT TOAN GAN NHAN BO THI GIAI BÀI TOÁN 1 -c-c- s52 20 3.3 THUAT TOAN DIJKSTRA GIAI BAI TOAN 2 ccccssssestesestescssescsnesesnsseessseeseseensseenss 25

Trang 3

LỜI NÓI ĐẦU

Trong thực tế có rất nhiều bài toán liên quan tới một tập các đối tượng và

những mối liên hệ giữa chúng, đòi hỏi toán học phải đặt ra mô hình biểu diễn một

cách chặt chẽ và tổng quát bằng ngôn ngữ ký hiệu Những ý tưởng cơ bản của đồ thị được đưa ra từ thế ky thi XVIII boi nha todn hoc Thuy Si Leonhard Euler tu

mô hình đồ thị đề giải bài toán về những cây câu Kũnigsburg nỗi tiêng

Lý thuyết đỗ thị đã được khoa học phát triển từ rất lâu và ngày càng có nhiều ứng dụng Đến ngày nay, với sự ra đời của máy tính điện tử và sự phát triển nhanh chóng của tin học, Lý thuyết đồ thị cảng được quan tâm nhiều hơn, các thuật toán trên đồ thị đã có nhiều ứng dụng trong nhiều lĩnh vực khác nhau như: mạng Máy tính, Đồ hoạ máy tính, Lý thuyết mã, Tối ưu hoá, Kinh tế học

Trang 4

CHƯƠNG 1- KHÁI NIỆM VÀ CÁC DẠNG ĐỒ THỊ

1.1 ĐỊNH NGHĨA ĐỒ THỊ VÀ CÁC KHÁI NIỆM

1.1.1 Định nghĩa đồ thị

Một đồ thị G bao gồm một tập hợp hữu hạn V, mà mỗi phần tử được gọi là

đỉnh (hoặc nút) và một tập hợp E gồm các cặp hai đỉnh u và v đạng e = (u, v) Ký hiệu đồ thị G là G = (V, E)

Tập V là hữu hạn, có nghĩa là ta có thê đánh số thứ tự là 1, 2, 3, hoặc a, b, c, cho các phân tử (hay các đỉnh) của V Ta quy ước khi nói đến đỗ thị G thì số đỉnh của đồ thị là n, số cạnh (hay cung) m tức là |V| = n, |E|= m

1.1.2 Đồ thị có hướng và không có hướng

Giá sử u và v là hai đỉnh của đồ thị G = (V, E), nếu cặp

(u, v) e E có kế đến thứ tự u là đỉnh đầu, v là đỉnh cuối thì ta gọi đó là đồ thị có hướng, khi đó mỗi e = (u, v) được gọi là cung (hình 1.1)

SS

Yh Hình 1.1 Đồ thị có hướng

Ngược lại ta gọi đó là đồ thị vô hướng (hay đồ thị không có hướng) và (u, v) gọi là cạnh nối đỉnh u, v và cũng ky higu 1a e = (u, v) € E (hình 1.2)

POF

Hình 1.2 Đồ thị vô hướng

Trang 5

Bằng hình vẽ ta có thể biêu điễn mỗi đỉnh của đồ thị bởi một điểm trên mặt

phẳng, mỗi cạnh bởi một đường nối hai điểm tương ứng hai đỉnh Với đồ thị có

hướng ta thêm vào cạnh một mũi tên hướng tử đỉnh đầu tới đỉnh cuối

NếuueV,veVvàe= (u, v) e E ta nói rằng u, v là 2 đỉnh kề nhau và cạnh

e liên thuộc với đỉnh u và đỉnh v Ví dụ cạnh (1, 5) trong hình 1.2 là cạnh liên thuộc với đỉnh I và đỉnh 5

1.1.5 Bậc của đỉnh

Với mỗi đỉnh v của đồ thị, ta định nghĩa bậc (degree) của đỉnh v ký hiệu

deg(v) là số cạnh liên thuộc với v hoặc là số đỉnh kề của v Trên đồ thị hình 1.2 thi

Hệ quả: Trong đồ thị vô hướng, số đỉnh bậc lẻ là một số chăn

Đối với mỗi đồ thị có hướng G = (V, E), xét một cung ee E, nếu e= (u, v) thì

fa nói u nỗi tới v và v nôi từ u, cung e là ổi ra khỏi u và đi vào v Đỉnh u khi đó là đỉnh đâu, đỉnh v được gọi là đỉnh cuỗi của cung e

Bán bậc ra và bán bậc vào

— Bán bậc ra là số cung đi ra từ đỉnh v, ký hiệu deg*(v)

— Bán bậc vào là số cung đi vào đỉnh v: ký hiệu đeg(v)

— Trong hình 1.1 thì bán bậc vảo đỉnh 4 là 1 và bán bậc ra là 2

deg*(4) = 2;

deg (4) = 1

Trang 6

Dinh ly: >, deg'(v) =>) deg (v)

v được gọi là đỉnh cuối

Trong trường hợp u = v, người ta nói rằng ơ(u, v) là đường đi khép kín Nếu đường đi œ(u, v), mỗi cạnh (cung) có mặt không quá một lần thì được gọi là đường

Đồ thị G mà mỗi cạnh của nó đều được gắn với một số không âm, thể hiện thông tin liên quan tới cạnh đó, gọi là đồ thị có trọng số Nói cách khác đồ thị có trọng số nêu có ánh xạ f: E—> Rẻ; trong đó E là tập cạnh, R* là tập số thực không

am w= f(u, v) goi la trong số của cạnh (u, v) eE

Đề thị mà mỗi cạnh không được gắn trọng số thì ta gọi đó là đồ thị không có

trọng SỐ

Trọng số của đồ thị được mở rộng tự nhiên cho dé thi có hướng

1.2.4 Đơn đồ thị, đa đồ thị và đồ thị con

e Đơn đồ thị

Trang 7

Đơn đồ thị là đồ thị vô hướng G = (V, E) bao gồm V là tập các đỉnh, và E là

tập các cạnh thỏa mãn không có hai cạnh có chung cả hai đỉnh (không có cạnh lặp)

(Sy Hình 1.4.Đơn đồ thị

© Da do thi

G =(V, E) bao gồm V là tập các đỉnh, và E là tập các cạnh trong đó một cặp

(không có thứ tự) hai phần tử khác nhau của V có thể xác định nhiều cạnh Hai

cạnh e¡ và e2 được gọi là cạnh lặp nếu chúng củng tương ứng với một cặp đỉnh; ví

du (3, 5) va (5, 3), hình 1.5

Hinh 1.5 Da dé thi

Chú ý: Khi G là đa đồ thị, dãy các đỉnh trong định nghĩa đường đi có thể xác định nhiều đường đi khác nhau Trong trường hợp đó, đường đi xác định bằng dãy các cạnh sẽ rõ ràng hơn

4)} là đồ thị con của đô thi

G bởi vìWCcV,FcE

Hình 1.6 Đồ thị con của một đỏ thị

Trang 8

Cho G = (V, E) ; tập Vị C V Đồ thị con có tập đỉnh Vị và tập cạnh chứa tat ca các cạnh của G nối hai đỉnh thuộc Vị gọi là đồ thị con sinh bởi VỊ

Chú ý: Thuật ngữ đồ thị trong mỗi ngữ cảnh để ngắn gọn và cũng không gây nhằm lẫn có thể được hiểu là đơn đồ thị, đồ thị vô hướng hay đồ thị có hướng

Trang 9

CHƯƠNG 2-BIẾU DIEN ĐỒ THI TREN MAY TÍNH

Người ta có thê biểu diễn đồ thị trên mặt phẳng dưới dạng các điểm ứng với các đỉnh và các đường nỗi chúng với nhau ứng với các cạnh Để sử dụng máy tính

giải các bài toán được mô tả bởi mô hình đồ thị người ta phải tìm cách khác để mô

tả đồ thị Việc lựa chọn các cấu trúc đữ liệu khác nhau để mô tả đồ thị trên máy tính phụ thuộc vào bài toán cần giải và thuật toán được lựa chọn Trong chương

này chúng ta xem xét đồ thị G = (V, E) với |V| = n, |E| = m (n: số đỉnh, m: số cạnh)

2.1.BIEU DIEN DO THI BANG MA TRAN KE

Cho dé thi G = (V, E) c6 tap dinh V = {v1, v2, Va} và tập các cạnh E, ma

trận kề của đồ thị là ma trận vuông À kích thước nxn (có n hàng và n cột), gồm các

Ma trận kê có một số tính chat sau:

— Ma trận kề của dé thị vô hướng là đối xứng

— Ma trận kề của đồ thị có hướng nói chung không có tính đối xứng

— a¡ = Ö với mọi 1= Ì, 2, , n

— Tông các giá trị trên hàng ¡ (hay cột j) bằng bậc của đỉnh v¡ (hay vị) của đồ thị

vô hướng.

Trang 10

Có thể hiểu đồ thị G = (V, E) như là đồ thị có trọng số và trọng số f(u, v) =l nếu (u, v) e E và {u, v)=0 trong trường hợp ngược lại, khi đó với đỗ thị có trọng

số ta có thé lập ma trận trọng số tương tự ma trận kề với aj = Í(v¡, Vị) — trọng số cung (vị, vị) nếu cung (vị, vị) e E và aj= ^ trong trường hợp ngược lại ở đây ^ là giá trị được chọn tuy theo từng trường hợp cụ thể Với hình 1.4 thì ta có ma trận trong số biểu diễn sơ đồ đường sắt Bắc Nam như sau:

5000 bởi vì thực tế chiều đài lãnh thổ của nước ta cũng chỉ khoảng hơn 2000 km

từ Bắc vào Nam và gán a¡ = 0 cho biết không có cung (vị, v¡), hay khoảng cách vị dén v; 1a 0

Với bài toán này ta cũng sẽ lưu số liệu vào tệp tin là dothi14.inp

hướng, ví dụ đỗ thị hình 2.3 sẽ được lưu số liệu vào tệp tin dothi23.inp

Hình 2.3 Đồ thị có hướng không trọng số

Trang 11

đồ thị có hướng, ví dụ đồ thị hình 2.3 sẽ được lưu số liệu vào tệp tin dothi25.inp

Trang 12

2.2 BIỂU DIỄN ĐỒ THỊ BẰNG DANH SÁCH CẠNH

Trong trường hợp G = (V, E) là đồ thị thưa ta có thể biêu diễn đồ thị bởi danh

sách cạnh Các cạnh của đồ thị được sắp xếp theo một thử tự nào đó dạng (u, v) trong đó u là đỉnh đâu, v là đỉnh cuối

Hình 2.8 Đồ thị vô hướng không có trọng số

Ví dụ, danh sách cạnh của đồ thị vô hướng không có trọng số cho trong hình

2.9, được biểu diễn như bảng sau:

Danh sách cạnh biểu diễn của đồ thị trên hình 2.9

int dau,cuoi; // đau: đỉnh đầu của cạnh

/ cuoi: đỉnh cuối của cạnh

Trang 13

Với đồ thị hình 2.9, ta cũng sử dụng Notepad để soạn thảo tệp đữ liệu đưới

(n = 4) và thành phần thứ hai là số 5 cho biết đồ thị có 5 cạnh

(m = 5) Các dòng còn lại, tại mỗi dòng cho biết thành phản thứ nhất là số hiệu

đỉnh đầu, và thành phần thứ hai là số hiệu đỉnh cuối của mỗi cạnh tương ứng trong

Trang 14

Đôi với đồ thị có hướng không có trọng so ta van su dung câu trúc dữ liệu như

đồ thị vô hướng không có trọng số, đô thị có hướng và có trọng sô ta sử dụng câu trúc dữ liệu như đồ thị vô hướng có trọng sô

Hình 2.12 Đồ thị có hướng không có trọng số

Xét đồ thị có hướng không trọng số như đồ thị hình 2.13, chúng ta cũng biểu

diễn dưới dạng danh sách cạnh của nó là:

Trang 15

Chúng ta sẽ xây dựng chương trình để đọc và hiển thị danh sách cạnh của đồ

thị được lưu trong tệp tin dothi213.inp như sau:

Trang 16

printf("\nDo thi G co %d dinh va %d canh\n",n,m);

printf(\nSTT Dau Cuoi\n");

for(i = 1; i<= m; i++)

printf("%3d %3d %3d\n", (i+1), Efi].dau, Efi].cuoi);

Hình 2.14 Chạy chương trình vidu22.cpp

2.3 BIEU DIEN DO THI BANG DANH SACH LAN CAN KE

Cho dé thi G=(V, E), v6 hướng và không có trọng số như sau:

Cy)

We

©)

Hình 2.15 Đồ thị vô hướng không có trọng số

Trong cách biểu diễn này mỗi đỉnh v tương ứng với một danh sách N(v) các

đỉnh kể với nó, tức là

N(v) = {w e V: (v, w) e E}, Ký hiệu N(x) thường được sử dụng

để nói lên lực lượng của đại lượng x

Trang 17

Trong ví dụ thuộc hình 2.16 danh sách kể được mô tả như trong bảng dưới đây

Danh sách lần cận của các đỉnh trong đồ thị hình 2.16 là:

kể của mỗi đỉnh trong đô thị để đánh dấu hết đỉnh kề của đỉnh tương ứng, ví dụ

đỉnh 1 có các đỉnh kề là 2, 3, 6 thì ta thêm số 0 vào cuối để mỗi khi chương trình

đọc sẽ kiểm tra xem đã hết các đỉnh kề của đỉnh l chưa, thực chất của việc làm này là đo ta sử dụng tệp tin văn bản đề lưu trữ, mà cách đọc của ngôn ngữ lập trình

€ đối với tệp tin văn bản là đọc tuần tự đến hết tệp thì thôi chứ không đọc từng khối như cách đọc tệp tin nhị phân

17

Trang 18

Trong bảng này cho ta biết đỉnh 1 có các đỉnh kề là 2, 3 và 6; đỉnh 2 có các đỉnh kề là 1, 3 và 4 Với cách biêu diễn này ta khai báo cầu trúc đữ liệu cho mỗi

đỉnh là một nút của danh sách liên kết đơn Khai báo một mảng con trỏ các nút đề lưu các danh sách mà mỗi phần tử của mảng sẽ trỏ đến nút đầu tiên của các danh

sách liên kết này; đanh sách thứ ¡ lưu những đỉnh kể của đỉnh ¡

typedef struct Dinh

{

int tendinh;

Dinh *next;

Dinh *DC[MAX]; // MAX = 100 là hằng số cho trước

Cấu trúc dữ liệu kiểu này được gọi là danh sách tổng quát Chúng ta thấy rằng trong ngôn ngữ lập trình C thì chỉ số của phần tử đầu tiên của mảng là 0, nhưng chúng ta cũng có thể bắt đầu từ chỉ số là 1, trong trường hợp lấy chỉ số của mảng

bắt đầu là 1 thì chúng ta phải khai báo mảng có kích thước phù hợp với yêu cầu

của bài toán

Đối với đồ thị vô hướng có trọng số, đồ thị có hướng không trọng số và đồ thị

có hướng có trọng số thì chúng ta cũng có thê xây dựng cấu trúc đữ liệu kiểu danh sách lân cận đề lưu trữ và xử lý

Sau đây chúng ta sẽ xây dựng chương trình nhập đữ liệu cho đồ thị từ tệp tin

và hiển thị danh sách lân cận, lưu đồ thị trong hình 2.16 và hình ảnh lưu trữ của nó

được minh hoạ trong hình 2.17, mảng DC sẽ lấy chỉ số 1 là phần tử đầu tiên của mảng (cách lấy này để cho việc cài đặt và xử lý cho tự nhiên theo số hiệu các đỉnh

bởi vì ta lay số hiệu đỉnh bắt đầu là 1) Vì đồ thị có n đỉnh, cho nên chúng ta sẽ có

n danh sách liên kết đơn, danh sách thứ ¡ lưu các đỉnh kề của đỉnh thứ ¡ trong đồ

thị, vì vậy chúng ta sẽ phải viết các hàm thao tác trên danh sách liên kết đơn như

hàm void themvaodanhsachúnt x, Dinh **L): có tác dụng thêm một nút có nội

dung là x vào cuối danh sách liên kết đơn được quản lý bởi con trỏ L, ham hién thi danh sách void hienthidanhsach(Dinh *L): dùng để hiển thị danh sách được quản

Trang 19

CHƯƠNG 3- ĐƯỜNG ĐI NGẮN NHẤT

3.1.KHÁI NIỆM VỀ ĐƯỜNG ĐI VÀ ĐƯỜNG ĐI NGẮN NHẤT

Trong thực tế cuộc sống, do thói quen người ta thường vẽ lên giấy những điểm biểu thị cho các cá thể, các khu dân cư, các đơn vị hành chính, các nút giao thông và nối các điểm đó với nhau bằng những nét vẽ hoặc những mũi tên đặc trưng cho mối liên hệ nào đó Các sơ đồ này đùng ở khắp mọi nơi với các tên gọi khác nhau Trong kinh tế gọi đó là sơ đồ tô chức Trong giao thông vận tải gọi đó

là mạng giao thông Chính D.Konig là người đầu tiên đề nghị gọi các sơ đồ đó là

“đồ thị", đồng thời đề n ghị nghiên cứu một cách có hệ thống các tính chất của nó Rất nhiều ngành khoa học khác nhau sử dụng những khái niệm định lý, hệ quả, bỗ đề của Lý thuyết đồ thị đê đưa vào xây dựng các ứng dụng trong ngành của mình Điều này càng chứng tỏ “Lý thuyết đồ thị" có rất nhiều ứng dụng trong

xã hội Đề có thể áp dụng vào các lĩnh vực khác nhau, Lý thuyết đồ thị đã được hình thức hoá với nhiều khái niệm, định lý được định nghĩa một cách trừu tượng nhưng vẫn giữ được mỗi quan hệ với những đồ thị thực tế Trong chương này chúng ta cũng sẽ nghiên cứu một số thuật toán tìm đường đi ngắn nhất trên đồ thị

f: E — R+ và đỉnh ueV Đường ổi của từ đỉnh u đến đỉnh v được thê hiện bằng:

U =€I, ©2, ,em = V

hay u = (1, U2), (U2, U3), (Ui-1, Ui), ,(Un-1, Un), (Un, V) Va

M= Df E)= Df Ua)

u 1A tong trong sé cua cdc canh trén duong di V6i moi x € V, hay tim đường

di œ*(u, x) ngắn nhất nối u với x Chúng ta có hai bài toán cần giải quyết, bài toán

một là tìm xem cần đi qua số cạnh là ít nhất dé đi được từ u đến v, bài toán hai là

cần tìm đường đi ngắn nhất (không quan tâm đến số cung đi qua) để đi được từ u đến v mà chỉ quan tâm đến độ dài đường đi (độ dài đường đi được tính bằng đơn

vị đo chiều đài) Để giải hai bài toán này chúng ta sẽ nghiên cứu hai thuật toán

“thuật toán gán nhãn đồ thị” và “thuật toán Dijkstra”

19

Ngày đăng: 11/12/2024, 16:26

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN