Báo cáo bài tập lớn ứng dụng thuật toán dijkstra giải bài toán tìm đường đi ngắn nhất

20 10 0
Báo cáo bài tập lớn ứng dụng thuật toán dijkstra giải bài toán tìm đường đi ngắn nhất

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

L礃Ā do chọn đề tài Với mong muốn ứng dụng cũng như cụ thể hóa thuật toán đã được học để chỉ ra phương pháp tối ưu trong việc tìm đường đi ngắn nhất giữa hai điểm bất kì, nhóm chúng em ch

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘIKHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO BÀI TẬP LỚN HỌC PHẦNThực tập cơ sở ngành

Đề tài

Ứng dụng thuật toán Dijkstra giải bài toán tìm đường đi ngắn nhất

Giáo viên hướng d̀n: Nguyễn Thị Mỹ BìnhNhóm: 9Lớp: 2022IT6040001 Mã SV:Họ tên: Bùi Tuấn Phong

Mã SV:Họ tên: Vũ Hữu Phúc Mã SV:Họ tên: Lê Thu Phương

Mã SV:Họ tên: Nguyễn Thị Hải PhươngMã SV:Họ tên: Đỗ Quang Quân

Hà Nô ̣i, 2022

Trang 3

MỞ ĐẦU1 L礃Ā do chọn đề tài

Với mong muốn ứng dụng cũng như cụ thể hóa thuật toán đã được học để chỉ ra phương pháp tối ưu trong việc tìm đường đi ngắn nhất giữa hai điểm bất kì, nhóm chúng em chọn đề tài : “Ứng dụng thuật toán Dijkstra giải bài toán tìm đường đi ngắn nhất” Thuật toán Dijkstra là một thuật toán tìm đường đi ngắn nhất trong đồ thị có trọng số không âm Thuật toán này sử dụng một phương pháp tìm kiếm dựa trên độ ưu tiên và được áp dụng rộng rãi trong nhiều bài toán thực tế như: Tìm kiếm đường đi, Tối ưu hóa đường đi, điều khiển giao thông, …

2 Mục đích nghiên cứu

Mục đích của nghiên cứu thuật toán Dijkstra là để tìm ra đường đi ngắn nhất giữa các đỉnh trong một đồ thị vô hướng hoặc có hướng Thuật toán này có ứng dụng rất nhiều trong các lĩnh vực như định tuyến mạng, tìm đường đi trong bản đồ, tối ưu hóa lộ trình đi lại trong giao thông vận tải, và nhiều ứng dụng khác Nghiên cứu về thuật toán Dijkstra giúp chúng ta hiểu được cách thức hoạt động của nó, từ đó có thể tối ưu hóa và cải thiện các ứng dụng mà thuật toán này được áp dụng vào.

- Giải thích được cách hoạt động của thuật toán Dijkstra và chỉ ra được nhiệm vụ của các hoạt động đó.

- Hiểu về các ưu nhược điểm của thuật toán.

- Biết cách ứng dụng thuật toán Dijkstra trong thực tế: định tuyến mạng, tìm đường đi trong bản đồ, tối ưu hóa lộ trình đi lại trong giao thông vận tải,

- Có khả năng cài đặt và chạy thuật toán được trên máy tính.

Trang 4

3 Phương pháp nghiên cứu

- Tìm hiểu về lý thuyết đằng sau thuật toán Dijkstra, bao gồm cách hoạt động và thuật toán được sử dụng để tìm đường đi ngắn nhất - Tìm hiểu các ví dụ về thuật toán Dijkstra để hiểu cách nó hoạt động

trong các tình huống khác nhau.

- Tìm kiếm các tài liệu tham khảo về thuật toán Dijkstra, bao gồm sách, bài viết và video hướng dẫn trực tuyến.

- Thực hành viết code để triển khai thuật toán Dijkstra trên máy tính của mình và kiểm tra kết quả để hiểu rõ hơn về thuật toán.

- Tham gia các cộng đồng lập trình trực tuyến để thảo luận về thuật toán Dijkstra và học hỏi từ các chuyên gia lập trình khác.

4 Phạm vi nghiên cứu

- Áp dụng cho các đồ thị có trọng số không âm.

- Tìm đường đi ngắn nhất từ một đỉnh xuất phát đến tất cả các đỉnh còn lại trong đồ thị.

- Thuật toán Dijkstra cũng có thể được sử dụng để tìm đường đi ngắn nhất giữa hai đỉnh cụ thể trong đồ thị.

- Không đảm bảo tìm được đường đi ngắn nhất nếu đồ thị có trọng số âm.

- Độ phức tạp thời gian của thuật toán là O(V^2), trong đó V là số đỉnh trong đồ thị Tuy nhiên, nếu sử dụng các cấu trúc dữ liệu phù hợp, độ phức tạp có thể được cải thiện đáng kể.

Trang 5

5 Tổng quan nội dung nghiên cứu

*Bài toán: Chúng ta dùng các đỉnh của đồ thị để mô hình các thành

phố và các cạnh để mô hình các đường nối giữa chúng Khi đó trọng số các cạnh có thể xem như độ dài của các con đường (không âm) Chúng ta cần vận chuyển từ thành phố s đến thành phố t Thuật toán Dijkstra sẽ chỉ ra đường đi ngắn nhất mà ta có thể đi

*Giới thiệu về thuật toán Dijkstra:

nhất đơn giản trong đồ thị có trọng số không âm Thuật toán này được phát minh bởi nhà toán học Edsger W Dijkstra vào năm 1956 Nó được sử dụng rộng rãi trong các ứng dụng về định tuyến mạng và nhận biết đường đi ngắn nhất giữa hai đỉnh trong mạng lưới

(biểu thị khoảng cách chưa được biết đến giữa điểm xuất phát và các điểm khác trên đồ thị), và đánh dấu điểm xuất phát là đã được duyệt

kề với nó trên đồ thị Cập nhật giá trị distance cho các điểm này bằng cách cộng khoảng cách từ điểm xuất phát đến điểm đó với khoảng cách hiện tại giữa điểm xuất phát và điểm đó trong mảng distance

dấu nó là đã được duyệt Lặp lại bước 2 cho các điểm kề với điểm này và cập nhật giá trị distance cho chúng

cả các điểm trên đồ thị đã được duyệt

Trang 6

Thuật toán Dijkstra đảm bảo tìm được đường đi ngắn nhất giữa điểm ⇒

xuất phát và điểm đích trên đồ thị.

*Ứng dụng thuật toán Dijkstra:

dụng để tìm đường đi ngắn nhất giữa hai điểm trên mạng

giúp tìm đường đi ngắn nhất từ một vị trí đến vị trí khác trên bản đồ

được sử dụng để tối ưu hóa quá trình sản xuất và lên lịch cho các sản phẩm trong quá trình sản xuất

❖ Tối ưu hóa vận chuyển: Trong lĩnh vực vận chuyển, thuật toán Dijkstra giúp tối ưu hóa lộ trình vận chuyển hoặc tối ưu hóa các tuyến đường để giao hàng

dụng để tối ưu hóa việc điều khiển giao thông trong các hệ thống đô

Trang 7

CHƯƠNG 1 CƠ SỞ LÝ THUYẾT1.Đồ thị

a Sơ lược đồ thị

Đồ thị là một dạng biểu diễn hình ảnh của một tập các đối tượng gọi là đỉnh nối với nhau bởi các cạnh Thông thường, đồ thị được vẽ dưới dạng một tập các điểm (đỉnh, nút) nối với nhau bởi các đoạn thẳng

Đồ thị có nhiều loại khác nhau tùy thuộc vào số lượng đỉnh, số cạnh, liên kết và cấu trúc tổng thể của chúng Có thể kể đến như đồ thị có hướng và đồ thị vô hướng.

Ví dụ:

Hình 1: Mạng lưới giao thông thể hiện giữa 2 địa điểm khác nhau có đường đi trực tiếp đến nhau hay không:

Trang 8

Hình 2: Mạng lưới giao thông thể hiện giữa 2 địa điểm khác nhau có bao nhiêu đường đi trực tiếp đến nhau:

Một số khái niệm trong đồ thị

● Một cạnh được gọi là khuyên nếu nó có dạng (v, v)

● Cạnh bội là 2 cạnh khác nhau nhưng có cùng đỉnh đầu và đỉnh cuối

● Đỉnh treo là đỉnh chỉ có 1 cạnh kề với nó

● Đỉnh cô lập là đỉnh không có cạnh nào kề với nó ● Hai đỉnh của 1 cạnh là hai đỉnh kề nhau

● Hai cạnh chung 1 đỉnh là hai cạnh kề nhau

Trang 9

khác nhau của V gọi là các cạnh Một cạnh e=(u,v) thì u gọi là đỉnh đầu, v gọi là đỉnh cuối, đồng thời e gọi là cạnh ra của đỉnh u và gọi là cành vào của đỉnh v.

Trang 11

cạnh bội Một cạnh e=(u,v) thì u gọi là đỉnh đầu, v gọi là đỉnh cuối, đồng thời e gọi là cạnh ra của đỉnh u và gọi là

○ Trọng số của đồ thị có thể xem như một hàm W, xác định trên tập cạnh và lấy giá trị trên tập số Một cách hình thức, đồ thị có trọng số G được xem như một bộ ba (V, E, W), trong đó V là tập đỉnh, E là tập cạnh và W là trọng số.

○ Tùy từng trường hợp mà trọng số của cạnh e được ký hiệu là W(e) hay W(u, v).

VD:

Trang 12

Hình 8

● Bậc của đỉnh trong đồ thị

○ Bậc của đỉnh v trong đồ thị G, ký hiệu dG(v), là số cạnh liên thuộc với v, trong đó, khuyên được tính hai lần Một đỉnh có bậc 0 là đỉnh cô lập Đỉnh có bậc 1 là một đỉnh treo hay lá Trong đồ thị ví dụ, các đỉnh 1 và 3 có bậc là 2, các đỉnh 2, 4 và 5 có bậc bằng 3, đỉnh 6 có bậc 1.

Hình 9

○ Nếu tập cạnh E là hữu hạn thì tổng giá trị bậc của các đỉnh gọi là bậc của đồ thị Bậc của đồ thị bằng hai lần số cạnh Số các đỉnh bậc lẻ luôn là số chẵn.

● Biểu diễn đồ thị

Để lưu trữ đồ thị và thực hiện các thuật toán khác nhau với đô thị trên máy tính cần phải tìm những cấu trúc dữ liệu thích hợp để mô tả đô thị Việc chọn cấu trúc dữ liệu nào để biểu diễn đồ thị có tác động rất lớn đến hiệu quả của thuật toán Vì vậy, việc chọn lựa cấu trúc dữ liệu để biểu diễn đồ thị phụ thuộc vào từng tình huống cụ thể (bài toán và thuật toán cụ thể) Mục này sẽ xét một số phương pháp cơ bản được sử dụng để biểu diễn đồ thị trên máy tính, đồng thời cũng phân tích một cách ngắn gọn những ưu điểm cũng như những nhược điểm của chúng.

● Xét đơn đồ thị vô hướng G =(V, E).

Trang 13

● Ký hiệu tập đỉnh V = {1, 2, , n}, tập cạnh E = {e1, e2, , em} Ta

Trang 15

6 0 0 0 0 1 0

● Trong rất nhiều vấn đề ứng dụng của lý thuyết đồ thị, mỗi cạnh e = (u, v) của đồ thị được gán với một giá trị c(e) gọi là trọng số của cạnh e Ví dụ như đồ thị biểu diễn khoảng cách giữa 2 thành

với c[i,j] = c(i, j) nếu (i; j) ∈ E và c[i, j] = ∞ nếu (i; j) ∉ E Ma trận trọng số tương ứng với đồ thị trong hình 4:

Trang 16

● Trong trường hợp “đồ thị thưa” (đồ thị n đỉnh có số cạnh m thỏa mãn: m<6n) người ta thường dùng cách biểu diễn đồ thị dưới dạng danh sách cạnh

● Trong cách biểu diễn đồ thị bởi danh sách cạnh chúng ta sẽ lưu trữ danh sách tất cả các cạnh của đồ thị vô hướng (có hướng) Một cạnh e= (x, y) của đồ thị sẽ tương ứng với hai biến Dau[e], Cuoi[e] như vậy, để lưu trữ đồ thị ta cần sử dụng 2*m đơn vị bộ nhớ Nhược điểm của cách biểu diễn này là để xác định những định nào của đồ thị là kề với một đỉnh cho trước chúng ta phải làm cỡ m phép so sánh (khi duyệt qua danh sách tất cả các cạnh của đồ thị).

● Chú ý: Trong trường hợp đồ thị có trọng số ta cần thêm m đơn vị bộ nhớ để lưu trữ trọng số của các cạnh.

Trang 17

Đầu Cuối Đầu Cuối

Trang 18

❖ Danh sách đỉnh kề

● Trong rất nhiều vấn đề ứng dụng của lý thuyết đồ thị, cách biểu diễn đồ thị dưới dạng danh sách đỉnh kề là cách biểu diễn thích hợp nhất được sử dụng.

● Trong cách biểu diễn này, với mỗi đỉnh v của đồ thị chúng ta lưu trữ danh sách các đỉnh kề với nó, mà ta sẽ ký hiệu là Ke(v) = {u

V: (v, u) E}.

Hình 13: Danh sách đỉnh kề với đồ thị vô hướng (Hình 10)

Trang 19

Hình 14: Danh sách đỉnh kề với đồ thị có hướng (Hình 11)

b.

Trang 20

CHƯƠNG 2 BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT VÀ CÀIĐẶT

CHƯƠNG 3 TỔNG KẾT

Tài liệu tham khảo

Ngày đăng: 29/03/2024, 22:22

Tài liệu cùng người dùng

Tài liệu liên quan