3.3. Đường đi trong đồ thị

3.3.1. Định nghiã đường đi. 3.3.2. Tính liên thông. 3.3.3. Chu trình Euler và đường đi Euler. 3.3.4. Tìm đường đi ngắn nhất.

Oct 1, 2010 3.3. Đường đi trong đồ thị 1

3.3.4. Tìm đường đi ngắn nhất

 Đồ thị có trọng số  Định nghĩa 1.

Đồ thị vô hướng (có hướng) G =(V,E) được gọi là đồ thị có trọng số  nếu mỗi cạnh (cung) e˛ E được đặt tương ứng với một số thực  w(e). Số thực w(e) được gọi là trọng số của cạnh (cung) e.

 Định nghĩa 2.

Ma  trận  trọng  số  của  đơn  đồ  thị  G  =(V,E)  là  ma  trận  W=[wi,k]

trong đó

wi,k là trọng số của cạnh (cung) nối đỉnh thứ i với đỉnh thứ k

(nếu có);

nếu không có cạnh (cung) nối đỉnh thứ i với đỉnh thứ

wi,k=¥ k.

Oct 1, 2010 3.3. Đường đi trong đồ thị 2

3.3.4. Tìm đường đi ngắn nhất

 Theo định nghiã trên:

 các phần tử của ma trận trọng só có thể là các số âm.   Một đơn đồ thị bất kỳ cũng có thể xem là đồ thị có trọng số nếu  mỗi cạnh (cung) đều gắn trọng số là 1 (như định nghĩa đường đi  độ  dài  1  trong  mục  trước)  và  khi  đó  ma  trận  trọng  số  chính  là  ma trận 0­1.

 Ví dụ:

 xét  một  mạng  hàng  không,  khi  đó mạng  này  có  thể  coi  là  các

đồ thị có trọng số với các kiểu trọng số sau đây:

 Độ dài cung đường bay  Giá cước vận chuyển cho một đơn vị vận chuyển  thời gian thực hiện chuyến bay giữa hai sân bay

Oct 1, 2010 3.3. Đường đi trong đồ thị 3

3.3.4. Tìm đường đi ngắn nhất

Ví dụ:

Ma trận trọng số của đồ thị trên là

=

W

0 15 20 0 20 14

15 0 11 18 0 24

20 11 0 13 22 0

0 18 13 0 16 21

20 0 22 16 0 12

14 24 0 21 12 0

ø Ø œ Œ œ Œ œ Œ œ Œ œ Œ œ Œ œ Œ œ Œ ß º

Oct 1, 2010 3.3. Đường đi trong đồ thị 4

3.3.4. Tìm đường đi ngắn nhất

 Bài toán được đặt ra là:

 tìm đường đi ngắn nhất trong đồ thị có trọng số G  =(V,E) từ

đỉnh x đến đỉnh y cho trước.

 Ý tưởng giải thuật là:

 ta  sẽ  lần  lượt  duyệt  và  xác  định  độ  dài  của  đường  đi  ngắn  nhất từ đỉnh x đến các đỉnh lân cận, cho đến khi đỉnh đích y  được duyệt.

 Ở  mỗi  bước  duyệt,  mỗi  đỉnh  v  sẽ  được  gắn  nhãn,  là  cặp

(l(v);t(v)) trong đó:

 l(v)  là  độ  dài  của  đường  đi  tìm  được  từ  đỉnh  đầu  x  đến  đỉnh  v

cho đến thời điểm đang xét;

 t(v) là đỉnh trước đỉnh v trong đường đi đó.

Oct 1, 2010 3.3. Đường đi trong đồ thị 5

3.3.4. Tìm đường đi ngắn nhất

 Từ đó ta có thuật toán sau đây Dijkstra (Hà lan­1930­2002):

V,

 Bước khởi đầu: Với mọi đỉnh v ˛ l(v):= ¥

; {S là tập đỉnh đã được duyệt}

L(x):=0; {độ dài đường đi từ x đến x bằng 0} S:=˘  Bước lặp:

Khi yˇ S thực hiện:

; t(v):=‘’;

{u};

Tìm u trong tập các đỉnh chưa được duyệt (u˛ V\S) sao cho l(u) bé nhất; S:=S¨ Với mọi đỉnh v thuộc tập các đỉnh chưa được duyệt và có cạnh (cung) từ u đến

v, thực hiện

Nếu l(u) + wuv < l(v) thì

l(v):= l(u) + wuv ; t(v):=u;

Oct 1, 2010 3.3. Đường đi trong đồ thị 6

3.3.4. Tìm đường đi ngắn nhất

A3      ¥

A4      ¥

A6      ¥

 Ví dụ: Tìm đường đi ngắn

Bước  khởi đầu

nhất từ A1 đến A4

A1          0 0

A2      ¥ 15,A1 20,A1

A5      ¥ 20,A1 14, A1

0

15,A1 20,A1 35,A6 20,A1 14, A1

0

15,A1 20,A1 33,A2 20,A1 14, A1

0

15,A1 20,A1 33,A2 20,A1 14, A1

0

15,A1 20,A1 33,A2 20,A1 14, A1

0

15,A1 20,A1 33,A2 20,A1 14, A1

¥

Bước 1 A1 Bước 2 A6 Bước 3 A2 Bước 4 A3 Bước 5 A5 Bước 6 A4

Oct 1, 2010 3.3. Đường đi trong đồ thị 7

3.3.4. Tìm đường đi ngắn nhất

 Giới thiệu chương trình

2

4

6

8

1

6

1

2

5 3 7

9

3

5

4

Oct 1, 2010 3.3. Đường đi trong đồ thị 8

3.3.4. Tìm đường đi ngắn nhất

 Edsger Wybe Dijkstra

 (sinh ngày 11 tháng 5, 1930 tại Rotterdam  – mất ngày 6 tháng 8, 2002 tại Nuenen).

 Là nhà khoa học máy tính Hà Lan.   Ông được nhận giải thưởng Turing cho các  đóng  góp  có  tính  chất  nền  tảng  trong  lĩnh  vực ngôn ngữ lập trình.

 Không lâu trước khi chết, ông đã được nhận  giải  Bài  báo  ảnh  hưởng  lớn  trong  lĩnh  vực  tính  toán  phân  tán  của  ACM  dành  cho  bài  báo  đã  khởi  đầu  cho  ngành  con  Self­ stabilization.

 Sau  khi  ông  qua  đời,  giải  thưởng  thường  niên này đã được đổi tên thành giải thưởng  ACM Edsger W. Dijkstra.

Edsger Dijkstra  (ảnh của Brian Randell)

Oct 1, 2010 3.3. Đường đi trong đồ thị 9