BTLdasua

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 11

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN

THÔNG

KHOA VIỄN THÔNG 1

----------

BÁO CÁO TIỂU LUẬN


TOÁN RỜI RẠC

ĐỒ THỊ HAMILTON

Giảng viên: Dương Thị Thanh Tú

Nhóm học-Nhóm tiểu luận:01 - 07

Thành viên - MSV:


Nguyễn Xuân Kiên - B21DCVT260
Nguyễn Viết Khánh – B20DCVT217
Trần Trung Kiên – B21DCVT261
Nguyễn Chí Kiên –B21DCVT258
Dương Trung Kiên - B21DCVT257

Hà Nội ,tháng 10 năm 2023


Mục Lục

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

Khối thập nhị diện


đều
- Đồ thị Hamilton là đồ thị có chứa ít nhất hai đỉnh là chu trình và đường
đi Hamilton

+ 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

Ví dụ về đồ thị nửa Hamilton

2. Bài toán tìm kiếm đường đi Hamilton


Bài toán:
- Xét 1 đồ thị G = (V, E) với tập đỉnh V và tập cạnh E. Đồ thị này có thể vô
hướng hoặc có hướng, đơn hoặc đa.
- Cần tìm một đường đi đi qua mỗi đỉnh của đồ thị một lần duy nhất và chỉ
một lần. Đường đi này gọi là đường đi Hamilton. Đường đi Hamilton không
yêu cầu sự liên tục, tức là các cạnh không cần phải nối tiếp nhau theo quy
tắc nào đó.

Phương pháp giải quyết:


- Quay lui (back tracking)
Phương pháp quay lui là một trong những phương pháp đơn giản nhất để
tìm kiếm đường đi Hamilton trong một đồ thị. Ý tưởng chính của phương
pháp này là kiểm tra tất cả các đường đi có thể, bắt đầu từ một đỉnh cho
trước. Khi kiểm tra một đường đi tiếp theo, chúng ta thử tất cả các đỉnh có
thể kết nối với đỉnh hiện tại và chưa được thăm. Nếu tìm thấy một đường đi
hoàn chỉnh, tức là đã tìm thấy một đường đi Hamilton. Nếu không, chúng ta
quay lại và thử các đường đi khác.
- Quy hoạch động (Dynamic programming)
Trong một số trường hợp đặc biệt, chúng ta có thể sử dụng quy hoạch
động để giải quyết vấn đề đường đi Hamilton. Phương pháp này thông qua
việc tìm kiếm các lời giải con phù hợp để xây dựng lên lời giải cuối cùng.

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 đó.

+ CÁCH 1: Sử dụng thuật toán đệ quy

- 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:

Khởi đầu: cây có một nút gốc

Đỉnh 1 kề với 2 và 4, đưa 2 và 4 vào cây

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

Tương tự: đường 1→2→4 thêm 4 và 5, đường 1→2→5 thêm 3 và 4,


đường 1→4→3 thêm 2 và 5, đường 1→4→5 thêm 2 và 3.
Tiếp tục thêm vào các nút lá ta được kết quả cuối cùng là cây lời giải.

Đọ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>

#define MAX 100


using namespace std;

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

You might also like