a) Trường hợp đồ thị cần biểu diễn là vô hướng:
Ý tưởng thuật toán: Đồ thị có thể đƣợc biểu diễn bằng ma trận kề vuông cấp n, với n là số đỉnh của đồ thị. Phần tử δij ở hàng i cột j (i,j=0,1,2, ...n) đƣợc xác định nhƣ sau:
- δij =1 nếu cặp đỉnh xi và xj có cạnh nối với nhau.
- δij =0 nếu cặp đỉnh xi và xj không có cạnh nào nối với nhau.
Ma trận của đồ thị vô hƣớng là ma trận đối xứng, tức là các phần tử đối xứng qua đƣờng chéo chính sẽ tƣơng ứng bằng nhau.
b) Trường hợp đồ thị cần biểu diễn là có hướng:
Ý tưởng thuật toán: Đồ thị có thể đƣợc biểu diễn bằng ma trận kề vuông cấp n, với n là số đỉnh của đồ thị. Phần tử δij ở hàng i cột j (i,j=0,1,2, ...n) đƣợc xác định nhƣ sau:
- δij =1 nếu cặp đỉnh (xi, xj ) có cung.
- δij =0 nếu cặp đỉnh (xi, xj ) không có cung nào.
Ma trận của đồ thị có hƣớng không phải là ma trận đối xứng và ma trận biểu diễn đồ thị đơn là ma trận logic.
c) Thuật toán tìm tất cả các đường đi trong ma trên kề:
Để tìm tất cả các đƣờng đi trong ma trận kề dựa trên thao tác nhân ma trận liên kết một cột tƣơng ứng của ma trận đó đƣợc thể hiện nhƣ sau:
Bk = A B*k- 1(*)
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
- B*k- 1 là kết quả của phép chuyển đổi B k- 1 ;
Bài toán tìm tất cả các đƣờng đi trong ma trận kề trở thành bài toán cho ma trận A và ma trận cột B1 hãy tìm tất cả các đƣờng đi có thể có từ nguồn (điểm phát) tới đích (điểm nhận).
Thuật toán:
- Bước 1: Kiểm tra ma trận cột B1 có chứa cung bắt đầu từ đỉnh nguồn hay không. Nếu cung tồn tại thì ghi nhận đƣờng đi đó và thay thế cung đó bởi giá trị 0. Sự thay đổi này sẽ cho ta kết quả là B*
1 ; - Bước 2: Xét với k=2.
- Bước 3: Thực hiện phép tính (*) để tìm các giá trị Bk tƣơng ứng.
- Bước 4: Kiểm tra Bk bắt đầu từ nguồn, nếu đƣờng đi tồn tại thì ghi nhớ và thay thế cung đƣờng đi đó bởi giá trị 0. Nếu đƣờng đi xuất hiện trong Bk là đƣờng đi đầy đủ thì thay thế Bk =0. Sự thay đổi này cho ta kết quả là B*k .
- Bước 5: Kiểm tra B*k . Nếu B*k =0 thì thực hiện tiếp bƣớc 7. Nếu B*k
≠0 thì thực hiện tiếp bƣớc 6.
- Bước 6: Kiểm tra điều kiện k ≤ n-1. Nếu thoả mãn điều kiện k < n-1 thì tăng k lên 1 và thực hiện tiếp bƣớc 3. Nếu điều kiện k = n-1thì thực hiện tiếp bƣớc 7.
- Bước 7: Kiểm tra lại danh sách đƣờng đi và kết quả nhận đƣợc là danh sách các đƣờng đi có thể có từ đỉnh đầu đến đỉnh cuối.
d) Ví dụ mô tả:
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Đồ thị nhƣ hình 1.2a và 1.2b đƣợc chuyển thành dạng ma trận liên kết tƣơng ứng là A1 và A2 trong đó các phần tử là 0 hoặc (i,j):
Để thuận tiện và đơn giản hóa cách viết các phần tử trong ma trận thì ta bỏ dấu ngoặc đơn và dấu phẩy giữa hai đỉnh kết nối. Ví dụ: (1,2) = 12,…
Áp dụng thuật toán vừa trình bày ở trên mục 1.4.1.4 để áp dụng với ma trận A1 để tìm tất các các đƣờng đi trong ma trận từ đỉnh nguồn là đỉnh 1 và đỉnh đích là đỉnh 4:
; ;
Các bƣớc tiếp theo của thuật toán đƣợc thực hiện nhƣ sau:
; ;
;
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Theo thuật toán thì ở bƣớc 6 khi gặp điều kiện k = n -1 thì dừng lại và chuyển sang bƣớc 7 tức là liệt kê tất các đƣờng đi đã tìm đƣợc. Với bài toán này ta đã tính đƣợc các ma trận B1, B2, B3 và danh sách tất cả các đƣờng đi từ đỉnh 1 (đỉnh nguồn) đến đỉnh 4 (đỉnh đích) là: 14, 12*24, 13*34, 12*23*34, 13*32*24. Hệ thống có cấu trúc phức tạp đƣợc mô tả thông qua đồ thị có tất
cả các đƣờng đi thành công f(1,4): 1 4 v 1 2 4 v 1 3 4 v 1 2 3 4
v 1 3 2 4
2.1.4.Thuật toán tìm tất cả đƣờng đi của ma trận liên kết theo lý thuyết đồ thị
Thuật toán đã trình bày trong phần 2.1.3 chỉ thích hợp với những đồ thị có kích thƣớc nhỏ. Đối với các đồ thị có kích thƣớc lớn thì việc thực hiện bƣớc 4 và 5 là rất khó khăn, việc tính toán dài và dễ nhầm lẫn vì các phần tử của ma trận lúc này là các chuỗi dài. Chính vì sự khó khăn đó nên yêu cầu cần phát triển một thuật toán để tự động tìm kiếm tất cả các đƣờng đi giữa 2 đỉnh của đồ thị.
Trong bài toán lý thuyết đồ thị [1] thì chúng ta biết đến bài toán tìm đƣờng đi ngắn nhất, bài toán đƣờng đi tối thiểu giữa hai đỉnh của đồ thị, bài toán tìm đƣờng đi qua tất cả các đỉnh của đồ thị nhƣng bài toán ở đây là tìm tất cả danh sách các đƣờng đi từ đỉnh đầu đến đỉnh cuối của đồ thị.
a) Ý tưởng thuật toán: Thuật toán sử dụng phƣơng pháp tìm kiếm theo chiều sâu. Tƣ tƣởng của tìm kiếm theo chiều sâu là: Từ đỉnh nguồn (đỉnh đầu) của đồ thị ta di chuyển đến một đỉnh khác (một đỉnh bất kỳ mà có thể đi từ đỉnh đầu). Từ đỉnh này ta tiếp tục đi đến khác đỉnh khác. Nếu không thể đi tiếp đƣợc nữa thì quay lại đỉnh trƣớc đó và đi đến đỉnh khác. Cứ nhƣ vậy cho đến khi đến đỉnh cuối của đồ thị.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
b) Ví dụ mô tả:
Xét lại ví dụ trên, cho đồ thị vô hƣớng
Áp dụng thuật toán tìm kiếm theo chiều sâu, ma trận A1 sẽ đƣợc viết lại nhƣ sau:
Để tìm tất cả các đƣờng dẫn từ đỉnh 1 (nguồn) đến đỉnh 4 (đích) theo thuật toán 2.1.3 chúng ta có đƣờng đi đầu tiên từ đỉnh 1 2, đỉnh 2 không phải là đỉnh đích nên chuyển tiếp sang đỉnh 3, theo đƣờng: 1 2 3; đỉnh 3 không phải là đỉnh đích nên đi tiếp sang đỉnh 4, đỉnh 4 là đỉnh đích nên ta có đƣờng đi: 1 2 3 4. Ghi nhớ lại đƣờng đi này và quay trở lại đỉnh 3, nhƣng không có đƣờng đi nào từ đỉnh 3 đến đỉnh 4 ngoài con đƣờng đã tìm đƣợc nên từ đỉnh 3 quay lại đỉnh 2 hoặc đỉnh 1.
- Nếu quay lại đỉnh 2 thì từ đỉnh 2 ta có thể đi tiếp đến đỉnh 4, vậy ta có đƣờng đi: 1 2 4.
- Nếu quay lại đỉnh 1 thì ta có thể đi tiếp đến đỉnh 4, vậy ta có đƣờng đi:
1 3 4.
Tƣơng tự nhƣ vậy ta cũng tìm đƣợc các đƣờng đi: 1 3 2 4 và 1 4. Hệ thống phức tạp đƣợc mô tả bằng phƣơng pháp đồ thị, áp dụng thuật toán ở mục 2.1.3 ta tìm đƣợc tất cả các đƣờng đi thành công f(1,4): 1 4 v 1 2 4
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/