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

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

10 679 1

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 511,83 KB

Nội dung

Không lâu trước khi chết, ông đã được nhận giải Bài báo ảnh hưởng lớn trong lĩnh vực tính toán phân tán của ACM dành cho bài báo đã khởi đầu cho ngành con Tự ổn định.. Trong các đóng góp

Trang 1

ĐỀ TÀI

Tìm đường đi ngắn nhất 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

Trang 2

I Tiểu Sử Edsger Dijkstra

Tiểu sử: Edsger Dijkstra

1.Sinh 11 / 5 /1930 tại Rotterdam, Hà Lan Mất: 6 /8 / 2002 (72 tuổi) tại Nuenen, Hà Lan

2.Edsger Wybe Dijkstra :là nhà khoa học máy tính Hà Lan Ông được nhận giải thưởng Turing cho các đóng góp có tính chất nền tảng trong lĩnh vực ngôn ngữ lập trình Không lâu trước khi chết, ông đã được nhận giải Bài báo ảnh hưởng lớn trong lĩnh vực tính toán phân tán của ACM dành cho bài báo đã khởi đầu cho ngành con Tự ổn định Sau khi ông qua đời, giải thưởng thường niên này đã được đổi tên thành giải thưởng ACM Edsger W Dijkstra.

Dijkstra học vật lý lý thuyết tại Đại học Leiden, nhưng ông đã nhanh chóng nhận ra rằng ông quan tâm đến lập trình hơn

Thời kỳ đầu, ông làm việc tại Trung tâm toán học, Viện nghiên cứu quốc gia về toán học và khoa học máy tính tại Amsterdam, ông còn giữ chức vị giáo sư tại Đạ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 tại Burroughs Corporation, sau đó giữ vị trí Schlumberger Centennial Chair ngành Khoa học máy tính tại Đại học Texas tại Austin, Mỹ Ông nghỉ hưu năm 2000

Trong các đóng góp của ông cho ngành khoa học máy tính có thuật toán đường đi ngắn nhất, còn được biết với tên Thuật toán Dijkstra, hệ điều hành THE và cấu trúc semaphore để phối hợp hoạt động của nhiều bộ vi xử lý và nhiều chương trình Một khái niệm khác trong lĩnh vực tính toán phân tán đã được khởi đầu nhờ Dijkstra là

Trang 3

self-stabilization - một cách khác để đảm bảo tính đáng tin cậy của hệ thống Thuật toán Dijkstra được sử dụng trong SPF, Shortest Path First, dùng trong giao thức định tuyến OSPF, Open Shortest Path First

Ông còn nổi tiếng với đánh giá thấp về lệnh GOTO trong lập trình máy tính Bài báo năm 1968 "A Case against the GO TO Statement" (EWD215) được xem là một bước quan trọng tiến tới việc lệnh GOTO bị thay thế dần trên quy mô lớn bởi các cấu trúc lập trình chẳng hạn như vòng lặp while Phương pháp này còn được gọi là Lập trình

có cấu trúc Dijkstra đã rất hâm mộ ngôn ngữ lập trình ALGOL 60, và đã làm việc trong nhóm cài đặt trình biên dịch đầu tiên cho ngôn ngữ này

Từ những năm 1970, mối quan tâm chính của Dijkstra là kiểm định hình thức (formal verification) Quan niệm phổ biến thời đó là người ta nên đưa ra một chứng minh toán học về tính đúng đắn của chương trình sau khi đã viết chương trình đó Dijkstra đã phản đối rằng các chứng minh thu được rất dài và nặng nề, và rằng chứng minh đó không đem lại hiểu biết về việc chương trình đã được phát triển như thế nào Một phương pháp khác là dẫn xuất chương trình (program derivation), để "phát triển chứng minh và chương trình một cách đồng thời" Người ta bắt đầu bằng một đặc tả toán học về những gì mà một chương trình cần phải thực hiện, sau đó áp dụng các biến đổi toán học đối với đặc tả đó cho đến khi nó được chuyển thành một chương trình chạy được Chương trình thu được khi đó được gọi là "đúng đắn theo cách xây dựng" (correct by construction)

Dijkstra còn nổi tiếng với các bài luận của ông về lập trình; ông là người đầu tiên tuyên bố rằng việc lập trình có đặc điểm cố hữu là khó khăn và phức tạp đến mức các lập trình viên cần phải khai thác mọi kỹ thuật và các phương pháp trừu tượng hóa có thể để hy vọng có thể quản lý được độ phức tạp của nó một cách thành công Ông còn nổi tiếng với thói quen viết tay cẩn thận các bản thảo bằng bút máy Các bản thảo này được gọi là EWD, do Dijkstra đánh số chúng bằng tiết đầu tố EWD Ông thường phân phát các bản phô-tô của bản EWD mới cho các đồng nghiệp của mình; những người nhận được lại phô-tô và tiếp tục phân phát các bản sao, bằng cách đó các bản EWD được phát tán khắp cộng đồng khoa học máy tính quốc tế Các chủ đề chính là về

Trang 4

khoa học máy tính và toán học, ngoài ra còn có các báo cáo công tác, thư và các bài phát biểu Hơn 1300 bài EWD đã được quét thành ảnh, số lượng được chuyển thành dạng điện tử để phục vụ nghiên cứu ngày càng tăng, chúng được lưu trữ và cung cấp trực tuyến tại Đại học Texas[2]

Dijkstra đã là một trong những người tiên phong trong nghiên cứu về tính toán phân tán Có người còn cho là một số bài báo của ông đã thiết lập ngành nghiên cứu này

Cụ thể, bài báo "Self-stabilizing Systems in Spite of Distributed Control" của ông đã khởi đầu ngành con Self-stabilization

Dijkstra còn được ghi nhận là cả đời chỉ sở hữu duy nhất một chiếc máy tính (vào cuối đời) và họa hoằn mới thực sự sử dụng nó [3], để đi đôi với quan niệm của ông rằng khoa học máy tính trừu tượng hơn chứ không chỉ là lập trình, quan niệm này được thể hiện trong nhiều câu nói nổi tiếng chẳng hạn như "Khoa học máy tính đối với máy tính cũng như thiên văn học đối với kính thiên văn" (Computer Science is no more about computers than astronomy is about telescopes.)[4]

Ông qua đời tại Nuenen, Hà Lan vào ngày 6 tháng 8, năm 2002 sau một 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 trong lĩnh vực tính toán phân tán) của tổ chức ACM (Association for Computing Machinery) đã được đổ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 của nhà khoa học máy tính người Hà Lan Edsger Dijkstra vào năm 1956 và ấn bản năm 1959[1]) là một thuật toán giải quyết bài toán

đường đi ngắn nhất nguồn đơn trong một đồ thị có hướng không có cạnh mang trọng

số âm Thuật toán thường được sử dụng trong định tuyến với một chương trình con trong các thuật toán đồ thị hay trong công nghệ Hệ thống định

Trang 5

VI.Bài Toán Dijkstra

Cho đồ thị G với tập đỉnh V và tập các cạnh E (đồ thị có hướng hoặc vô hướng) Mỗi cạnh của đồ thị được gán một nhãn (giá trị không âm), nhãn này còn được gọi là giá trị của cạnh Cho trước một đỉnh xác định v, gọi là đỉnh nguồn Tìm đường đi ngắn nhất từ đỉnh v đến các đỉnh còn lại của G (Tức là tìm đường đi từ v đến các đỉnh còn lại với tổng các giá của các cạnh trên đường đi là nhỏ nhất) Nếu như đồ thị có hướng thì đường đi này là đường đi có hướng

V.Thuật Toán Dijkstra : Ta có thể giải bài toán bằng cách xác định một tập

`V } Sau đó tại mỗi bước ta sẽ thêm vào S các đỉnh mà khoảng cách từ nó đến v là ngắn nhất Với giả thiết rằng mỗi cung có một giá trị không âm thì ta luôn luôn tìm được một đường đi ngắn nhất như vậy mà chỉ đi qua các đỉnh đã tồn tại trong S Ðể dễ dàng chi tiết hóa giải thuật, giả sử

G có n đỉnh và nhãn trên mỗi cung được lưu trong mảng C, tức là C[i, j] bằng giá trị(có thể xem

là độ dài) của cung (i, j) Nếu i và j không có cung nối thì ta cho C[i, j] =Ġ Ta sẽ dùng một mảng

D có n phần tử để lưu độ dài của đường đi ngắn nhất từ v đến mỗi đỉnh của đồ thị Khởi đầu thì giá trị này chính là độ dài cạnh (v, i), tức D[i] = C[v, i] Tại mỗi bước của giải thuật thì D[i] sẽ lưu độ dài đường đi ngắn nhất từ đỉnh v đến đỉnh i, đường đi này chỉ đi qua các đỉnh đã có trong

S

Ðể cài đặt giải thuật dễ dàng, ta giả sử các đỉnh của đồ thị được đánh số từ 1 đến n và đỉnh nguồn

là đỉnh1.Dưới đây là giải thuật Dijkstra để giải bài toán trên :

procedure Dijkstra;

begin

S := [1] ; { S chỉ chứa đỉnh nguồn }

for i:=2 to n do

D[i] := C[1, i] ; { Khởi đầu các giá trị cho D }

for i:=1 to n - 1 do

begin

Lấy đỉnh w trong V - S sao cho D[w] là nhỏ nhất ;

Thêm w vào S ;

for mỗi đỉnh u thuộc V - S do

D[u] := Min (D[u], D[w] + C[w, u]) ;

end;

end;

Nếu muốn lưu trữ lại các đỉnh trên đường đi ngắn nhất để có thể xây dựng lại đường đi này từ đỉnh nguồn đến các đỉnh khác, ta dùng một mảng P Mảng này sẽ lưu P[u] = w với đỉnh u là đỉnh

Trang 6

trước của đỉnh w trên đường đi ngắn nhất Lúc khởi đầu ta cho P[u] = 1, với mọi u khác 1

Giải thuật Dijkstra ở trên sẽ được viết lại như sau :

procedure Dijkstra ;

begin

S := [1] ; { S chỉ chứa đỉnh nguồn }

for i:=2 to n do

begin

D[i] := C[1, i] ; { Khởi đầu các giá trị cho D }

P[i] := 1 ; { Khởi đầu các giá trị cho P }

end ;

for i:=1 to n - 1 do

begin

Lấy đỉnh w trong V - S sao cho D[w] là nhỏ nhất ;

Thêm w vào S ;

for mỗi đỉnh u thuộc V - S do

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 1 Đỉnh 2 Đỉnh 3 Đỉnh 4 Đỉnh 5

Trang 7

-4 - - 3,4* -

Mãng P có giá trị như sau :

từ kết quả trên ta có thể suy ra rằng đường đi ngắn nhất từ đỉnh 13 là từ 143 có độ dài

là 3

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 1 dinh}

while kdo

begin

{Tim min}

min:=i’;

for i:=1 to n do

if (d[i]<MIN)and(not t[i])then

begin

u:=i;

min:=d[u]

end;

Trang 8

t[u]:=true;{thêm u vao tập đỉnh}

inc(k);

{Tính lại đường đi}

for i:=1 to n do

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

1 Họp nhóm:

• Chọn dề tài

• Phân tích nội dung đề tài

• Phân tích thuật toán

hoàn thành

2 Tìm tài liệu tham khảo hoàn thành

3 Thực hiện code:

• Đóng góp ý kiến về code

• Làm report tổng kết

hoàn thành (họp nhóm trên trên TV

trường)

4 Họp nhóm bàn về bài báo cáo: hoàn thành

Trang 9

• Xây dựng dàn bài thuyết trình

• Thông qua ý kiến của từng thành viên

• Thống nhất các phần trong bài thuyết trình

5 Phối hợp với nhóm hoàn thành bài thuyết trình

hoàn thành

6 Báo cáo hoàn tất nộp cho giáo viên hướng dẫn

hoàn thành

VI MỤC LỤC

I Lời Mở Đầu 4

II Nội Dung……….………5

Tiểu Sử Dijkstra ……… 5

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

Trang 10

NHẬN XÉT CỦA GIÁO VIÊN

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w