1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tìm đường đi ngắn nhất dijkstra

15 7 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 15
Dung lượng 846,8 KB
File đính kèm Cấu trúc dữ liệu và giải thuật.zip (733 KB)

Nội dung

Bài thảo luận học phần cấu trúc dữ liệu và giải thuật đề tài tìm đường đi ngắn nhất dijkstra. Bài thảo luận gồm các nội dung sau: Một số khái niệm về đồ thị, đường đi, ý tưởng và các bước thuật toán tìm đường đi ngắn nhất, chương trình code minh hoạ

TRƯỜNG ĐẠI HỌC THƯƠNG MẠI KHOA HTTTKT & TMĐT -🙞🙜🕮🙞🙜 - BÀI THẢO LUẬN HỌC PHẦN: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT ĐỀ TÀI: TÌM ĐƯỜNG ĐI NGẮN NHẤT – DIJKSTRA Giảng viên: Cù Nguyên Giáp Nhóm thực hiện: Mã lớp học phần: 2231INFO1311 Hà Nội – 2022 DANH SÁCH THÀNH VIÊN NHÓM Họ tên Mã sinh viên Phạm Thị Uyên 20D190113 Nguyễn Thị Phương Vy 20D190054 Hồ Hải Yến 20D190114 MỤC LỤC LỜI MỞ ĐẦU I Một số khái niệm liên quan .2 1.1 Đồ thị 1.2 Đường .2 1.3 Đường ngắn .2 II Ý tưởng bước thuật toán .3 III Đánh giá độ phức tạp thuật toán IV Chương trình minh họa KẾT LUẬN .11 TÀI LIỆU THAM KHẢO .12 LỜI MỞ ĐẦU Lý thuyết đồ thị ngành học phát triển từ lâu lại có nhiều ứng dụng đại Những ý tưởng nhà tốn học Thụy sĩ vĩ đại Leonhard Euler đưa từ kỷ 18 Đồ thị cấu trúc rời rạc gồm đỉnh cạnh nối đỉnh Đây cơng cụ hữu hiệu để mơ hình hóa giải tốn nhiều lĩnh vực khoa học, kỹ thuật, kinh tế, xã hội, Môn cấu trúc liệu giải thuật môn học hấp dẫn, mang tính thực tế cao Những vấn đề mơn học như: tốn đường đi, cây, mạng nhiều người quan tâm, nghiên cứu Bài tốn tìm đường ngắn toán quan trọng lý thuyết đồ thị, áp dụng để giải nhiều toán thực tế điều khiển tối ưu, giao thơng vận tải, mạng viễn thơng Vì vậy, nghiên cứu vấn đề cần thiết giải nhiều khó khăn, phức tạp nảy sinh từ thực tế sống Do đó, nhóm chúng em chọn đề tài: ''Tìm đường ngắn – Dijkstra'' I Một số khái niệm liên quan 1.1 Đồ thị Một đổ thị (graph) G (V, E) bao gồm tập hợp hữu hạn V nút, hay đỉnh (vertices) tập hợp hữu hạn E cặp đỉnh mà ta gọi cung Nếu (v1, v2) cặp đỉnh thuộc E ta nói: có cung nối v1 v2 Nếu cung v1, v2 (khác với cung ( v2, v1) ta có đồ thị định hướng (dirccied graph hay digraph) Lúc (v1, v2) gọi cung định hướng v1, v2 Nếu thứ tự nút cung không coi trọng ta gọi đồ thị khơng định hướng (undirected graph) Bảng hình vẽ biểu diễn thị hình sau: Mạch điện, mạng lưới giao thơng, mạng lưới máy tính…là ví dụ thực tế đồ thị Nếu (v1, v2) cung tập E(G) v1 v2 gọi lân cận (adjacent) 1.2 Đường Đường (walk/path): chuỗi luân phiên đỉnh cạnh, bắt đầu kết thúc đỉnh Trong đó, đỉnh đỉnh đầu cuối hai cạnh đứng liền trước liền sau chuỗi, đỉnh đứng liền trước liền sau cạnh đỉnh đầu cuối cạnh Khi có hai cạnh giống chuỗi loại bỏ bớt cạnh trùng nhau, cho khơng có cạnh đồ thị có mặt lần đường Một đường đơn (simple path) đường mà đỉnh đó, trừ đỉnh đầu đỉnh cuối, khác Một chu trình (cycle) đường đơn mà đỉnh đầu đỉnh cuối trùng 1.3 Đường ngắn Trong lý thuyết đồ thị, toán đường ngắn tốn tìm đường hai đỉnh cho tổng trọng số cạnh tạo nên đường nhỏ Định nghĩa cách hình thức, cho trước đồ thị có trọng số (nghĩa tập đỉnh V, tập cạnh E, hàm số có giá trị thực f : E → R), cho trước đỉnh v thuộc V, tìm đường P v tới đỉnh v' thuộc V cho : ∑ 𝑓(𝑝) 𝑝∈𝑃 nhỏ tất đường nối từ v tới v' II Ý tưởng bước thuật toán Thuật toán Dijkstra tối ưu hóa đường cách xét cạnh (w, 𝑣), so sánh hai đường 𝑆→𝑣 sẵn có với đường 𝑆→w→𝑣 Thuật toán hoạt động cách trì tập hợp đỉnh ta biết chắn đường ngắn Mỗi bước, thuật toán chọn đỉnh w mà chắn khơng thể tối ưu nữa, sau tiến hành tối ưu đỉnh 𝑣 khác dựa cạnh (w,𝑣) từ đỉnh w Sau N bước, tất đỉnh chọn, dường tìm ngắn Cụ thể hơn, thuật tốn trì đường ngắn đến tất đỉnh Ở bước, chọn đường 𝑆→w có tổng trọng số nhỏ tất đường trì Sau tiến hành tối ưu đường 𝑆→𝑣 cách thử kéo thành 𝑆→w→𝑣 mô tả Cho đồ thị có hướng (hoặc vơ hướng) với cạnh có trọng số G=(V,E) Trọng số cạnh xem khoảng cách đỉnh Cho trước đỉnh v0, gọi đỉnh nguồn Tìm đường ngắn ngắn từ v0 đến đỉnh lại G Các bước thuật toán: Tập đỉnh đồ thị V, gọi S tập đỉnh lấy từ V Bước 1: Khởi đầu ta cho S bao gồm đỉnh nguồn v0 S = {v0} Sau bước đưa đỉnh V vào tập hợp S cho tập hợp S tập hợp V Bước 2: Chọn đỉnh w thuộc tập hợp V-S (nằm tập hợp S) cho độ dài đường từ v0 đến w ngắn ta thêm w vào tập hợp S Bước 3: Lặp lại bước n-1 lần tập hợp S bao gồm đỉnh tập hợp V tìm đường ngắn từ v0 mà đường qua đỉnh tồn S Thiết kế thuật toán Dijkstra để xác minh đường ngắn - Ma trận A để lưu độ dài cạnh, tức A[i,j] độ dài cạnh (i,j), khơng có cạnh (i,j) A[i,j]= vơ - Mảng S[n] lưu số 1, biểu diễn tập hợp S: S[v]==1 => v thuộc S S[v] == => v thuộc V-S - Khởi đầu S[v0]=1, S[v]=0 Tại bước w đưa vào S => đặt S[w]=1 - Mảng D[n] để lựu độ dài đường ngắn từ v0 đến đỉnh đồ thị - Khởi đầu D[V]= A[v0, v] - Tại bước, cập nhật lại D[v] để lưu độ dài đường ngằn từ đỉnh v0 tới đỉnh v, đường qua đỉnh có S - Đê lưu lại đỉnh đường ngắn nhất, ta dùng mảng P[n] - P[V]= w với w đỉnh "trước" đỉnh v đường Khởi đầu P[v]= v0 với đỉnh v Tại bước lặp, cập nhật lại P[V] Từ đỉnh đích, sử dụng mảng P, lần ngược lại đỉnh nguồn v0 để xác định đường ngắn từ v0 đến đích void Dijkstra(){ for (v=0;v

Ngày đăng: 22/09/2023, 17:06

w