Tải bản đầy đủ (.docx) (27 trang)

GIẢI THUẬT BELLMAN FORD

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.57 MB, 27 trang )

MỌI THÔNG TIN CHI TIẾT XIN LIÊN HỆ
MAIL:
XEM DEMO
BÁO CÁO
CODE

1


KHOA CÔNG NGHỆ THÔNG TIN &TRUYỀN THÔNG

BỘ MÔN CÔNG NGHỆ PHẦN MỀM

NIÊN LUẬN CƠ SỞ NGÀNH KTPM
Tên đề tài:

BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT TRÊN ĐỒ THỊ BẰNG
GIẢI THUẬT BELLMAN-FORD

Sinh viên thực hiện
XXXXXXX

Cán bộ hướng dẫn
Tiến sĩ: Nguyễn Công Danh

MSSV: XXXXXXX
Lớp: DI1796A2

HỌC KỲ 1, 2020-2021

2




ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN NIÊN LUẬN CƠ SỞ NGÀNH KTPM
(Học kỳ 1, Năm học 2020-2021)
GIÁO VIÊN HƯỚNG DẪN:
STT
HỌ VÀ TÊN
1
Nguyễn Công Danh
SINH VIÊN THỰC HIỆN:
STT
1

HỌ VÀ TÊN
XXXXXXX

MSCB

MSSV

THƯỞNG
(Tối đa 1,0 điểm)

ĐIỂM

XXXXXX
X

I. HÌNH THỨC (Tối đa 0,5 điểm)
Bìa (tối đa 0,25 điểm)

 Các tiêu đề: Trường ĐHCT, Khoa CNTT
 Loại niên luận: Cơ sở ngành KTPM, Tên đề tài
 Giáo viên hướng dẫn: chức danh, họ tên.
 Thông tin về các sinh viên thực hiện: họ tên, mã số, lớp
 Năm thực hiện
Bố cục (tối đa 0.25 điểm)
 Nhận xét của giáo viên hướng dẫn và giáo viên chấm
 Mục lục: cấu trúc chương, mục và tiểu mục
 Phụ lục (nếu có)
 Tài liệu tham khảo
II. NỘI DUNG (Tối đa 3,5 điểm)
Tổng quan (tối đa 0,5 điểm)
 Mô tả bài toán, mục tiêu cần đạt được (0,25 điểm)
 Hướng giải quyết và kế hoạch thực hiện (0,25 điểm)
Lý thuyết (tối đa 0,5 điểm)
 Các khái niệm sử dụng trong đề tài
 Kết quả vận dụng lý thuyết vào đề tài
Ứng dụng (tối đa 2,0 điểm)
 Phân tích yêu cầu bài toán, xây dựng các cấu trúc dữ liệu cần thiết (tối
đa 0,5 điểm)
 Giải thuật (Lưu đồ-Ngôn ngữ giả) (1,0 điểm)
 Giới thiệu chương trình (0,5 điểm)
Kết luận (tối đa 0,5 điểm)
 Nhận xét kết quả đạt được
 Hạn chế
 Hướng phát triển
III. CHƯƠNG TRÌNH DEMO (Tối đa 5,0 điểm)
Giao diện thân thiện với người dùng (1.0 điểm)
Hướng dẫn sử dụng (0,5 điểm)
Kết quả thực hiện đúng với kết quả của phần ứng dụng (3,5 điểm)

Ghi chú: Điểm trong khung “các sinh viên thực hiện” là điểm kết quả cuối cùng của từng sinh viên trong quá trình
thực hiện niên luận 1.

Nếu sinh viên demo chương trình và trả lời vấn đáp không đạt yêu cầu của giáo viên
hướng dẫn thì sinh viên sẽ nhận điểm F cho học phần này.
Cần Thơ, ngày tháng năm 2020
GIÁO VIÊN CHẤM

3


MỤC LỤC

Chương 1: TỔNG QUAN
MƠ TẢ BÀI TỐN

I.

Trong các ứng dụng thực tế, vài tốn tìm đường đi ngắn nhất giữa hai đỉnh của một
đồ thị liên thơng có một ý nghĩa to lớn. Có thể dẫn về bài tốn như vậy nhiều bài tốn thực
tế quan trọng. Ví dụ, bài tốn chọn một hành trình tiết kiệm nhất (theo tiêu chuẩn hoặc
khoảng cách hoặc thời gian hoặc chi phí) trên một mạng giao thông đường bộ, đường thủy
hoặc đường khơng; bài tốn chọn một phương pháp tiết kiệm nhất để đưa ra một hệ thống
động lực từ trạng thái xuất phát đến trạng một trạng thái đích, bài tốn lập lịch thi công các
công các công đoạn trong một cơng trình thi cơng lớn, bài tốn lựa chọn đường truyền tin
với chi phí nhỏ nhất trong mạng thơng tin, v.v…
Hiện nay có rất nhiều phương pháp để giải các bài tốn như vậy. Thế nhưng, thơng
thường, các thuật tốn được xây dựng dựa trên cơ sở lý thuyết đồ thị tỏ ra là các thuật tốn
có hiệu quả cao nhất. Trong chương này chúng ta sẽ xét một thuật tốn vậy. Thuật tốn tìm
đường đi ngắn nhất giữa hai điểm Bellman- Ford.

Phần mềm “Mô phỏng đường đi ngắn nhất bằng giải thuật Bellman- Ford ” đã ra
đời. Phần mềm này giúp người sử dụng có thể thấy được cách thức hoạt động của các thuật
toán theo từng bước một cách dễ hiểu nhất. Qua đó, phần mềm giúp ta có thể hiểu rõ hơn về
mỗi dịng code trong cấu trúc dữ liệu tương ứng sẽ làm việc như thế nào.
Phần mềm sử dụng các hình ảnh đồ hoạ trực quan, sinh động nhằm biểu diễn cách thức hoạt
động của các thuật tốn một cách dễ hiểu mà vẫn khơng mất nhiều thời gian để cố gắng đọc
hiểu code. Từ tất cả những lợi ích trên, phần mềm “Mơ phỏng đường đi ngắn nhất bằng giải
thuật Bellman- Ford ” giúp đỡ cho việc học tập các cấu trúc dữ liệu và giải thuật, phân tích
và thiết kế thuật tốn của sinh viên trở nên dễ dàng, hiệu quả, thú vị và tính ứng dụng thực tế
cao hơn rất nhiều so với các dịng code khơ khan.

MỤC TIÊU CẦN ĐẠT ĐƯỢC

II.
-

Áp dụng giải thuật Bellman- Ford trong Lý thuyết đồ thị.
Thể hiện việc tìm đường đi ngắn nhất của thuật tốn một cách cụ thể bằng giao diện
đồ hoạ trực quan dễ sử dụng.
Đường đi ngắn nhất sau khi được tìm thấy sẽ tơ màu khác với các đường đi cịn lại
cùng với việc ghi thêm độ dài đến từng đỉnh trên đường đi ngắn nhất để giúp cho
việc quan sát thuật toán một cách dễ dàng hơn.
4


III.

Người dùng có thể thêm xóa các nút các cung một cách dễ dàng cho tiện quan sát.

HƯỚNG GIẢI QUYẾT


Trước tiên, cần phải tìm hiểu lại thật kỹ thuật tốn Bellman- Ford đã được học
trong môn Lý thuyết đồ thị trước đó. Chọn lọc ra mơi trường thích hợp để phất triểm phần
mềm mô phỏng như: C/C++, C#, Web,...

5


Sau khi chọn được môi trường phát triển, tiến hành phát triển phần mềm mơ
phỏng bằng thuật tốn Bellman- Ford. Bên cạnh đó song song với việc cài đặc thuật
tốn còn tiến hành thiết kế một giao diện trực quan dễ sử dụng để người dùng có thể
tiếp cận và thực hiện các thao tác một cách dễ dàng.
Trong việc thiết kế giao diện cần có các phím chức năng giúp người dùng dễ
dàng điều chỉnh lại đồ thị như việc thêm, sửa xóa các nút, các cung khi cần thiết. Sau
khi giải thuật được chạy xong kết quả cần phải thiết kế trực quan dễ phân biệt kết quả
của chương trình phần mềm.
IV.

KẾ HOẠCH THỰC HIỆN
Tuầ
n

Cơng
việc

Tuần 1 – Tuần 2

Tìm hiểu và chọn lọc các tài liệu về giải thuật rút tiền máy ATM.

Tuần 3 – Tuần 4


Vẽ lưu đồ của phần mềm bằng ngôn ngữ giả.

Tuần 5

Thiết kế giao diện và logo.

Tuần 6

Gửi giao diện cho người dùng cụ thể xem và đánh giá để chỉnh sửa
lại giao diện theo cảm quang của người dùng.

Tuần 7 – Tuần 11 Code chức năng, giải thuật và giao diện đồ hoạ cho giải thuật.
Tuần 12

Kiểm thử phần mềm.
Tạo tài liệu hướng dẫn sử dụng phần mềm và viết báo cáo.

Tuần 13

Đóng gói phần mềm.

Chương 2: LÝ THUYẾT
I.

1.

CÁC KHÁI NIỆM
Các khái niệm cơ bản về lý thuyết đồ thị


Định nghĩa đồ thị: Đồ thị G là một bộ đôi <V,E>, trong đó:
• V là tập các đỉnh.
• E là tập các cung, mỗi cung nối 2 đỉnh trong V.
Cho cung e nối 2 đỉnh x và y:
• Ký hiệu e = (x,y).
• x, y được gọi là đầu mút của e.
• x và y được gọi là kề nhau hoặc lân cận nhau.
6


• e được gọi là liên thuộc với x và y.
Định nghĩa Khun và Đa cung
• Khun: cung có hai đầu mút trùng nhau.
• Đa cung: các cung có cùng chung đầu mút.
Các loại đồ thị:
• Đơn đồ thị vơ hướng: là đồ thị chứa các cung khơng có hướng (x,y) ≡ (y,x),
khơng chứa khun và khơng chứa đa cung.
• Đa đồ thị vô hướng: là đồ thị cung không có hướng, khơng chứa khun và chứa
đa cung.
• Giả đồ thị: là đồ thị chứa các cung khơng có hướng nhưng có thể chứa đa cung và
nhiều khun.
• Đơn đồ thị có hướng: là một đồ thị chứa các cung có hướng (x,y) ≠ (y,x), khơng
chứa đa cung và khun.
• Đa đồ thị có hướng ( khơng chứa khun): là một đồ thị chứa các cung có
hướng (x,y) ≠ (y,x) và có thể có nhiều cung (x,y) nhưng khơng chứa khun.
• Đa đồ thị có hướng ( có chứa khun): là một đồ thị chứa các cung có hướng
(x,y) ≠ (y,x), có thể có nhiều cung (x, y) và chứa khun.

2.


Các khái niệm được sử dụng trong chương trình

Thuật tốn Bellman-Ford là một thuật tốn tính các đường đi ngắn nhất nguồn
đơn trong một đồ thị có hướng có trọng số (trong đó một số cung có thể có trọng số
âm). Thuật toán Dijkstra giải cùng bài toán này tuy nhiên Dijkstra có thời gian chạy
nhanh hơn, đơn giản là địi hỏi trọng số của các cung phải có giá trị khơng âm.

3.

Chú thích các từ ngữ và ký hiệu được sử dụng trong tài liệu

Các từ ngữ và ký hiệu được sử dụng trong tài liệu được giải thích trong Bảng 2.1.
Từ ngữ và ký hiệu
begin
end
Distange
S
s
N
X
π (i)
p (i)

Chú thích
Đỉnh đầu của cung
Đỉnh cuối của cung
Trọng số của cung
Tập các đỉnh đã được đánh dấu
Đỉnh nguồn hay đỉnh bắt đầu
Là tập đối của tập S

Là tập tất cả các đỉnh trong đồ thị
Độ dài đường đi ngắn nhất từ đỉnh s đến đỉnh i
Là độ dài của cung i, j với mọi i,j thuộc E
Tập các đỉnh có đường đi trực tiếp đến đỉnh s
Đỉnh trước đỉnh i
7


Bảng 2.1: Các từ ngữ và ký hiệu được sử dụng

KẾT QUẢ VẬN DỤNG LÝ THUYẾT VÀO ĐỀ TÀI

II.

Nắm vững được các khái niệm cơ bản về lý thuyết đồ thị cũng như quy trình của
giải thuật Bellman-Ford. Từ đó cài đặt giải thuật vào chường trình cụ thể có giao diện đồ
họa đáp ứng đúng mục tiêu đã đề ra.

Chương 3: KẾT QUẢ ỨNG DỤNG
I.

Phân tích yêu cầu bài tốn

Dựa vào mục MƠ TẢ TỔNG QUAN phía trên ta xác định đây là bài tốn thuộc
dạng đồ thị có áp dụng giải thuật hoặc thuật tốn tìm đường đi ngắn nhất.
Có rất nhiều giải thuật/ thuật tốn có thể tìm đường đi ngắn nhất cụ thể như: Thuật tốn
Dijkstra, Thuật tốn Bellman-Ford, Giải thuật tìm kiếm A*, Thuật tốn Floyd-Warshall,
Thuật toán Johnson, Lý thuyết nhiểu. Ở đây ta chọn thuật tốn Bellman-Ford vì những lý
do sau:
• Thuật tốn này có thể dùng trong các giao thức định tuyến vector khoảng cách,

chẳng hạng như giao thức RIP, vì nó liên quan đến các nút mạng (các thiết bị định
tuyến) trong hệ thống tự chủ.
• Có thể kiểm tra được đồ thị có chu trình và đồ thị có trọng số âm.
Input: các đỉnh và các cung có trọng số.
8


Output: đường đi ngắn nhất giữa các đỉnh trong đồ thị.
II.
Cấu trúc dữ liệu cần thiết
Ta có hai dạng cấu trúc cần thiết để giải quyết bài tốn này
• Cấu trúc dữ liệu kiểu đồ thị.
• Cấu trúc dữ liệu kiểu danh sách.
1. Hàm chương trình chính:

9


2.

Hàm nhập ma trận:

3.

Hàm sửa ma trận:
10


III.


1.

GIẢI THUẬT LƯU ĐỒ
Mã giả

Khởi tạo: pi[i] = 9999;

p[i] = -1;
pi[s] = 0;
p[s] = -1;
Thực hiện các bước lặp:
For i from 0 to n-1{
11


Duyệt qua tất cả các cung (u,v)
Cập nhật pi[v], p[v];
If ( pi[u]+L[u][v] < pi[v])
pi[v]= pi[u] + L[u][v];
p[v]=u;
}endfor

2.

Lưu đồ

Giải thuật được trình bày trong hình

12



13


Lưu đồ giải thuật Bellman-Ford

IV.

1.

GIỚI THIỆU CHƯƠNG TRÌNH
Kiến trúc phần mềm

• Sơ đồ Usecase
Chương trình có một nhóm người dùng, như được trình bày trong Hình 3.2.

Sơ đồ usecase

14


• Sơ đồ Class

Sơ đồ Lớp
Như được trình bày trong Hình 3.3, có ba lớp được dùng: …

2.

Giao diện
• Giao diện chính:


Giao diện chính
Giao diện chính gồm:
Nhập từ File: nhập dữ liệu đỉnh, cung, trọng số, của ma trận bằng file có sẵn.
Nhập thủ cơng: nhập dữ liệu đỉnh cung, trọng số của ma trận theo tùy ý người dùng.
15


Cập nhật: chức năng này chỉ được sử dụng khi có dữ liệu đã được nhập.
Thốt: thốt ứng dụng.
• Giao diện nhập thủ công

Giao diện nhập thủ công
Giao diện này chứa các phím chức năng nhập số đỉnh, các cung và trọng số của đồ thị
Bên cạnh đó trong giao diện cịn có thêm chức năng tạo ma trận ngẫu nhiên với số đỉnh
đã được nhập.
Chức năng lưu lại file dữ liệu ma trận cũng được thêm vào.
Còn lại là các chức năng load dữ liệu và hủy bỏ thao tác nhập
• Giao diện cập nhật

16


Giao diện cập nhật
Giao diện này giống với giao diện chính, chỉ khác khi dữ liệu được nhập vào ta cần cập
nhật lại để đồ thị có thể được hiển thị
Đặc biệt trong giao diện được thêm chức năng lưu lại ảnh của đồ thị tại thời điểm đó.
Khi được cập nhật xuất hiện đồ thì vừa nhập và bảng dữ liệu ma trận.
• Giao diện sửa dữ liệu


Giao diện dữ liệu
Giao diện gồm có:
17


Chức năng sửa đổi các cung trong ma trận với việc vó thể thêm cung mới hoặc xóa bỏ
cung (trọng số bằng 0) hoặc sửa đổi độ dài cung (trọng số khác số ban đầu).
Chức năng lưu lại dữ liệu ma trận khi đã thay đổi.
• File lưu giá trị: gồm 3 file:
o Capnhat.txt
o Suadothi.txt
o Anh.txt

18


Chương 4: KẾT LUẬN-ĐÁNH GIÁ
 Với đồ thị G=<V,E,W>, giải thuật bellman-ford bao gồm các bước sau:



Bước 1: Với đỉnh xuất phát s. gọi d[v] là khoảng cách từ s tới v với các giá trị
khởi tạo là:
d[s] = 0
d[v] = + nếu v ≠ s



Bước 2: Tối ưu hóa các d[v] như sau: Xét mọi đỉnh u, v của đồ thị, nếu có một
cặp đỉnh u, v mà d[v] > d[u]+c[u,v] thì ta đặt lại d[v]=d[u]+c[u,v]


 Phân tích độ phức tạp của giải thuật:
Ở bước 1 độ phức tạp là O(n).
Ở bước 2 là hai vòng lặp với n,m lần lặp, nên độ phức tập là O(n 2)
Ở bước 1 và bước 2 khơng lịng vào nhau nên độ phức tạp của quy trình trên là:
O(max(O(n2 ),O(n))) = O(n2)
Kết luận độ phức tạp của giải thuật Bellman1-Ford là: O(n2)
Do ta sử dụng danh sách để lưu các giá trị của đồ thị nên độ phức tạp là O(n 2) như trên.
Nhưng nếu chúng ta sử dụng cấu trúc Heap thì độ phức tạp của giải thuật này sẽ cịn
O(n*log(n))

Kết quả đạt được:
1. Về mặt chuyên môn:
I.
-

-

Nắm vững hơn kiến thức cấu trúc dữ liệu và giải thuật.
Hoàn thành được phần mền “tìm đường đi ngắn nhất bằng giải thuật Bellmanford” với các yêu cầu đặc ra: có giao diện mơ phỏng đồ thị, hiển thị đường đi cần
tìm và một số chức năng thêm sửa xóa với thao tác xử lý theo các dịng code của
thuật tốn.
Học được cách sử dụng các thư viện đồ họa trong C#, tạo các chuyển động của
form.
Đóng gói phần mềm.

19


2.

II.

Về mặt kinh nghiệm:
Tạo được các đồ họa hình ảnh trong các ứng dụng, hiểu biết thêm về các lớp dữ
liệu trong C#.
Biết cách viết tài liệu theo mẫu chuẩn.
Biết đánh giá giao diện phù hợp với cảm quang của người dùng thực tế.

Hạn chế và nguyên nhân:
Hạn chế

Nguyên nhân

Tốc độ xử lý còn chậm.

Do việc kết nối lấy dữ liệu từ server.

Giao diện đồ hoạ chưa thực sự đẹp chắc
chắn

Vận dụng chưa các thư viện và hàm liên
quan.

Còn mắc một số lỗi trong quá trình thực thi Kiếm thức về một số hàm thư viện chưa
sâu
Cịn ít chức năng, cần cải tiến thêm các
chức năng nổi bật hơn.
III.

Vấn đề về kiến thức và thời gian tìm hiểu

chưa chuyên sâu.

Hướng phát triển:
-

Xử lý nhanh hơn.
Thêm nhiều đồ họa bắt mắt, hiệu ứng đẹp.
Làm giao diện phù hợp và thân thiện người dùng.
Phát triển ứng dụng chuyên sâu và đa thuật toán.

PHỤ LỤC
CHƯƠNG I: HƯỚNG DẪN SỬ DỤNG
20


Xem các hướng dẫn bên dưới:
Bước 1: chọn cách nhập dữ liệu:
• Có 2 cách nhập liệu:
- Nhập từ file.
- Nhập thủ công.

Bước 2: nhập dữ liệu thủ công:
- Đầu tiên nhập vào số đỉnh.

-

Sau khi có số đỉnh của đồ thị:
21



o Có thể nhập từng cung vào các ơ “Đỉnh đầu”, “Đỉnh cuối”, “Trọng số” => nhấn
“Thêm”.
o Hoặc có thể dùng “Ma Trận Ngẫu Nhiên” tự động nhập các cung và trọng số
ngẫu nhiên.
- Sau đó nhấn “Hồn tất” để hồn thành nhập liệu.
Lưu ý: có thể lưu dữ liệu ma trận ra file tại “Lưu đồ thị”.
Bước 3: Sau khi hồn tất sẽ trả về giao diện chính đầy đủ:

22


-

Sau khi click “Cập Nhật” đồ thị sẽ được hiện ra:

Bước 4: tìm đường đi ngắn nhất:
 Có thể tìm đường đi từ 1 đỉnh bất kì tới 1 đỉnh nào đó.
23


-

Sau đó nhấn “Tìm đường đi ngắm nhất”.

Bước 5: sửa dữ liệu ma trận:

-

Giao diện sửa dữ liệu xuất hiện.
24



 Tại đây có thể thêm, sửa, xóa một hoặc nhiều cung tùy ý.
o Với việc thêm cung: chọn “Đỉnh đầu” => “Đỉnh cuối” => nhập “Trọng số” =>
“Cập Nhật”.
o Xóa cung: chọn “Đỉnh đầu” => “Đỉnh cuối” => nhập “Trọng số” bằng 0 =>
“Cập Nhật”.
o Sửa cung tương tự thêm cung.
 Sau đó nhấn “hồn tất” để hồn thành việc sửa dữ liệu
Lưu ý: khi về giao diện chính cần nhấn “Cập nhật” để có sự thay đổi mong muốn.
Bước 6: Lưu ảnh đồ thị:
 Tại giao diện chính có thể lưu lại hình ảnh của đồ thị tại thời điểm sử dụng chức
năng này.

25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×