Professional Documents
Culture Documents
BTLdasua
BTLdasua
BTLdasua
THÔNG
----------
ĐỒ THỊ HAMILTON
1. Định nghĩa:
2. Bài toán tìm kiếm đường đi Hamilton
3. Thuật toán tìm kiếm đường đi Hamilton……………………….8
4. Ứng dụng của đồ thị Hamilton
2
1. Định Nghĩa
- Đường đi Hamilton có nguồn gốc từ bài toán: "Xuất phát từ một đỉnh
của khối thập nhị diện đều hãy đi dọc theo các cạnh của khối đó sao cho
đi qua tất cả các đỉnh khác, mỗi đỉnh đúng một lần sau đó quay về đỉnh
xuất phát." là gọi theo tên của William Rowan Hamilton phát biểu vào
năm 1859
+ Chu trình bắt đầu từ một đỉnh v nào đó qua tất cả các đỉnh còn
lại mỗi đỉnh đúng một lần rồi quay về v được gọi là chu trình Hamilton.
+ Đường đi qua tất cả các đỉnh của đồ thi mỗi đỉnh đúng một lần
được gọi là đường đi Hamilton. .
- Đồ thị Hamilton là một loại đồ thị đơn vô hướng.
Ví dụ đồ thị Hamilton
3
- Đồ thị nửa Hamilton nếu có đường đi Hamilton
4
Dựa trên cấu trúc đồ thị và các phương trình đệ quy, ta có thể tính toán các
giá trị tương ứng với các lời giải con và dùng chúng để xây dựng lên lời giải
cuối cùng.
- Thuật toán Nhánh và Cận (Branch and Bound)
Thuật toán nhánh và cận (Branch and Bound) là một thuật toán tìm kiếm
động để giải quyết các bài toán tối ưu. Ý tưởng cơ bản của thuật toán là
duyệt qua tất cả các khả năng của bài toán, nhưng chỉ giữ lại các nhánh có
thể tối ưu hơn nhánh khác đã được khám phá trước đó.
- Mã giả :
+ Liệt kê các chu trình Hamilton bắt đầu tại định thứ K
+ Liệt kê các chu trình Hamilton được thực hiện như sau:
5
-Kiểm nghiệm thuật toán
Ví dụ minh hoạ: Cho đồ thị G sau tìm các chu trình và đường đi và chu trình con
từ đỉnh 1 nếu có theo từng bước theo giải thuật quay lui.
Đồ thị G
Giải
Bước 1: Xác định danh sách kề của G:
1 -> 2 -> 4
2 -> 1 -> 3 -> 5
3 -> 2 -> 4 -> 5
4 -> 1 -> 3 -> 5
5 -> 2 -> 3 -> 4
Bước 2:
Từ ma trận kề, ta biết được các đỉnh liền kề với một đỉnh nào đó của G
6
Chọn đỉnh 1 là đỉnh xuất phát, thuật giải quay lui sẽ tìm tất cả các đường đi và chu
trình Hamilton nếu có của G với đỉnh đầu tiên là 1dưới dạng cây lời giải. Cây lời
giải được xây dựng qua giải thuật như sau:
Xét từng đường đi trên cây, thêm những đỉnh liền kề với nút lá mà chưa có trong
đường đi này: Đường đi 1→ 2 thêm 3 và 5, đường 1→4 thêm 3 và 5
Đọc trên cây lời giả ta có các chu trình và các đường đi Hamilton khởi đi từ đỉnh 1
như sau:
7
4 Chu trình:
1, 2, 3, 5, 4, 1;
1, 2, 5, 3, 4, 1;
1, 4, 3, 5, 2, 1;
1, 4, 5, 3, 2, 1.
4 Đường đi:
1, 2, 3, 4, 5;
1, 2, 5, 4, 3;
1, 4, 3, 2, 5;
1, 4, 5, 2, 3.
4 đường còn lại là chu trình con:
1, 2, 3, 4, 1;
1, 2, 5, 4, 1;
1, 4, 3, 2, 1;
1, 4, 5, 2, 1;
3. Thuật toán tìm kiếm đường đi Hamilton
Hình ảnh chạy thuật toán trên Dev c++
Thuật toán
8
#include<bits/stdc++.h>
class dothi{
int n,s, A[MAX][MAX], chuaxet[MAX], X[MAX];
public:
void nhap();
void in(){
for(int i=1;i<=n;i++){
chuaxet[i] = 1;
X[1] = s;
chuaxet[s] = 0;
}
};
int gets(){
return s;
}
void hmt(int k);
};
void dothi::nhap(){
cin>>n>>s;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>A[i][j];
} } }
9
void dothi::hmt(int k){
for(int y=1;y<=n;y++)
if(A[X[k-1]][y] == 1)
if((k == n+1) && (y == X[1])){
// in chu trinh hamilton
for(int i=1;i<=n;i++)
cout<<X[i]<<" ";
cout<<X[1]<<endl;
}
else
if(chuaxet[y] == 1){
X[k] = y;
chuaxet[y] = 0;
hmt(k+1);
chuaxet[y] = 1;
}
}
int main(){
dothi g;
g.nhap();
g.in();
g.hmt(2);
}
4. Ứng dụng của đồ thị Hamilton
Đồ thị Hamilton có nhiều ứng dụng thực tế như:
- Giải bài toán người đi du lịch (Traveling Salesman Problem - TSP):
Trong bài toán này, một người bán hàng cần tìm chu trình Hamilton ngắn
10
nhất để ghé thăm một số thành phố khác nhau một lần duy nhất và quay
trở lại thành phố xuất phát. Đồ thị Hamilton được sử dụng để mô hình
hóa vấn đề này và giúp tìm ra lộ trình ngắn nhất để tiết kiệm thời gian và
chi phí.
- Bài toán mã đi tuần là một dạng của bài toán tổng quát hơn là bài toán
tìm đường đi Hamilton trong lý thuyết đồ thị, là một bài toán NP-đầy đủ.
Bài toán tìm hành trình đóng của quân mã là một bài toán cụ thể của bài
toán tìm chu trình Hamiltonian.
- - Đặt một quân mã ở một ô bất kì trên bàn cờ vua, theo quy tắc di chuyển
của cờ vua, tìm các bước đi của quân mã sao cho mỗi ô chỉ được đi qua 1
lần và đi hết bàn cờ.
- Mạng lưới và định tuyến: Trong mạng lưới, đồ thị Hamilton được sử
dụng để tối ưu hóa định tuyến và quản lý giao thông. Nó giúp xác định lộ
trình tối ưu cho việc truyền tải dữ liệu hoặc vận chuyển hàng hóa qua các
nút trong mạng.
- Lập lịch và sắp xếp công việc: Trong lập lịch và sắp xếp công việc, đồ
thị Hamilton được sử dụng để tối ưu hóa thứ tự thực hiện các công việc.
Điều này giúp cải thiện hiệu suất và tiết kiệm thời gian trong quá trình
thực hiện các nhiệm vụ.
- Thiết kế vi mạch và hệ thống: Trong thiết kế vi mạch và hệ thống, đồ
thị Hamilton được sử dụng để tối ưu hóa định tuyến và kết nối các thành
phần trong mạch tích hợp. Điều này đảm bảo tối ưu hóa hiệu năng và
hiệu suất của hệ thống điện tử.
- Tính toán và trí tuệ nhân tạo: Đồ thị Hamilton cũng có ứng dụng trong
lĩnh vực tính toán và trí tuệ nhân tạo, đặc biệt là trong các thuật toán tìm
kiếm và truy hồi. Nó được sử dụng để mô hình hóa và giải quyết các vấn
đề phức tạp như tìm kiếm lời giải tối ưu, quy hoạch và xử lý dữ liệu.
11