1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Tai lieu giao khoa chuyen tin quyen 2 bq phan 2 6391

128 0 0

Đ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

Chuyên ñề ðỒ THỊ ðường ñi ngắn 1.1 ðồ thị có trọng số Trong ứng dụng thực tế, chẳng hạn mạng lưới giao thông, người ta khơng quan tâm đến việc tìm đường hai địa điểm mà cịn phải lựa chọn hành trình tiết kiệm (theo tiêu chuẩn khơng gian, thời gian hay ñại lượng mà cần giảm thiểu theo hành trình) Khi người ta gán cho cạnh ñồ thị giá trị phản ánh chi phí qua cạnh cố gắng tìm đường mà tổng chi phí cạnh ñi qua nhỏ ðồ thị có trọng số ba A a8 8  A a8  ñồ thị,  hàm trọng số: M  ƒ ˜  ¦  Hàm trọng số gán cho cạnh  ñồ thị số thực  gọi trọng số (weight) cạnh Nếu cạnh  @8  ta ký hiệu @8   Tương tự đồ thị khơng trọng số, có nhiều cách biểu diễn đồ thị có trọng số máy tính Nếu ta sử dụng danh sách cạnh, danh sách kề hay danh sách liên thuộc, phần tử danh sách chứa thêm thông tin trọng số cạnh tương ứng Trường hợp biểu diễn ñơn ñồ thị gồm  ñỉnh, ta cịn sử dụng ma trận trọng số § 6ăâ 9.Y ủú ăâ l trng s ca cnh @8  Trong trường hợp @8  ª  tựy bi toỏn c th, ăâ s ủc gỏn mt giá trị đặc biệt để nhận biết @8  khơng phải cạnh (chẳng hạn gán ‘, hay C‘) ðường đi, chu trình đồ thị có trọng số định nghĩa giống trường hợp khơng trọng số, có khác độ dài đường khơng tính 113 số cạnh qua, mà tính tổng trọng số cạnh ñi qua ðộ dài ñường ñi B ñược ký hiệu B 1.2 ðường ñi ngắn xuất phát từ đỉnh Bài tốn tìm đường ngắn xuất phát từ ñỉnh (single-source shortest path) ñược phát biểu sau: Cho ñồ thị có trọng số A a8 8 , tìm đường ngắn từ ñỉnh xuất phát " a ñến tất đỉnh cịn lại đồ thị ðộ dài ñường ñi từ ñỉnh " tới ñỉnh , ký hiệu «"8 , gọi khoảng cách (distance) từ " đến  Nếu khơng tồn đường từ " tới  ta đặt khoảng cách ñó ‘ Có vài biến ñổi khác tốn tìm đường ngắn xuất phát từ đỉnh:    Tìm đường ngắn từ ñỉnh tới ñỉnh  cho trước Bằng cách ñảo chiều cung ñồ thị, quy tốn tìm đường ngắn xuất phát từ  Tìm đường ngắn từ ñỉnh " tới ñỉnh  cho trước Dĩ nhiên ta tìm đường ngắn từ " tới đỉnh khác tốn tìm đường ñi ngắn từ " tới  ñược giải Hơn nữa, chưa có thuật tốn tìm đường ngắn từ " tới  mà khơng cần quy tốn tìm đường ngắn từ " tới đỉnh khác Tìm đường ñi ngắn cặp ñỉnh ñồ thị: Mặc dù có thuật tốn đơn giản hiệu để tìm đường ngắn cặp ñỉnh, giải cách thực thuật tốn tìm đường ngắn xuất phát từ ñỉnh với cách chọn ñỉnh xuất phát a) C6u trúc toán t! t!i Fu Các thuật tốn tìm đường ngắn mà khảo sát dựa vào đặc tính chung: Mỗi ñoạn ñường ñường ñi ngắn phải ñường ñi ngắn ðịnh lý 1-1 Cho ñồ thị có trọng số A a8 8 , gọi B ¬( + 8 I ­ ñường ñi ngắn từ ( tới I , ñó với 8 bM N  N b N , ủon ủng B2đ ơ2 2K( 8 đ ­ ñường ñi ngắn từ 2 tới ® 114 Chúng ta thấy hầu hết thuật tốn tìm đường ngắn thuật tốn quy hoạch động (ví dụ thuật tốn Floyd) tham lam (ví dụ thuật tốn Dijkstra) tính chất toán tối ưu nêu ðịnh lý 1-1 Nếu đồ thị có chu trình âm (chu trình với độ dài âm) khoảng cách số cặp đỉnh khơng xác định, cách vịng theo chu trình số lần đủ lớn, ta đường hai đỉnh chu trình nhỏ số cho trước Trong trường hợp vậy, đặt vấn đề tìm đường đơn ngắn Vấn đề lại tốn NP-đầy đủ, chưa chứng minh tồn hay khơng thuật tốn đa thức tìm đường đơn ngắn đồ thị có chu trình âm b) Quy vE vE tốn "o kho khong cách Nếu đồ thị khơng có chu trình âm chứng minh ñược ñường ñi ngắn ñường ñi ñơn Khi ñó cần biết ñược khoảng cách từ " tới tất đỉnh khác ñường ñi ngắn từ " tới  tìm cách dễ dàng qua thuật tốn sau: Trước tiên ta tìm đỉnh ( d  để «"8  «"8 (   l(  Dễ thấy ln tồn đỉnh ( đỉnh ñó ñỉnh ñứng liền trước  ñường ñi ngắn từ " tới  Nếu ( " đường ngắn đường trực cung "8  Nếu khơng vấn đề trở thành tìm đường ngắn từ " tới ( Và ta lại tìm đỉnh + ª 68 ( để «"8 (  «"8 +   l+ …Cứ tiếp tục sau số hữu hạn bước xét tới ñỉnh I ", Ta có dãy  4 ( + I " khơng chứa đỉnh lặp lại Lật ngược thứ tự dãy cho ta ñường ñi ngắn từ " tới  " + (  c) Nhãn kho khong cách phép co Tất thuật tốn khảo sát để tìm đường ñi ngắn xuất phát từ ñỉnh ñều sử dụng kỹ thuật gán nhãn khoảng cách: Với ñỉnh  a, nhãn khoảng cách   ñộ dài đường từ " tới  Trong 115 trường hợp chưa xác ñịnh ñược ñường ñi từ " tới , nhãn   ñược gán giá trị ‘ Ban ñầu chưa xác ñịnh ñược ñường ñi từ " tới ñỉnh khác nên   ñược gán giá trị khởi tạo là:   ¯ 78  " —  8;8  ‘8  d " (1.1) procedure Init; begin for Lv V d[v] := +∞; d[s] := 0; end; Do tính chất nhãn khoảng cách, ta có   w «"8 8 L a Các thuật tốn tìm đường ngắn cực tiểu hóa dần nhãn  E    «"8 8 L a Trong thuật tốn mà khảo sát, việc cực tiểu hóa nhãn khoảng cách ñược thực phép co Phép co theo cạnh @8  , gọi tắt phép co @8  ñược thực sau: Giả sử ñã xác ñịnh ñược  @ ñộ dài ñường ñi từ " tới @, ta nối thêm cạnh @8  ñể ñược ñường ñi từ " tới  với ñộ dài  @  @8  Nếu đường có độ dài ngắn  , ta ghi nhận lại    @  @8  ðiều có nghĩa " ° @ nối thêm cạnh @8  lại ngắn ñường " °  có, ta hủy bỏ ñường ñi " °  ghi nhận lại ñường ñi " °  ñường ñi " ° @ G  "  @ @   l@8   Hình 2.1 Phép co Có thể hình dung hoạt ñộng phép co sau: Căng ñoạn dây ñàn hồi dọc theo ñường ñi " tới , ñoạn dây dãn tới ñộ dài   Tiếp theo ta thử lấy đoạn dây căng dọc theo ñường ñi từ " tới @ nối tiếp ñến  Nếu ñoạn dây bị chùng xuống (co lại) so với cách căng cũ, ta ghi nhận ñường ñi tương 116 ứng với cách căng mới, ñoạn dây khơng chùng xuống (hoặc căng thêm) ta giữ đoạn dây căng theo đường cũ Chính phép co khơng làm “dài” thêm  , ta nói   bị cực tiểu hóa qua phép co @8  Phép co @8  ñược thực hàm D , hàm nhận vào cạnh @8  trả True nhãn   bị giảm ñi qua phép co @8 : function Relax(e = (u,v)5 E): Boolean; begin Result := d[v] > d[u] + w(e); if Result then begin d[v] := d[u] + w(e); //cực tiểu hóa nhãn d[v] trace[v] := u; //Lưu vết ñường ñi end end; Mỗi   bị giảm xuống sau phép co @8 , ta lưu lại vết ! l  z @ với ý nghĩa ñường ñi ngắn từ " tới  thời ñiểm ñược ghi nhận ñường ñi qua @ trước ñi cung @8 , vết sử dụng để truy vết tìm đường thuật tốn kết thúc d) M8t s! s! tính ch6 ch6t quy F4 F 4c Các tính chất sau ñây ñơn giản quan trọng ñể chứng minh tính đắn thuật tốn bài:    117 Bất ñẳng thức tam giác (triangle inequality): Với cạnh @8  , ta có «"8  N «"8 @  @8  Cận (lower bound) hội tụ (convergence): Các   sau loạt phép co giảm dần không nhỏ khoảng cách «"8  Tức   «"8  (  đạt cận dưới) khơng phép co làm giảm   ñi ñược Cây ñường ñi ngắn (shortest-path tree): Nếu ta khởi tạo   thực phép co   khoảng cách từ " tới  (L a) xây dựng gốc " nút  nút ! l  ðường ñi từ nút gốc " tới nút  đường ngắn  Sự khơng tồn đường (no path): Nếu khơng tồn đường từ " tới  cho dù co nữa,   ln ‘ ðể tiện trình bày thuật tốn, ta đưa vào quy ước cộng giá trị ‘ với số F Bởi máy tính khơng có khái niệm ‘, chương trình cài ñặt thường sử dụng số ñặc biệt ñể thay thế, phải ñi kèm với vài sửa đổi để hợp lý hóa phép tốn: F  ‘ ‘  F ‘ F  C‘ C‘  F C‘ Dưới ñây ta xét số thuật tốn tìm đường ngắn từ đỉnh " tới đỉnh  đồ thị có hướng A a8  có  đỉnh  cung, đỉnh ñược ñánh số từ tới  Trong trường hợp ñồ thị vô hướng với trọng số không âm, tốn tìm đường ngắn quy dẫn tốn tìm đường ngắn phiên có hướng đồ thị Input   Dịng chứa số ñỉnh  N 7‡ , số cung  N 7“ ñồ thị, ñỉnh xuất phát ", đỉnh đích   dịng tiếp theo, dịng có dạng ba số @, , , cho biết @8  cung  trọng số cung ñó  ( số nguyên có giá trị tuyệt đối N 2.3 Thuật tốn Prim a) TF tFB tFBng c< c Ù9 Ký hiệu †8 Ù tổng giá trị hàm  cung  6† G Ù9: †8 Ù ẩ  b) Lu^ Lu^ng ỗ5ốGộ Lung (flow) trờn mng A hàm: M  ƒ ˜  ¦  gán cho cung  số thực , gọi luồng cung , thỏa mãn ba ràng buộc sau ñây:    Ràng buộc sức chứa (Capacity constraint): Luồng cung khơng vượt q sức chứa cung đó: L M  N l Ràng buộc tính đối xứng lệch (Skew symmetry): Với L , luồng cung  luồng cung đối C có giá trị tuyệt ñối trái dấu nhau: L M  CC Ràng buộc tính bảo tồn (Flow conservation): Với ñỉnh  ñỉnh phát ñỉnh thu, tổng luồng cung ñi khỏi  0: L a C 6"8 9M 698 a Từ ràng buộc tính đối xứng lệch tính bảo tồn, ta suy được: Với ñỉnh  a C 6"8 9, tổng luồng cung ñi vào  0: a8 69 Giá trị luồng  mạng A ñược ñịnh nghĩa tổng luồng cung ñi khỏi ñỉnh phát: žž 6"98 a (3.1) 172 Bài toán luồng cực ñại mạng (maximum-flow problem): Cho mạng A với ñỉnh phát " ñỉnh thu , hàm sức chứa l, tìm luồng có giá trị lớn mạng A c) Lu^ Lu^ng dF#ng Luồng dương (positive flow) mạng A hàm êM  ƒ 78 ‘  ¦ ê gán cho cung  số thực không âm ê gọi luồng dương cung  thỏa mãn hai ràng buộc sau ñây:   Ràng buộc sức chứa (Capacity constraint): Luồng dương cung khơng vượt q sức chứa cung đó: L M N ê N l Ràng buộc tính bảo tồn (Flow conservation): Với đỉnh  khơng phải đỉnh phát khơng phải đỉnh thu, tổng luồng dương cung ñi vào  tổng luồng dương cung ñi khỏi : L a C 6"8 9: êa8 69 ê698 a Giá trị luồng dương ñược ñịnh nghĩa tổng luồng dương cung ñi khỏi ñỉnh phát trừ ñi tổng luồng dương cung ñi vào ñỉnh phát*: žêž ê6"98 a C êa8 6"9 3 5 (3.2) 1 1 Hình 2.6 Mạng với sức chứa cung (1 phát, thu) luồng dương với giá trị Một số tài liệu khác ñưa vào thêm ràng buộc: đỉnh phát " khơng có cung vào đỉnh thu  khơng có cung Khi giá trị luồng dương tổng luồng dương cung ñi khỏi ñỉnh phát Cách hiểu quy trường hợp riêng ñịnh nghĩa * 173 d) M!i quan h; h; giR giRa lu^ lu^ng lu^ lu^ng dF#ng Bổ ñề 3-1 Cho êM  G ˜ luồng dương mạng A a8 8 l8 "8  Khi hàm M  ƒ ˜  ¦  ê C êC luồng mạng A žž žêž Chứng minh Trước hết ta chứng minh  thỏa mãn tất ràng buộc luồng: Ràng buộc sức chứa: Với L :  ê C êC ½¿À N ê N l@8  Á4 Ràng buộc tính ñối xứng lệch: Với L   ê C êC CgêC C êh CC Ràng buộc tính bảo tồn: L a, ta có: 698 a È gê C ờCh ỗ5è6â9Gả ở ẩ ờỡ C ẩ ờỡ C ỗ5è6â9Gả ỗ5è6â9Gả ẩ ỗ5è6â9Gả 3ỗ5èảG6â9 ờ698 a C êa8 69 Nếu  d "  d , ta có: È êCì êCì 698 a ê698 a C êa8 69 (Do tổng luồng dương ñi khỏi  tổng luồng dương ñi vào ) Nếu  ", xét giá trị luồng  Bổ ñề 3-2 žž 6"98 a ê6"98 a C êa8 6"9 žêž Cho M  G ˜ luồng mạng A a8 8 l8 "8  Khi hàm: 174 êM  ƒ 78 ‘  ¦ ê ”n›68 79 • luồng dương mạng žêž žž 8  w 7— 78  O Chứng minh Trước hết ta chứng minh ê thỏa mãn ràng buộc luồng dương: Ràng buộc sức chứa: L  , rõ ràng ê số không âm ê ”n›68 79 N l Ràng buộc tính bảo tồn: L a, tổng luồng dương khỏi  trừ tổng luồng dương ñi vào  bằng: ê698 a C ê6a8 69 È  C È   ỗ5è6â9Gả ớỗ4 ỗ5è6â9Gả ớỗ4 ẩ ỗ5èảG6â9 ớỗợ4 ẩ  3ỗ5è6â9Gả ớ3ỗù4 C 698 a Nu  d "  d , 698 a nên luồng dương ñi vào  (ê698 a)) ñược bảo tồn ñi khỏi  (êa8 69) Nếu  ", ta có: žêž ê6"98 a C êa8 6"9 6"98 a žž Bổ ñề 3-1 Bổ ñề 3-2 cho ta mối tương quan luồng luồng dương Khái niệm luồng dương dễ hình dung so với khái niệm luồng, nhiên ñịnh nghĩa luồng tổng quát lại thích hợp cho việc trình bày chứng minh thuật toán Ta sử dụng luồng dương hình vẽ output (chỉ quan tâm tới giá trị luồng dương ê), khái niệm luồng ñược dùng ñể diễn giải thuật tốn Trong q trình cài đặt thuật tốn, hàm l  xác ủnh bi cỏc giỏ tr 6l 9ỗ5s v 6 9ỗ5s nờn ta dùng lẫn ký hiệu l8  (nếu muốn ñề cập tới giá trị hàm) l 8   (nếu muốn ñề cập tới biến số) e) M8t s! s! tính ch6 ch6t c# b b n Cho mạng A a8 8 l8 "8  luồng  A Gọi l†8 Ù lưu lượng từ † sang Ù †8 Ù giá trị luồng từ † sang Ù 175

Ngày đăng: 28/06/2023, 21:55

Xem thêm:

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

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN