Tìm đường đi ngắn nhất thuật toán dijkstra

10 676 1
Tìm đường đi ngắn nhất thuật toán dijkstra

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

Thông tin tài liệu

TRƯỜNG CAO ĐẲNG KỸ THUẬT LÝ TỰ TRỌNG KHOA CÔNG NGHỆ THÔNG TIN ĐỀ TÀI Tìm đường ngắn thuật toán Dijkstra GIÁO VIÊN HƯỚNG DẪN: Vũ Thái Linh SINH VIÊN THỰC HIỆN: Cao Hoàng Hà Huỳnh Văn ngọc Nguyễn Đại Tây LỚP: 11CĐ-TP1 TOÁN ỨNG DỤNG GVHD: Vũ Thị Thái Linh I Tiểu Sử Edsger Dijkstra Tiểu sử: Edsger Dijkstra 1.Sinh 11 / /1930 Rotterdam, Hà Lan Mất: /8 / 2002 (72 tuổi) Nuenen, Hà Lan 2.Edsger Wybe Dijkstra :là nhà khoa học máy tính Hà Lan Ông nhận giải thưởng Turing cho đóng góp có tính chất tảng lĩnh vực ngôn ngữ lập trình Không lâu trước chết, ông nhận giải Bài báo ảnh hưởng lớn lĩnh vực tính toán phân tán ACM dành cho báo khởi đầu cho ngành Tự ổn định Sau ông qua đời, giải thưởng thường niên đổi tên thành giải thưởng ACM Edsger W Dijkstra Dijkstra học vật lý lý thuyết Đại học Leiden, ông nhanh chóng nhận ông quan tâm đến lập trình Thời kỳ đầu, ông làm việc Trung tâm toán học, Viện nghiên cứu quốc gia toán học khoa học máy tính Amsterdam, ông giữ chức vị giáo sư Đại học Kỹ thuật Eindhoven, Hà Lan Đầu thập kỷ 1970, ông làm cộng tác nghiên cứu Burroughs Corporation, sau giữ vị trí Schlumberger Centennial Chair ngành Khoa học máy tính Đại học Texas Austin, Mỹ Ông nghỉ hưu năm 2000 Trong đóng góp ông cho ngành khoa học máy tính có thuật toán đường ngắn nhất, biết với tên Thuật toán Dijkstra, hệ điều hành THE cấu trúc semaphore để phối hợp hoạt động nhiều vi xử lý nhiều chương trình Một khái niệm khác lĩnh vực tính toán phân tán khởi đầu nhờ Dijkstra TOÁN ỨNG DỤNG GVHD: Vũ Thị Thái Linh self-stabilization - cách khác để đảm bảo tính đáng tin cậy hệ thống Thuật toán Dijkstra sử dụng SPF, Shortest Path First, dùng giao thức định tuyến OSPF, Open Shortest Path First Ông tiếng với đánh giá thấp lệnh GOTO lập trình máy tính Bài báo năm 1968 "A Case against the GO TO Statement" (EWD215) xem bước quan trọng tiến tới việc lệnh GOTO bị thay dần quy mô lớn cấu trúc lập trình chẳng hạn vòng lặp while Phương pháp gọi Lập trình có cấu trúc Dijkstra hâm mộ ngôn ngữ lập trình ALGOL 60, làm việc nhóm cài đặt trình biên dịch cho ngôn ngữ Từ năm 1970, mối quan tâm Dijkstra kiểm định hình thức (formal verification) Quan niệm phổ biến thời người ta nên đưa chứng minh toán học tính đắn chương trình sau viết chương trình Dijkstra phản đối chứng minh thu dài nặng nề, chứng minh không đem lại hiểu biết việc chương trình phát triển Một phương pháp khác dẫn xuất chương trình (program derivation), để "phát triển chứng minh chương trình cách đồng thời" Người ta bắt đầu đặc tả toán học mà chương trình cần phải thực hiện, sau áp dụng biến đổi toán học đặc tả chuyển thành chương trình chạy Chương trình thu gọi "đúng đắn theo cách xây dựng" (correct by construction) Dijkstra tiếng với luận ông lập trình; ông người tuyên bố việc lập trình có đặc điểm cố hữu khó khăn phức tạp đến mức lập trình viên cần phải khai thác kỹ thuật phương pháp trừu tượng hóa để hy vọng quản lý độ phức tạp cách thành công Ông tiếng với thói quen viết tay cẩn thận thảo bút máy Các thảo gọi EWD, Dijkstra đánh số chúng tiết đầu tố EWD Ông thường phân phát phô-tô EWD cho đồng nghiệp mình; người nhận lại phô-tô tiếp tục phân phát sao, cách EWD phát tán khắp cộng đồng khoa học máy tính quốc tế Các chủ đề TOÁN ỨNG DỤNG GVHD: Vũ Thị Thái Linh khoa học máy tính toán học, có báo cáo công tác, thư phát biểu Hơn 1300 EWD quét thành ảnh, số lượng chuyển thành dạng điện tử để phục vụ nghiên cứu ngày tăng, chúng lưu trữ cung cấp trực tuyến Đại học Texas[2] Dijkstra người tiên phong nghiên cứu tính toán phân tán Có người cho số báo ông thiết lập ngành nghiên cứu Cụ thể, báo "Self-stabilizing Systems in Spite of Distributed Control" ông khởi đầu ngành Self-stabilization Dijkstra ghi nhận đời sở hữu máy tính (vào cuối đời) họa hoằn thực sử dụng [3], để đôi với quan niệm ông khoa học máy tính trừu tượng không lập trình, quan niệm thể nhiều câu nói tiếng chẳng hạn "Khoa học máy tính máy tính thiên văn học kính thiên văn" (Computer Science is no more about computers than astronomy is about telescopes.)[4] Ông qua đời Nuenen, Hà Lan vào ngày tháng 8, năm 2002 sau thời gian dài bị ung thư Năm sau, giải thưởng PODC Influential Paper Award in distributed computing (bài báo ảnh hưởng lĩnh vực tính toán phân tán) tổ chức ACM (Association for Computing Machinery) đổi tên thành Giải thưởng Dijkstra để vinh danh ông III Định nghĩa Dijkstra Thuật toán Dijkstra( mang tên nhà khoa học máy tính người Hà Lan Edsger Dijkstra vào năm 1956 ấn năm 1959[1]) thuật toán giải toán đường ngắn nguồn đơn đồ thị có hướng cạnh mang trọng số âm Thuật toán thường sử dụng định tuyến với chương trình thuật toán đồ thị hay công nghệ Hệ thống định TOÁN ỨNG DỤNG GVHD: Vũ Thị Thái Linh VI.Bài Toán Dijkstra Cho đồ thị G với tập đỉnh V tập cạnh E (đồ thị có hướng vô hướng) Mỗi cạnh đồ thị gán nhãn (giá trị không âm), nhãn gọi giá trị cạnh Cho trước đỉnh xác định v, gọi đỉnh nguồn Tìm đường ngắn từ đỉnh v đến đỉnh lại G (Tức tìm đường từ v đến đỉnh lại với tổng giá cạnh đường nhỏ nhất) Nếu đồ thị có hướng đường đường có hướng V.Thuật Toán Dijkstra : Ta giải toán cách xác định tập `V } Sau bước ta thêm vào S đỉnh mà khoảng cách từ đến v ngắn Với giả thiết cung có giá trị không âm ta luôn tìm đường ngắn mà qua đỉnh tồn S Ðể dễ dàng chi tiết hóa giải thuật, giả sử G có n đỉnh nhãn cung lưu mảng C, tức C[i, j] giá trị(có thể xem độ dài) cung (i, j) Nếu i j cung nối ta cho C[i, j] =Ġ Ta dùng mảng D có n phần tử để lưu độ dài đường ngắn từ v đến đỉnh đồ thị Khởi đầu giá trị độ dài cạnh (v, i), tức D[i] = C[v, i] Tại bước giải thuật D[i] lưu độ dài đường ngắn từ đỉnh v đến đỉnh i, đường qua đỉnh có S Ðể cài đặt giải thuật dễ dàng, ta giả sử đỉnh đồ thị đánh số từ đến n đỉnh nguồn đỉnh1.Dưới giải thuật Dijkstra để giải toán : procedure Dijkstra; begin S := [1] ; { S chứa đỉnh nguồn } for i:=2 to n D[i] := C[1, i] ; { Khởi đầu giá trị cho D } for i:=1 to n - begin Lấy đỉnh w V - S cho D[w] nhỏ ; Thêm w vào S ; for đỉnh u thuộc V - S D[u] := Min (D[u], D[w] + C[w, u]) ; end; end; Nếu muốn lưu trữ lại đỉnh đường ngắn để xây dựng lại đường từ đỉnh nguồn đến đỉnh khác, ta dùng mảng P Mảng lưu P[u] = w với đỉnh u đỉnh TOÁN ỨNG DỤNG GVHD: Vũ Thị Thái Linh trước đỉnh w đường ngắn Lúc khởi đầu ta cho P[u] = 1, với u khác Giải thuật Dijkstra viết lại sau : procedure Dijkstra ; begin S := [1] ; { S chứa đỉnh nguồn } for i:=2 to n begin D[i] := C[1, i] ; { Khởi đầu giá trị cho D } P[i] := ; { Khởi đầu giá trị cho P } end ; for i:=1 to n - begin Lấy đỉnh w V - S cho D[w] nhỏ ; Thêm w vào S ; for đỉnh u thuộc V - S if (D[w] + C[w, u] < D [u]) then begin D[u] := D[w] + C[w, u] ; P[u] := w ; end ; end; end; Ví dụ : Áp dụng giải thuật Dijkstra cho đồ thị hình sau: Bước lặp Đỉnh Đỉnh Đỉnh Đỉnh Đỉnh Khởi tạo O,1* ∞,1 ∞,1 ∞,1 ∞,1 - 2,1 ∞,1 1,1* 1,1 - 2,1 3,4 - 1,1* - 2,1* 3,4 - - TOÁN ỨNG DỤNG GVHD: Vũ Thị Thái Linh - - 3,4* - - Viết lại O,1 2,1 3,4 1,1 1,1 Mãng P có giá trị sau : p 1 từ kết ta suy đường ngắn từ đỉnh 13 từ 143 có độ dài procedure DijksTra; begin t:=false; t[u0]:=true; d[i]:=c[u0,i];{Neu khong co duong di thi d[i]=i’} k:=1;{Da ket nap duoc dinh} while kdo begin {Tim min} min:=i’; for i:=1 to n if (d[i]d[u]+c[u,i] then if not((d[i]=i’)and(d[u]=i’)and(c[u,i]=i’)) then begin d[i]:=d[u]+c[u,i]; truoc[i]:=u end end; if d[v0]=i’ then KhongCoDuongDi else QuayLaiMangTruocDeTimDuong end; Người thực hiện: Huỳnh Văn Ngọc STT Công việc Họp nhóm: • • • Kết hoạt động hoàn thành Chọn dề tài Phân tích nội dung đề tài Phân tích thuật toán Tìm tài liệu tham khảo hoàn thành Thực code: hoàn thành • • Đóng góp ý kiến code Làm report tổng kết Họp nhóm bàn báo cáo: (họp nhóm trên TV trường) hoàn thành TOÁN ỨNG DỤNG • • • GVHD: Vũ Thị Thái Linh Xây dựng dàn thuyết trình Thông qua ý kiến thành viên Thống phần thuyết trình Phối hợp với nhóm hoàn thành hoàn thành thuyết trình Báo cáo hoàn tất nộp cho giáo hoàn thành viên hướng dẫn VI MỤC LỤC I Lời Mở Đầu II Nội Dung……….………………………………………………………………5 • Tiểu Sử Dijkstra ……………………………………………………………… III.Định nghĩa Dijkstra…………………………………………7 IV Bài Toán Dijkstra…………………………………………………………9 V Thuật toán Dijsktra…………………………………………………….… 10 V.Mục Lục……………………………………………………….12 10 TOÁN ỨNG DỤNG GVHD: Vũ Thị Thái Linh NHẬN XÉT CỦA GIÁO VIÊN ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ………………………………………………………………………………………

Ngày đăng: 11/06/2016, 18:04

Từ khóa liên quan

Mục lục

  • TRƯỜNG CAO ĐẲNG KỸ THUẬT LÝ TỰ TRỌNG

  • KHOA CÔNG NGHỆ THÔNG TIN

    • Người thực hiện: Huỳnh Văn Ngọc

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

Tài liệu liên quan