1 / 13

Bài toán tìm chu trình trên đồ thị vô hướng bằng DFS

Bài toán tìm chu trình trên đồ thị vô hướng bằng DFS. I. Một số khái niệm cơ bản. Cho 1 đồ thị vô hướng G = (V, E) với |V| = n, |E| = m Thuật toán DFS ( depth-first search) dựng 1 cây có hướng từ gốc (nút đầu tiên trong tập đỉnh V).

vilmos
Download Presentation

Bài toán tìm chu trình trên đồ thị vô hướng bằng DFS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Bài toán tìm chu trình trên đồ thị vô hướng bằng DFS

  2. I. Một số khái niệm cơ bản Cho 1 đồ thị vô hướng G = (V, E) với |V| = n, |E| = m Thuật toán DFS ( depth-first search) dựng 1 cây có hướng từ gốc (nút đầu tiên trong tập đỉnh V). Nếu tồn tại đường đi có hướng từ v đến w, thì v được gọi là tổ tiên của w, còn w được gọi là hậu duệ của v. Cấu trúc nút kề nút (node-node adjacency) là một ma trận nxn. Phần tử aij = 1 nếu nút i kề với nút j và bằng 0 nếu ngược lại. Cấu trúc nút kề cạnh (node-edge adjacency) là danh sách tất cả các nút, với mỗi nút lại liệt kê tất cả các nút kề với nó.

  3. I. Một số khái niệm cơ bản 2 1 3 4 Cấu trúc nút kề nút: 1 2 3 4 1 0 1 1 0 2 1 0 1 0 3 1 1 0 1 4 0 0 1 0 Cấu trúc nút kề cạnh: 1: 2, 3 3: 1, 2, 4 2: 1, 3 4: 3

  4. II. Tìm chu trình trong đồ thị bằng DFS Có thể tìm chu trình trong đồ thị vô hướng bằng thuật toán DFS và thường sử dụng cấu trúc dữ liệu nút kề cạnh Trong đó, các nút được đánh số từ 1 đến n. Bản ghi nút i liệt kê các nút kề với nút i Thuật toán DFS bắt đầu bằng việc xác lập nút 1 là nút hiện thời.

  5. II. Tìm chu trình trong đồ thị bằng DFS Lặp lại thuật toán DFS ( với i là nút hiện thời) Nếu có ít nhất 1 nút trong bản ghi của nút i vẫn chưa được đến thăm từ i và giả sử j là nút đầu tiên chưa được đến thăm. Nếu j đã được đến thăm bởi các nút khác rồi, thì ta đánh dấu cạnh (i, j) là cạnh quay lại, còn không thì đánh dấu (i, j) là cạnh của cây và i là cha của j. Đánh dấu j là nút đã được đến thăm trong bản ghi của nút i và xác lập i là nút hiện thời. Nếu tất cả các nút của bản ghi của nút i đã được đến thăm, thì ta xác lập nút k (cha của nút i) là nút hiện thời.

  6. II. Tìm chu trình trong đồ thị bằng DFS Thuật toán sẽ dừng lại khi nút 1 là nút hiện thời (tức là thuật toán quay trở lại nút 1). Khi đó, mỗi một cạnh quay lại (i, j) xác định 1 chu trình. Một chu trình bao gồm cạnh quay lại (i, j) và các cạnh trên cây định đường đi từ j đến i. Như vậy, có thể xác định 1 chu trình bởi các cạnh quay lại như là chu trình cơ sở của đồ thị. Khi đó, mỗi chu trình của đồ thị là tập hợp hai hay nhiều chu trình từ các chu trình cơ sở.

  7. II. Tìm chu trình trong đồ thị bằng DFS 2 1 3 4 Cấu trúc nút kề cạnh: 1: 2, 3 3: 1, 2, 4 2: 1, 3 4: 3 DFS thực hiện như sau: nút hiện thời cạnh nút hiện thời cạnh 1 (1, 2) tree 3 (3, 1) back 2 (2, 3) tree 3 none 3 (3, 4) tree 2 none 4 none 1 END

  8. II. Tìm chu trình trong đồ thị bằng DFS Một cơ sở chu trình là một tập m – (n-1) các chu trình độc lập với nhau theo nghĩa chúng ta không thể dựng lại một chu trình trong tập này bằng cách tổ hợp hai hay nhiều chu trình khác ở trong tập. Tập m – (n – 1) cạnh quay lại xác định một cơ sở chu trình. Đây không phải là cơ sở chu trình duy nhất. Phương pháp để xác định không có chu trình nào tồn tại là không có bất cứ cạnh chồng nào giữa hai chu trình trong tập cơ sở.

  9. II. Tìm chu trình trong đồ thị bằng DFS Bất kì một chu trình nào khác của đồ thị có thể tìm được bằng cách tổ hợp hai hay nhiều chu trình trong tập chu trình cơ sở. Tổ hợp bằng cách sử dụng toán tử OR

  10. II. Tìm chu trình trong đồ thị bằng DFS 1 6 2 5 3 4 • Cấu trúc nút – kề: • 1: 2 4: 3, 5, 6 • 2: 1, 3, 6 5: 4, 6 • 3: 2, 4, 6 6: 2, 3, 4, 5 • DFS thực hiện như sau: 1: (1,2) tree 5: (5,6) tree 2: (2,3) tree 6: (6,2) back 3: (3,4) tree 6: (6,3) back 4: (4,5) tree 6: (6,4) back

  11. II. Tìm chu trình trong đồ thị bằng DFS 1 6 2 5 3 4 • Một chu trình bao gồm cạnh quay lại (i,j) và các cạnh cây duy nhất định đường đi từ j đến i. • Khi đó, các chu trình có thể xác định được là: • 2 – 3 – 4 – 5 – 6 – 2 • 3 – 4 – 5 – 6 – 3 • 4 – 5 – 6 – 4 • Rõ ràng là còn một số chu trình bị bỏ sót như: • 2 – 3 – 6 – 2 • 2 – 3 – 4 – 6 -2 • 3 – 4 – 6 - 3

  12. II. Tìm chu trình trong đồ thị bằng DFS 1 6 2 5 3 4 • Giả sử các cạnh của đồ thị là các vecto: • Với cấu trúc nút – kề: • 1: 2 4: 3, 5, 6 • 2: 1, 3, 6 5: 4, 6 • 3: 2, 4, 6 6: 2, 3, 4, 5 • Các vecto của đồ thị: (1, 2), (2, 3), (2, 6), (3, 4), (3, 6), (4, 5), (4, 6), (5, 6) • Khi đó, chu trình (2,3,4,5,6,2) được biểu diễn : 01110101 chu trình (3,4,5,6,3): 00011101

  13. II. Tìm chu trình trong đồ thị bằng DFS 1 6 2 5 3 4 • Thực hiện toán tử OR với hai chuỗi nhị phân trên: 01110101 OR00011101 01101000 • Chu trình mới là: (2,3), (2,6), (3, 6) hay là chu trình (2, 3, 6, 2)

More Related