1. Trang chủ
  2. » Công Nghệ Thông Tin

Ly thuyet ve thuat toan sắp xếp topo và giải thuậ dijkstra

28 190 3

Đ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 28
Dung lượng 534,85 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đồ thị có trọng số trên các cạnh có thể sử dụng để giải các bài toán như : tìm đường đi ngắn nhất giữa hai thành phố trong cùng một mạng giao thông.. GIỚI THIỆU VỀ GIẢI THUẬT DIJKSTRA: T

Trang 1

VIỆN ĐÀO TẠO CHẤT LƯỢNG CAO KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO BÀI TẬP PHÂN TÍCH THIẾT KẾ GIẢI THUẬT

Trang 2

MỤC LỤC

PHẦN I: LỜI NÓI ĐẦU……….3

PHẦN II: SẮP XẾP TOPO………4

1 GIỚI THIỆU VỀ SẮP XẾP TOPO………4

2 MÔ TẢ VÀ PHÂN TÍCH ĐỘ PHỨC TẠP……… 5

3 CODE MẪU……… 11

4 KẾT LUẬN VÀ ĐÁNH GIÁ………13

PHẦN III: GIẢI THUẬT DJIKSTRA……….14

1 GIỚI THIỆU VỀ GIẢI THUẬT DJIKSTRA………14

2 MÔ TẢ VÀ PHÂN TÍCH ĐỘ PHỨC TẠP……… 15

3 CODE MẪU……… 25

4 KẾT LUẬN VÀ ĐÁNH GIÁ……….27

Trang 3

PHẦN I: LỜI NÓI ĐẦU

Lý thuyết đồ thị là một lĩnh vực nghiên cứu đã có từ lâu đờivà có nhiều ứng dụng hiện đại.Những tư tưởng cơ bản của lý thuyết đồ thị đươc đề xuất từ những năm đầu của thế kỷ 18 bởi nhà toán học lỗi lạc người Thụy Sĩ Leonhard Euler.Chính ông làngười đã sử dụng đồ thị để giải bài toán nổi tiếng về các cái cầu ở thàng phố

Konigsberg Đồ thị được sử dụng để giải quyết các bài toán trong nhiều lĩnh vực khác nhau Chẳng hạn , đồ thị có thể sử dụng để xác định các mạch vòng trong vấn đề giải tích mạch điện.Chúng ta có thể phân biệt các hợp chất hoá học hữu cơ khác nhau với cùng công thức phân tử nhưng khác nhau về cấu trúc phân tử nhờ đồ thị.Chúng ta có thể xác định xem hai máy tính trong mạng có thể trao đổi thông tin được với nhau haykhông nhờ mô hình đồ thị của mạng máy tính Đồ thị có trọng số trên các cạnh có thể

sử dụng để giải các bài toán như : tìm đường đi ngắn nhất giữa hai thành phố trong cùng một mạng giao thông Chúng ta còn sử dụng đồ thị để giải các bài toán về lập lịch,thời khoá biểu,và phân bố tần số cho các trạm phát thanh và truyền hình Mục đích ta tìm hiểu là nhằm giới thiệu các khái niệm cơ bản,các bài toán ứng dụng quan trọng của lý thuyết đồ thị như bài toán cây khung nhỏ nhất , bài toán tìm đường đi ngắn nhất và những thuật toán để giải quyết chúng đã được trình bày chi tiết cùng với việc phân tích và hướng dẫn cài đặt chương trình trên máy tính

3 | P a g e

Trang 4

PHẦN II: SẮP XẾP TOPO

1

GIỚI THIỆU VỀ SẮP XẾP TOPO:

- Thông thường đối với một công việc lớn bao giờ ta cũng cần phải chia nó thành nhiều phần để thực hiện Có những phần việc có thể thực hiện được độc lập nhưng cũng có những phần việc chỉ thực hiện được khi một số phần việc khác đã được làm xong

- Sắp xếp topo (topological sorting) là một trong những bài toán có tính ứng dụng cao cả trong Tin học lẫn Toán học và đời sống thường ngày Đây là quátrình sắp xếp một dãy các phần tử sao cho thứ tự mới vẫn đảm bảo được thứ

tự cục bộ (một cách nôm na có nghĩa là thứ tự được xác định đối với một vàicặp phần tử chứ không phải là tất cả các phần tử) vốn có của chúng Nhờ sắpxếp topo mà ta có thể tính được thời gian tối thiểu để thực hiện một chuỗi các công việc

- Ý tưởng sắp xếp topo là dựa trên DFS (tìm kiếm theo độ sâu) Điều kiện để thực hiện topological sorting đó là DAG (đồ thị không có chu trình) Thực

tế, thông qua việc sắp xếp, ta có thể kiểm tra xem đồ thị đó có chứa chu trìnhhay không Một đồ thị không có chu trình sẽ có ít nhất 1 sắp xếp topo

- VD: Trong một số trường ĐH ở VN hiện nay, có những học phần gọi là học phần tiên quyết mà sinh viên buộc phải hoàn thành trước khi học các học phần khác Nếu học phần v là học phần tiên quyết đối với học phần w, kí hiệu là u<v (Quan hệ “<” là một quan hệ thứ tự riêng phần và đọc là “đứng trước”) Sắp xếp topo ở đây cónghĩa là đưa ra thứ tự học các học phần sao cho mọi học phần phải được học sau các học phần tiên quyết của nó

Trang 5

PHẦN II: SẮP XẾP TOPO

2 MÔ TẢ VÀ PHÂN TÍCH CÁCH THỨC HOẠT ĐỘNG:

- Công việc của sắp xếp Topo: Cho đồ thị có hướng không chu trình (DAG) Tìm cách sắp xếp thứ tự các đỉnh sao cho với mọi cung từ u đến v trong đồ thị, u luôn nằm trước v

- Ý tưởng: Thêm ngẫu nhiên một đỉnh uu không có cung vào ở trạng thái hiện tại của đồ thị vào trong mảng topo, bỏ tất cả các cung đi ra từ uu đi và lặp lại như bước đầu cho tới khi tập đỉnh của đồ thị hiện tại rỗng

Xem xét:

 Thuật toán này được phát hiện bởi Kahn vào năm 1962

 Khi ta thêm một đỉnh uu ngẫu nhiên không có cung vào ở trạng thái hiện tại của đồ thị vào mảng topo, tất cả các cung vào uu ở đồ thị ban đầu đều xuất phát từ các đỉnh đứng trước uu trong mảng topo đi tới uu do bước bỏ các cung đi ra từ một đỉnh đã được sắp xếp

 Nếu đồ thị tồn tại trạng thái không tồn tại một đỉnh không có cung vào mà tập cạnh khi đó khác rỗng, hoặc số lượng đỉnh trong mảng topo

khác ∣V∣∣V∣ thì chứng tỏ đồ thị có chu trình, và không phải một DAG

- Sắp xếp Topo của một đồ thị có hướng G(V,) là một cách sắp xếp các đỉnh trên

một đường thẳng sao cho với mỗi cung (u→v)∈, đỉnh u nằm bên trái đỉnh v trên đường thẳng đó.Từ định nghĩa của săp xếp Topo ta có thể dễ dàng thấy rằng

nếu G(V,) có một sắp xếp Topo thì G(V,) không thể có một chu trình có hướng Hay nói cách khác, G(V,) là một DAG Ngược lại, cho một DAG G(V,), luôn tồn tại một sắp xếp Topo cho G(V,)

*Chú thích: + V là tập các đỉnh hoặc các nút.

+ E là tập các cặp chứa các đỉnh phân biệt, được gọi là cạnh

5 | P a g e

Trang 6

- Xóa C ra khỏi đồ thị (6)

- Chọn D làm stack và thực hiện D (7)

Trang 7

 Độ phức tạp của đồ thị trên là O(10)

 Kết luận: Độ phức tạp của thuật toán sắp xếp topo có công thức là O(|V|+|E|)

- Đồ thị mô phỏng:

7 | P a g e

Trang 8

VD 2: Tại một nhà máy lắp ráp ô tô, công việc lắp ráp ô tô có thể được chia thành các nhiệm vụ sau:

1 Xây dựng khung

2 Lắp động cơ, linh kiện, bình xăng

3 Lắp phanh, bánh xe, lốp xe

4 Lắp đặt bảng điều kiển, sàn, ghế ngồi

5 Lắp đặt đường dây điện

Trang 9

- Dựa vào đồ thị mô phỏng mà chia ra các task thứ tự thực hiện:

9 | P a g e

Trang 10

- Tính toán thời gian tối thiểu để hoàn thành toàn bộ quá trình

 Thời gian tối thiểu để hoàn thành toàn bộ quá trình là 24 tiếng

 Độ phức tạp của đồ thị trên là O(22)

Trang 11

3 CODE MẪU:

11 | P a g e

Trang 12

Kết quả cho ra:

Đồ thị mô phỏng:

Trang 13

4 KẾT LUẬN VÀ ĐÁNH GIÁ:

- Sắp xếp Topo có ứng dụng cao trong đời sống Ta có thể sử dụng thuật toán sắp xếp Topo để tạo nên sơ đồ học phần, sơ đồ lắp ráp xe máy, thao tác nhảy lò cò,…

và biết được thời gian tối thiểu để hoàn thành chúng

- Độ phức tạp theo trường hợp xấu nhất: Θ (| V | + | E |)

- Độ phức tạp của trường hợp trung bình : Θ (| V | + | E |)

- Độ phức tạp của trường hợp tốt nhất: Θ (| V | + | E |)

- Độ phức tạp theo không gian: Θ (| V |)

=> Thuật toán trên là DFS với một ngăn xếp phụ Vì vậy, độ phức tạp thời gian giống như DFS là O (V + E)

13 | P a g e

Trang 14

PHẦN III: GIẢI THUẬT DIJKSTRA

1 GIỚI THIỆU VỀ GIẢI THUẬT DIJKSTRA:

Trong đời sống chúng ta thường gặp những tình huống như sau : để đi từ địa điểm A đến địa điểm B trong thành phố, có nhiều đường đi, nhiều cách đi; có lúc ta chọn đường đi ngắn nhất ( theo nghĩa cự ly ), có lúc lại cần chọn đường đi nhanh nhất ( theo nghĩa thời gian ) và có lúc phải cân nhắc để chọn đường đi rẻ tiền nhất ( theo nghĩa chi phí ),…

Có thể coi sơ đồ của đường đi từ A đến B trong thành phố là một đồ thị, với đỉnh các giao lộ ( A và B coi như giao lộ ), cạnh là đoạn đường nối giữa hai giao lộ Trên mỗi cạnh của đồ thị này, ta gán một số dương, ứng với các độ dài của đoạn đường, thời gian đi đoạn đường hoặc cước phí vận chuyển trên đoạn đường đó,…

Đồ thị có trọng số là đồ thị G=(V, E) mà mỗi cạnh ( hoặc cung ) e E được gán bởi một số thực m(e), gọi là trọng số của cạnh ( hoặc cung ) e

Trong phần này, trọng số của mỗi cạnh được xét là một số dương và còn gọi là chiều dài của cạnh đó Mỗi đường đi từ đỉnh u đến đỉnh v, còn chiều dài là m(u,v), bằng tổng chiều dài các cạnh mà nó đi qua Khoảng cách d(u,v) giữa hai đỉnh u và v làchiều dài đường đi ngắn nhất ( theo nghĩa m(u,v) nhỏ nhất ) trong các đường đi từ u đến v

Có thể xem một đồ thị G bất kì là một đồ thị có trọng số mà mọi cạnh đều có chiều dài 1 Khi đó, khoảng cách d(u,v) giữa hai đỉnh u và v là chiều dài đường đi từ uđến v ngắn nhất, tức là đường đi qua ít cạnh nhất

- Thuật toán Dijkstra, mang tên của nhà khoa học máy tính người Hà Lan tên

là Edsger Dijkstra vào năm 1956 và ấn bản năm 1959, 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ố không âm Thuật toán thường được sử dụng trong định

Trang 15

- Thuật toán Dijkstra là một trong những thuật toán cơ bản dùng để tìm đường đi ngắn nhất từ một điểm tới một điểm nào đó, và mở rộng ra là tìm đường đi ngắn nhất từ 1 điểm tới mọi điểm còn lại của đồ thị, với điều kiện các trọng số của đồ thị

đó không âm

2 MÔ TẢ VÀ PHÂN TÍCH CÁCH THỨC HOẠT ĐỘNG:

- Trong phần này chúng ta chỉ xét đồ thị có hướng G=(V,E) và |V|=n,|E|=m với các cung được gán trọng số, nghĩa là , mỗi cung (u,v)∈E của nó được đặt tương ứng với một số thực a(u,v) gọi là trọng số của nó.Chúng ta sẽ đặt a(u,v)= ∞ , nếu (u,v) E Nếudãy , , , là một đường đi trên G, thì độ dài của nó được định nghĩa là tổng sau:

tức là , độ dài của đường đi chính là tổng các trọng số trên các cung của nó.(Chú ý rằng nếu chúng ta gán trọng số cho tất cả các cung đều bằng 1, thì ta thu được định nghĩa độ dài đuờng đi như là số cung của đường đi

- Bài toán tìm đường đi ngắn nhất trên đồ thị dưới dạng tổng quát có thể được phát biểu dưới dạng tổng quát như sau : Tìm đường đi có độ dài nhỏ nhất từ một đỉnh xuất phát s∈ V đến đỉnh cuối (đích) t∈ V Đường đi như vậy sẽ gọi là đường đi ngắn

15 | P a g e

Trang 16

nhất từ s đến t còn độ dài của nó sẽ kí hiệu là d(s,t) và còn gọi là khoảng cách từ s đến t (khoảng cách định nghĩa như vậy có thể là số âm ).Nếu như không tồn tại đường

đi từ s đến t thì ta đặt d(s,t)= ∞ từ đó ta thấy chu trình trong đồ thị có độ dài dương,thì

trong đường đi ngắn nhất không có đỉnh nào lặp lại(đường đi như thế gọi là đường đi

cơ bản) Mặt khác,nếu trong đồ thị có chu trình với độ dài âm(gọi là chu trình âm) thì

khoảng cách giữa 1 số cặp đỉnh nào đó của đồ thị có thể là không xác định, bởi vì, bằng cách đi vòng theo chu trình này một số đủ lớn lần, ta có thể chỉ ra đường đi giữa các đỉnh này có độ dài nhỏ hơn bất kì số thực cho trước nào Trong truờng hợp như vậy, có thể đặt vấn đề tìm đường đi cơ bản ngắn nhất, tuy nhiên bài toán đặt ra sẽ trở nên phức tạp hơn rất nhiều, bởi vì nó chứa bài toán xét sự tồn tại đường đi Hamintơn trong đồ thị như là một trường hợp riêng Trước hết cần chú ý rằng nếu biết khoảng cách từ s đến t, thì đường đi ngắn nhất từ s đến t, trong trường hợp trọng số không âm,

và kết thúc ở đỉnh s.Rõ ràng dãy thu được xác định đường đi ngắn nhất từ s đến t

a) Đường đi ngắn nhất xuất phát từ một đỉnh

Trang 17

giá trị của mỗi d[v] sẽ cho ta khoảng cách từ mỗi đỉnh s đến v Khi thể hiện kỹ thuật tính toán này trên máy tính, cận trên d[v] sẽ được gọi là nhãn của đỉnh v,còn việc tính lại các cận trên này sẽ gọi là phép gán nhãn cho đồ thị và toàn bộ thủ tục thường gọi làthủ tục gán nhãn Nhận thấy rằng để tính khoảng cách từ s đến tất cả các đỉnh còn lại của đồ thị Hiện nay vẫn chưa biết thuật toán nào cho phép tìm đường đi ngắn nhất giữa hai đỉnh làm việc thực sự hiệu quả hơn những thuật toán tìm đường đi ngắn nhất

từ một đỉnh đến tất cả các đỉnh còn lại Sơ đồ tính toán mà ta vừa mô tả còn chưa là xác định, bởi vì còn phải chỉ ra thứ tự chọn các đỉnh u và v để kiểm tra điều kiện (1).Thứ tự chọn này có ảnh hưởng rất lớn đến hiệu quả thuật toán

b) Thuật toán Dijkstra

Trong trường hợp trọng số trên các cung là không âm thuật toán do Dijkstra đề nghị để giải quyết bài toán tìm đường đi ngắn nhất từ đỉnh s đến các đỉnh còn lại của

đồ thị làm việc hữu hiệu hơn rất nhiều so với thuật toán khác Thuật toán được xây dựng trên cơ sở hán cho các đỉnh các nhãn tạm thời Nhãn của mỗi đỉnh cho biết cận trên của độ dài đường đi ngắn nhất từ s đến nó Các nhãn này sẽ được biếndổi theo thủtục lặp, mà ở mỗi một bước lặp có một nhãn tạm thời trở thành nhãn cố định Nếu nhãn của một đỉnh nào đó trở thành cố định thì nó sẽ cho ta không phải là cận trên mà

là độ dài đường đi ngắn nhất từ đỉnh s đến nó.Thuật toán được mô tả như sau:

Mô tả thuật toán :

 Đầu vào :

Đồ thị có hướng G=(V,E) với n đỉnh, s∈ V là đỉnh xuất phát, a[u,v] ∈ V, ma trận trọng số;

Giả thiết : a[u,v]≥0, u,v∈ V

 Đầu ra : khoảng cách từ đỉnh s đến tất cả các đỉnh còn lại d[v],v ∈ V

Begin(*khởi tạo*)

17 | P a g e

Trang 18

Tim dinh u∈ T thỏa mãn d[u]=min {d[z]:z∈ T};

T:=T\{u};(*cố định nhãn của đỉnh u*)

For v∈ T do (*gán nhãn lại cho csc đỉnh trong T*)

Trang 19

- Trước tìm đường đi ngắn nhất từ đỉnh s đến các đỉnh còn lại của đồ thị.Giả sử rằng ở

một bước lặp nào đó các nhãn cố định cho ta độ dài các đường đi ngắn nhất từ s đến các đinh có nhãn cố định,ta sẽ chứng minh rằng ở lần lặp tiếp theo nếu đỉnh u* thu được nhãn cố định thì d(u*) chính là dọ dài đường đi ngắn nhất từ s đén u*

- Kí hiệu S1 là tập các đỉnh có nhãn cố định, S2 là tập các đỉnh có nhãn tạm thời ở bước lặp đang xét.Kết thúc mỗi bước lặp nhãn tạm thời d(v)cho ta đoọdài của đường

đi ngắn nhất từ s đến v chỉ qua những đỉnh nằm hoàn toàn trong tập S1.Giả sử rằn đường di ngắn nhất từ ú đến u* không nằm tron trong tập S1, tức là nó đi qua ít nhất một đỉnh của tập S2.Gọi z∈ S2 là đỉnh đầu tiên như vậy trên đường đi này.Do trọng

số trên các cung là không âm , nên đoạn đường từ s đến u* có độ dài

L>0 và d(z) < d(u*) - L < d(u*)

- Bất đẳng thức này là mâu thuẫn với cách xác định đỉnh u* là đỉnh có nhãn tạm thời nhỏ nhất Vậy đường đin ngắn nhất từ s đến u* phải nằm trọn trong tập S1, và vì thế d[u*] là độ dài của nó.Do ở lần lặp đầu tiên S1={s} và sau mỗi lần lặp ta chỉ them vàoS1 một đỉnh u* nên giả thiết là d(v) cho độ dài đường đi ngắn nhất từ s đên v với mọi v∈S1 là đúng với bước lặp đầu tiên Theo qui nạp là suy ra thuật toán cho ta đường đingắn nhất từ s đến mọi đỉnh của đồ thị Bây giờ sẽ đánh giá số phép toán cần thực hiện theo thuật toán Ở mỗi bước lặp để tìm ra điểm u cần thực hiện O(n) phép toán ,

để gán nhãn lại cũng cần thực hiện một số lượng phép toán cũng là O(n) Thuật toán cần phải thực hiện n-1 bước lặp , vậy thời gian tính toán của thuật toán là cỡ O(n2) Định lý được chứng minh

- Khi đã tìm được độ dài đường đi ngắn nhất d[v] thì đưòng đi này có thể tìm dựa vào nhãn trước[v], v∈ V

Ví dụ 1: Tìm đường đi ngắn nhất từ đỉnh 1 đến các đỉnh còn lại của đồ thị ở hình sau:

19 | P a g e

Trang 20

Kết quả tính toán theo thuật toán được trình bày trong bản dưới đây.Qui ước viết thành 2 phần của nhãn theo thứ tự : d[v], Truoc[v] Đỉnh được đánh dấu * là đỉnh được chọn để cố định nhãn ở bước lặp đang xét , nhãn của nó không biến đổi ở các bước tiếp theo, vì thế ta đánh dấu

Bảng kết quả tính toán theo thuật toán Dijkstra

thì ta có thể kết

thúc thuật toán khi trở thành có nhãn cố định

Trang 21

tới đỉnh i đang có Xuất phát d[s] =0 và d[i] =c si nếu i kề s, d[j] =+ ∞ nếu j không

kề s

d) Giải thuật Dijkstra

- Có rất nhiều giải thuật đã được phát triển để giải bài toán tìm đường đi ngắn nhất

giữa một cặp đỉnh, trong khuôn khổ bài viết này em chỉ xin giới thiệu giải thuật

Dijkstra Giải thuật Dijkstra là một giải thuật để giải bài toán đường đi ngắn nhất nguồn đơn trên một đồ thị có trọng số cạnh mà tất cả các trọng số đều không âm Nó

xác định đường đi ngắn nhất giữa hai đỉnh cho trước, từ đỉnh a đến đỉnh b

Ở mỗi đỉnh v, giải thuật Dijkstra xác định 3 thông tin: kv, dv và pv

kv: mang giá trị boolean xác định trạng thái được chọn của đỉnh v Ban đầu ta khởi tạo tất cả các đỉnh v chưa được chọn, nghĩa là: kv = false, ∀ v ∈ V

điểm đang xét từ a đến v

Khởi tạo, dv = ∞, ∀v ∈ V \{a}, da = 0

đến b

Đường đi ngắn nhất từ a đến b có dạng {a, ,pv,v, ,b} Khởi tạo, pv = null, ∀v∈ V

Sau đây là các bước của giải thuật Dijkstra:

B1 Khởi tạo: Đặt := false ∀v ∈ V; := ∞,∀v ∈ V \ {a}, da:=0

B2 Chọn v ∈ V sao cho = false và = min {dt / t∈ V, kt = false}

Nếu = ∞ thì kết thúc, không tồn tại đường đi từ a đến b

B3 Đánh dấu đỉnh v, := true

21 | P a g e

Ngày đăng: 29/03/2021, 18:13

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w