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

Thiết kế thuật toán dựa trên ý tưởng của phương pháp tham lam

85 18 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 85
Dung lượng 1,28 MB

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

Nội dung

Nếu có thể chứng minh rằng một thuật toán dựa trên phương pháp tham lam cho ra kết quả tối ưu toàn cục của một lớp bài toán nào đó, thì khi ấy thuật toán ấy thường sẽ được lựa chọn, vì n

Trang 1

ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

Trang 2

ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

NGƯỜI HƯỚNG DẪN KHOA HỌC

PGS TSKH NGUYỄN XUÂN HUY

Trang 3

Lời cảm ơn……… i

Lời cam đoan ………ii

Mục lục ……….iii

MỞ ĐẦU ……….1

Chương 1 TỔNG QUAN VỀ PHƯƠNG PHÁP THAM LAM 1.1 Phương pháp tham lam……….4

1.1.1 Ý tưởng phương pháp tham lam………4

1.1.2 Đặc trưng của phương pháp tham lam……….6

1.1.3 Thiết kế thuật toán dựa trên ý tưởng phương pháp tham lam….………7

1.1.3.1 Các thành phần quyết định tham lam………7

1.1.3.2 Sơ đồ chung để giải các bài toán bằng giải thuật tham lam….….…………9

1.1.3.3 Lược đồ giải thuật tham lam ……….9

1.1.3.4 Thiết kế một thuật toán dựa trên ý tưởng tham lam….….……… 11

1.1.3.5 Tiến trình thực hiện phương pháp tham lam……… … 11

1.2 Ví dụ……… 14

1.2.1 Bài toán lựa chọn công việc.……… 14

1.2.2 Xác định bài toán………14

1.2.3 Tính chất của lời giải ……….14

1.2.4 Các bước của thuật giải tham lam……… 15

Chương 2 THIẾT KẾ THUẬT TOÁN DỰA TRÊN Ý TƯỞNG CỦA PHƯƠNG PHÁP THAM LAM 2.1 Bài toán người du lịch ……….18

2.1.1 Phát biểu bài toán ……… 18

Trang 4

2.2.1 Phát biểu bài toán ……… 21

2.2.2 Phân tích thiết kế thuật toán ……… 21

2.2.3 Xác định độ phức tạp của thuật toán ……….27

2.3 Thuật toán Dijkstra -Tìm đường đi ngắn nhất trong đồ thị có trọng số…28 2.3.1 Phát biểu bài toán ……… 28

2.3.2 Phân tích thiết kế thuật toán ……… 28

2.3.3 Xác định độ phức tạp của thuật toán ……….33

2.4 Bài toán cái ba lô ……….33

2.4.1 Phát biểu bài toán ……… 33

2.4.2 Phân tích thiết kế thuật toán ……… 33

2.4.3 Xác định độ phức tạp của thuật toán ……….35

2.5 Bài toán băng nhạc ……… ………35

2.5.1 Phát biểu bài toán ……… 35

2.5.2 Phân tích thiết kế thuật toán ……… 36

2.5.3 Xác định độ phức tạp của thuật toán ……….38

2.6 Bài toán lập lịch ……… 38

2.6.1 Phát biểu bài toán ……….38

2.6.2 Phân tích thiết kế thuật toán ……… 38

2.6.3 Xác định độ phức tạp của thuật toán ……….42

2.7 Bài toán mã hóa Huffman ……… 43

2.7.1 Phát biểu bài toán ……… 49

2.7.2 Phân tích thiết kế thuật toán ……… 49

2.8 Phương pháp tham lam trong tương quan với phương pháp khác …… 50

- Phương pháp quy hoạch động

Trang 5

3.2 Bài toán cây bao trùm ngắn nhất Kruskal………56

3.3 Thuật toán Dijkstra -Tìm đường đi ngắn nhất trong đồ thị có trọng số……… ………62

3.4 Bài toán mã hóa huffman………65

KẾT LUẬN ……… 69

TÀI LIỆU THAM KHẢO ……… 70

PHỤ LỤC………

Trang 6

MỞ ĐẦU

1 Đặt vấn đề

Có nhiều phương pháp được dùng để thiết kế thuật toán như: chia để trị, vét cạn, quy hoạch động trong đó, mỗi phương pháp chỉ áp dụng cho những lớp bài toán phù hợp Phương pháp tham lam cũng là một trong số các phương pháp phổ biến thường được vận dụng trong thiết kế thuật toán

Phương pháp tham lam gợi ý chúng ta tìm một trật tự hợp lí để duyệt dữ liệu nhằm đạt được mục tiêu một cách chắc chắn và nhanh chóng Thông thường dữ liệu được duyệt theo một trong hai trật tự tăng hay giảm theo một tiêu chí nào đấy

Phương pháp tham lam xây dựng các thuật toán để giải các bài toán tối ưu dựa trên tư tưởng tối ưu cục bộ theo một chiến lược tư duy kiểu con người, nhằm nhanh chóng đạt đến một lời giải "tốt" Nếu có thể chứng minh rằng một thuật toán dựa trên phương pháp tham lam cho ra kết quả tối ưu toàn cục của một lớp bài toán nào đó, thì khi ấy thuật toán ấy thường sẽ được lựa chọn, vì nó chạy nhanh hơn các phương pháp tối ưu hóa khác như quy hoạch động

Một số thuật toán dựa trên tư tưởng phương pháp tham lam đã thực sự tìm ra được phương án tối ưu như: thuật toán Kruscal tìm cây khung cực tiểu, thuật toán Prim dành cho bài toán cây bao trùm nhỏ nhất, thuật toán Dijkstra dành cho bài toán đường đi ngắn nhất và thuật toán tìm cây Huffman tối ưu

Là một giáo viên giảng dạy bộ môn Tin học ở trường PT, tôi nhận thấy việc ứng dụng phương pháp tham lam trong thiết kế thuật toán là một mảng kiến thức rất cần thiết đối với học sinh, đặc biệt là học sinh nhóm chuyên Tin và đội tuyển Vì vậy, tôi mong muốn tìm hiểu về phương pháp tham lam và ứng dụng phương pháp tham lam trong thiết kế thuật toán cho một nhóm các bài toán, nhằm tạo ra một nguồn tư liệu quan trọng cho các giáo viên, học sinh và những người quan tâm đến phương pháp này

Trang 7

2 Đối tượng và phạm vi nghiên cứu

- Phương pháp tham lam trong thiết kế thuật toán

- Một số bài toán đặc trưng, cơ bản

3 Hướng nghiên cứu của đề tài

- Tổng quan về phương pháp tham lam

- Thiết kế thuật toán cho một số bài toán dựa trên ý tưởng tham lam từ đó tìm ra:

+ Các kĩ thuật sử dụng trong phương pháp tham lam

+ Đối sánh phương pháp tham lam với Phương pháp khác

+ Hạn chế của phương pháp tham lam

- Cài đặt chương trình cho một số bài toán kinh điển

4 Những nội dung nghiên cứu chính

Chương 1 TỔNG QUAN VỀ PHƯƠNG PHÁP THAM LAM

(Trong chương này, học viên sẽ tìm hiểu và trình bày phương pháp tham lam: Ý tưởng, phát biểu phương pháp, nêu ví dụ và phân tích làm rõ về phương pháp này)

Chương 2 THIẾT KẾ THUẬT TOÁN DỰA TRÊN Ý TƯỞNG CỦA PHƯƠNG

PHÁP THAM LAM

(Dựa vào cơ sở lí thuyết trình bày ở chương I, trong chương này, học viên sẽ phân tích thiết kế thuật toán bằng phương pháp tham lam cho 7 bài toán cụ thể (mục 2.1 đến 2.7); Thông qua các bài tập học viên sẽ rút ra kỹ thuật sử dụng phương pháp tham lam; Đối sánh phương pháp tham lam với phương pháp khác ; Chỉ ra hạn chế của phương pháp tham lam) Các bài toán cụ thể:

- Bài toán người du lịch

- Bài toán tìm cây khung cực tiểu

- Bài toán cây bao trùm ngắn nhất

- Bài toán cái ba lô

- Bài toán băng nhạc

- Bài toán xếp lịch

- Bài toán mã hóa Huffman

Trang 8

Chương 3 CÀI ĐẶT CHƯƠNG TRÌNH CHO MỘT SỐ BÀI TOÁN

(Trong chương này, dựa vào chương II, học viên sẽ xây dựng chương trình và cài đặt chương trình cho một số bài toán bằng ngôn ngữ C ++

, Free Pascal)

5 Phương pháp nghiên cứu: phân tích, liệt kê, so sánh, đối chiếu, trực quan, thực

nghiệm,…

6 Ý nghĩa khoa học của đề tài

- Đưa ra nội dung phương pháp tham lam

- Ứng dụng phương pháp tham lam trong thiết kế thuật toán cho một nhóm các bài toán, nhằm tạo ra một nguồn tư liệu quan trọng cho các giáo viên, học sinh và những người quan tâm đến phương pháp này

7 Kết cấu của đề tài

Ngoài phần mở đầu, kết luận, tài liệu tham khảo đề tài gồm 3 chương:

Chương 1 TỔNG QUAN VỀ PHƯƠNG PHÁP THAM LAM

Chương 2 THIẾT KẾ THUẬT TOÁN DỰA TRÊN Ý TƯỞNG CỦA PHƯƠNG PHÁP THAM LAM

Chương 3 CÀI ĐẶT CHƯƠNG TRÌNH CHO MỘT SỐ BÀI TOÁN

Trang 9

Chương 1 TỔNG QUAN VỀ PHƯƠNG PHÁP THAM LAM

Các bài toán trên thực thế có muôn hình muôn vẻ, không thể đưa ra một cách thức chung để tìm giải thuật cho mọi bài toán Các phương pháp vét cạn (exhaustivesearch), chia để trị (divide and conquer), quy hoạch động (dynamic programming) và tham lam (greedy) là những “chiến lược” kinh điển để tìm giải thuật cho các bài toán

Tham lam (greedy) là một phương pháp giải các bài toán tối ưu Các thuật toán tham lam dựa vào sự đánh giá tối ưu cục bộ địa phương để đưa ra quyết định tức thì tại mỗi bước lựa chọn, với hy vọng cuối cùng sẽ tìm ra được phương án tối

ưu tổng thể

Chương I trình bày về phương pháp tham lam: Ý tưởng phương pháp tham lam, nêu ví dụ và phân tích làm rõ về phương pháp này

1.1 Phương pháp tham lam

1.1.1 Ý tưởng phương pháp tham lam

Các bài toán tối ưu thường là có một số rất lớn nghiệm, việc tìm ra nghiệm tối ưu (nghiệm có giá thấp nhất) đòi hỏi rất nhiều thời gian

Một cách tiếp cận để giải quyết các bài toán tối ưu là chiến lược tham lam Trong hầu hết các bài toán tối ưu, để nhận được nghiệm tối ưu chúng ta có thể đưa về sự thực hiện một dãy quyết định Ý tưởng của chiến lược tham lam là, tại mỗi bước ta sẽ lựa chọn quyết định để thực hiện quyết định được xem là tốt nhất trong ngữ cảnh nào đó được xác định bởi bài toán Tức là, quyết định được lựa chọn

ở mỗi bước là quyết định tối ưu địa phương Tùy theo từng bài toán mà ta đưa ra tiêu chuẩn lựa chọn quyết định cho thích hợp

Các thuật toán tham lam nói chung là đơn giản và hiệu quả (vì các tính toán

để tìm ra quyết định tối ưu địa phương thường là đơn giản) Tuy nhiên, các thuật toán tham lam có thể không tìm được nghiệm tối ưu, nói chung nó chỉ cho ra

Trang 10

nghiệm gần tối ưu, nghiệm tương đối tốt Nhưng cũng có nhiều thuật toán được thiết kế theo kỹ thuật tham lam cho ta nghiệm tối ưu, chẳng hạn thuật toán Dijkstra tìm đường đi ngắn nhất từ một đỉnh tới các đỉnh còn lại trong đồ thị định hướng, các thuật toán Prim và Kruskal tìm cây bao chùm ngắn nhất trong đồ thị vô hướng

Ví dụ - Bài toán trả tiền của máy rút tiền tự động ATM:

Trong máy ATM, có sẵn các loại tiền có mệnh giá 100.000 đồng, 50.000 đồng, 20.000 đồng và 10.000 đồng

Giả sử mỗi loại tiền đều có số lượng không hạn chế

Khi có một khách hàng cần rút một số tiền n đồng (tính chẵn đến 10.000 đồng, tức là n chia hết cho 10.000)

Hãy tìm một phương án trả tiền sao cho trả đủ n đồng và số tờ giấy bạc phải trả là ít nhất

Ý tưởng phương pháp tham lam để giải quyết bài toán trả tiền của máy rút tiền tự động ATM:

Gọi X = (X1, X2, X3, X4) là một phương án trả tiền

Trước hết ta chọn tối đa các tờ giấy bạc 100.000 đồng, nghĩa là X1 là số

nguyên lớn nhất sao cho X1 * 100.000  n

Tức là X1 = n DIV 100.000

Xác định số tiền cần rút còn lại là hiệu n – X1 * 100000

Trang 11

Giả sử n = 1290000, phương án trả tiền như sau:

Đây là một phương án tối ưu

Tuy nhiên giả sử trong máy ATM có các loại tiền mệnh giá 50.000đ, 80.000 đồng, 10.000đ thì khi đó để rút 100.000đ theo ý tưởng tham lam sẽ có phương án rút một tờ mệnh giá 80.000đ và hai tờ mệnh giá 10.000đ Đây chưa phải là phương

án tối ưu vì phương án tối ưu nhất là rút hai tờ mệnh giá 50.000đ Song, cách lựa chọn theo ý tưởng tham lam cũng là một phương án tốt, có thể chấp nhận được trong thực tế

1.1.2 Đặc trưng của phương pháp tham lam

Phương pháp tham lam gợi ý chúng ta tìm một trật tự hợp lí để duyệt dữ liệu nhằm đạt được mục tiêu một cách chắc chắn và nhanh chóng Thông thường, dữ liệu được duyệt theo một trong hai trật tự là tăng hoặc giảm dần theo một chỉ tiêu nào đó Một số bài toán đòi hỏi những dạng thức cải biên của hai dạng nói trên

Thuật toán tham lam có trường hợp luôn tìm ra đúng phương án tối ưu, có trường hợp không Nhưng trong trường hợp thuật toán tham lam không tìm ra đúng phương án tối ưu, chúng ta thường thu được một phương án khả dĩ chấp nhận được

Với một bài toán có nhiều thuật toán để giải quyết, thông thường thuật toán tham lam có tốc độ tốt hơn hẳn so với các thuật toán tối ưu tổng thể

Đặc trưng của thuật toán tham lam thường thể hiện bởi: trong mỗi bước, việc

xử lí sẽ tuân theo một sự lựa chọn trước, không kể đến tình trạng không tốt có thể

Trang 12

1.1.3 Thiết kế thuật toán dựa trên ý tưởng phương pháp tham lam

Khác với các kỹ thuật thiết kế thuật toán như chia để trị, liệt kê, quy hoạch động mà chúng ta đã biết, rất khó để đưa ra một quy trình chung để tiếp cận bài toán, tìm thuật toán cũng như cài đặt thuật toán tham lam

Giải thuật tham lam (Greedy algorithm) là một thuật toán giải quyết một bài

toán theo kiểu metaheuristic để tìm kiếm lựa chọn tối ưu địa phương ở mỗi bước đi với hi vọng tìm được tối ưu toàn cục Chẳng hạn áp dụng giải thuật tham lam với

bài toán hành trình của người bán hàng ta có giải thuật sau: “Ở mỗi bước hãy tìm đến thành phố gần thành phố hiện tại nhất”

Nói chung, giải thuật tham lam thường có 5 thành phần:

1 Một tập các ứng viên để từ đó tạo ra lời giải

2 Một hàm lựa chọn để theo đó chọn ứng viên tốt nhất để bổ sung vào lời giải

3 Một hàm khả thi dùng để quyết định nếu một ứng viên có thể được dùng

để xây dựng lời giải

4 Một hàm mục tiêu ấn định giá trị của lời giải hoặc một lời giải chưa hoàn chỉnh

5 Một hàm đánh giá chỉ ra khi nào ta tìm ra một lời giải hoàn chỉnh

1.1.3.1 Các thành phần quyết định tham lam

Tính chất lựa chọn tham lam

Thành phần then chốt trước tiên là tính lựa chọn tham lam: một giải pháp tối ưu toàn cục có thể đạt được bằng cách lựa chọn tối ưu cục bộ (tham lam) Nói một cách khác, khi có nhiều sự lựa chọn thì ta lựa chọn phương án nào tốt nhất ở hiện tại trong bài toán hiện tại, mà không cần quan tâm đến kết quả các bài toán con của nó Thuộc tính lựa chọn tham lam thường đạt được hiệu lực trong việc thực hiện lựa chọn của ta trong bài toán con Ví dụ, trong bài toán chọn hoạt động, giả sử rằng ta

có các hoạt động được sắp xếp sẵn theo thứ tự tăng dần của thời điểm kết thúc, ta

Trang 13

ta có thể thực hiện các lựa chọn tham lam nhanh chóng, vì vậy đưa ra một thuật toán hiệu quả

Chúng ta có thể lựa chọn giải pháp nào được cho là tốt nhất ở thời điểm hiện tại và sau đó giải bài toán con nảy sinh từ việc lựa chọn vừa rồi Lựa chọn của thuật toán tham lam có thể phụ thuộc vào các lựa chọn trước đó Nhưng nó không thể phụ thuộc vào một lựa chọn nào trong tương lai hay phụ thuộc vào lời giải của các bài toán con Thuật toán tiến triển theo kiểu thực hiện các lựa chọn theo một vòng lặp, cùng lúc đó thu nhỏ bài toán đã cho về một bài toán con nhỏ hơn Giải thuật tham lam quyết định sớm và thay đổi đường đi của thuật toán theo quyết định đó, và không bao giờ xét lại các quyết định cũ Đối với một số bài toán, đây có thể là một thuật toán không chính xác

Cấu trúc con tối ưu

Một bài toán có cấu trúc con tối ưu nếu giải pháp tối ưu cho bài toán nàychứa trong nó các giải pháp tối ưu cho các bài toán con Thuộc tính này là điểm

để quyết định ta có thể giải quyết bài toán bằng phương pháp quy hoạch động cũng như tham lam được hay không Như một ví dụ của cấu trúc con tối ưu, quay về cách

ta chứng minh rằng nếu một giải pháp tối ưu đối với bài toán con Sij có chứa một

hoạt động ak, sau đó nó cũng phải chứa các giải pháp tối ưu đối với các bài

toán Sik và Skj Cấu trúc con tối ưu này được đưa ra, ta nói rằng nếu biết hoạt động nào sử dụng như ak, ta có thể xây dựng một giải pháp tối ưu đối với Sij bằng việc lựa chọn cùng với tất cả hoạt động của các giải pháp tối ưu đối với các bài toán con

Sik và Skj. Dựa trên sự quan sát này của cấu trúc con tối ưu, ta có thể đưa ra công thức đệ quy mà nó định rõ giá trị của một giải pháp tối ưu

Ta thường sử dụng thêm cấu trúc con tối ưu gần như trực tiếp, khi áp dụng

nó đối với các giải thuật tham lam Ta không cần thiết cho rằngđiđến một bài toán con bằng cách thực hiệnlựa chọn tham lam trong bài toán tối ưu Ta cần làmlà cho rằng một giải pháp tối ưu đối với bài toán con, kết hợp với lựa chọn tham lam vừa được thực hiện, mang lại một giải pháp tối ưu đối với bài toán ban đầu Sự phối hợp hoàn toàn sử dụng phương pháp quy nạp đối vớicác bài toán con để chứng minh

Trang 14

rằng việc sử dụng lựa chọn tham lam tại mỗi bước tạo ra một giải pháp tối ưu

Một bài toán được gọi là có cấu trúc tối ưu nếu một lời giải tối ưu của bài toán con chứa lời giải tối ưu của bài toán lớn hơn

1.1.3.2 Sơ đồ chung để giải các bài toán bằng giải thuật tham lam

Dạng các bài toán giải bằng phương pháp tham lam

Giả sử phải chọn một tập con R của các phần tử của một tập S =(s1,s2,…,sn)

sao cho tập R thỏa mãn một điều kiện ràng buộc W(R) nào đó, và một hàm mục tiêu Z(R) đạt giá trị tối ưu

Ví dụ bài toán tối ưu tổ hợp:

Cho hàm f(X) xác định trên một tập hữu hạn các phần tử D Hàm f(X) được

gọi là hàm mục tiêu

Mỗi phần tử X D có dạng X = (x1, x2, ,xn) được gọi là một phương án

Cần tìm một phương án X* D sao cho f(X*) đạt min(max) Phương án X*

như thế được gọi là phương án tối ưu

Sơ đồ chung để giải các bài toán bằng giải thuật tham lam

Bước 1: Chọn một phần tử s có lợi nhất cho lời giải trong bước đó sao cho

phần tử này cùng với lời giải tối ưu của bài toán con với tập con S – {s} với ràng buộc W(R-{s}) là lời giải tối ưu cho bài toán

Bước 2: Tiếp tục tìm phần tử tiếp theo có lợi nhất với tập con S=S-{s} với ràng buộc W(R-{s}) và hàm mục tiêu Z = Z (R-{s}) Cho đến khi không tìm được phần tử như vậy hoặc tập S =

1.1.3.3 Lược đồ giải thuật tham lam

Tư tưởng của phương pháp tham lam

Ta xây dựng tập S dần từng bước, bắt đầu từ tập rỗng Tại mỗi bước ta sẽ chọn một phần tử “tốt nhất” trong các phần tử còn lại của A để đưa vào S Việc lựa

chọn một phần tử như thế ở mỗi bước được hướng dẫn bởi hàm chọn Phần tử được

chọn sẽ được loại khỏi tập A Nếu khi thêm phần tử được chọn vào tập S mà S vẫn

Trang 15

Lược đồ tổng quát như sau:

Procedure Greedy(A, S) // A là một tập các ứng cử viên, S là tập quyết định –

nghiệm Begin

Trong lƣợc đồ tổng quát trên, Select là hàm chọn, nó cho phép ta chọn từ tập A một

phần tử đƣợc xem là tốt nhất, nhiều hứa hẹn nhất là thành viên của tập nghiệm

Trang 16

1.1.3.4 Thiết kế một thuật toán dựa trên ý tưởng tham lam

Khi tiếp cận bài toán và tìm thuật toán tham lam thì cần khảo sát kĩ bài toán

để tìm ra các tính chất đặc biệt mà ở đó ta có thể đưa ra quyết định tức thời tại từng bước dựa vào sự đánh giá tối ưu cục bộ địa phương

Ý tưởng của phương pháp tham lam trong thiết kế thuật toán được tiến hành là: Xác định trật tự xử lí để có lợi nhất, sắp xếp dữ liệu theo trật tự đó, xử lí dữ liệu theo trật tự đã nêu

1.1.3.5 Tiến trình thực hiện phương pháp tham lam

Thuật toán tham lam có được một giải pháp tối ưu cho một bài toán bằng cách thực hiện một chuỗi các lựa chọn Đối với mỗi quyết định chỉ ra trong thuật toán, sự lựa chọn này dường như tốt nhất tại thời điểm được chọn Chiến lược phỏng đoán này không luôn tạo ra giải pháp tối ưu, nhưng thỉnh thoảng nó giải quyết được Quy trình thực hiện để phát triển thuật toán tham lam đi qua từng bước như sau:

1 Xác định cấu trúc con tối ưu

2 Xây dựng giải pháp đệ quy

3 Chứng minh: tại mỗi bước đệ qui, lựa chọn tham lam là một trong những lựa chọn cho kết quả tối ưu

4 Chỉ ra: sau mỗi lựa chọn tham lam, một trong những bài toán con sẽ rỗng

5 Xây dựng giải pháp đệ quy cho chiến lược tham lam

6 Khử đệ quy

Qua các bước này, ta đã thấy chi tiết cơ bản nguồn gốc quy hoạch động của thuật toán tham lam Trong thực tế, ta thường tổ chức hiệu quả các bước trên khi thiết kế giải thuật tham lam Ta phát triển cấu trúc con với một cái nhìn hướng đến thực hiện lựa chọn tham lam mà để lại một bài toán con được giải quyết một cách

Trang 17

Ví dụ - bài toán chọn hoạt động:

Bài toán sắp xếp lịch cho nhiều hoạt động với ý nghĩa để có thể sử dụng chung một tài nguyên (mỗi thời điểm chỉ có một hoạt động sử dụng tài nguyên chung), với mục tiêu là sắp xếp sao càng có nhiều hoạt động tương thích sử dụng tài nguyên càng tốt

Giả sử ta có một tập hợp S = {a1, a2, , an } là tập các hoạt động muốn sử dụng tài nguyên, ví dụ một hội trường, chỉ mỗi một hoạt động tại mỗi thời điểm Mỗi

hoạt động ai sẽ có thời điểm bắt đầu là si và thời điểm kết thúc là fi, với điều kiện

0 ≤ si < fi < ∞ Nếuhoạt động ai đượcchọn, thì nó sẽ độc chiếm tài nguyên trong

khoảng thời gian [si, fi) Hoạt động ai và aj đượcgọi là tương thích lẫn nhau nếu như

khoảng thời gian [si, fi) và [aj, fj) là không giao nhau (Ví dụ ai và aj là tương thích

nếu si ≥ fj hoặc sj ≥ fi ) Trong bài toánchọn hoạt động ta phải chọn tập con lớn nhất

của các hoạt động tương thích lẫn nhau Chẳng hạn, xem tập S của các hoạt động

sau, mà ta có thể sắp xếp tăng dần theo thời điểm kết thúc

Ta sẽ thấy một cách ngắn gọn là tại sao nó thuận lợi để xem xét các hoạt

động trong trình tự sắp xếp Chẳng hạn như, một tập con {a3, a9, a11 } bao gồm những hoạt động tương thích lẫn nhau Nó không phải là tập con lớn nhất, vì một

tập con {a1, a4, a8, a11} là lớn hơn Thật ra {a1, a4, a8, a11} là tập con lớn nhất của

các hoạt động tương thích lẫn nhau; một tập con lớn nhất khác là {a2, a4, a9, a11}

Ta sẽ giải quyết bài toán này trong một vài bước Bắt đầu bởi việc đưa ra công thức của giải pháp quy hoạch động đối với bài toán này trong đó ta tổng hợp

i 1 2 3 4 5 6 7 8 9 10 11

Si 1 3 0 5 3 5 6 8 8 2 12

Fi 4 5 6 7 8 9 10 11 12 13 14

Trang 18

các giải pháp tối ưu đối với hai bài toán con để thiết lập giải pháp tối ưu của bài toán gốc Ta có các lựa chọn khi quyết định các bài toán để sử dụng trong một giải pháp tối ưu Sau đó, ta sẽ nhận thấy rằng ta chỉ cần một lựa chọn duy nhất - lựa chọn tham lam - và sau khi ta lựa chọn chỉ còn một bài toán con, một bài toán con còn lại sẽ rỗng

Dựa trên những nhận xét này, ta sẽ xây dựng một giải thuật tham lam đệ quy

để giải quyết bài toán lập lịch hoạt động Ta sẽ hoàn thành quá trình xây dựng giải thuật tham lam bởi việc biến đổi giải thuật đệ quy sang giải thuật lặp Mặc dù những bước ta thực hiện trong phần này thể hiện mối liên quan nhiều hơn là tiêu biểu cho

sự phát triển của phương pháp tham lam, chúng minh hoạ cho mối quan hệ của phương pháp tham lam và quy hoạch động

Ta trước tiên định nghĩa bài toán con Sij, mà cả hai i và j khác nhau Ta đã thấy rằng nếu ta luôn thực hiện lựa chọn tham lam, ta có thể giới hạn các bài toán

con được thành lập bởi Si,n+1

Như một sự lựa chọn, ta có thể tạo nên cấu trúc con tối ưu với một lựa chọn tham lam có nghĩa Điều đó là, ta có thể bỏ qua chỉ số dưới thứ hai và định nghĩa

các bài toán con của công thức Si = {ak S : fi ≤ Sk} Sau đó, ta có thể chứng minh

rằng một lựa chọn tham lam (hoạt động đầu tiên am để kết thúc Si ), kết hợp với một

giải pháp tối ưu để đi đến tập còn lại Sm của các hoạt động tương thích, mang lại

một giải pháp tối ưu đối với Si Tổng quát hơn, ta thiết kế thuật toán tham lam theo chuỗi các bước:

1 Tìm lựa chọn sao cho bước tiếp theo chỉ việc giải quyết một bài toán con

2 Chứng minh rằngvới sự lựa chọn tham lam tại mỗi bước ta luôn tìm được một giải pháp tối ưu của bài toán ban đầu

3 Chỉ ra rằng, với sự lựa chọn tham lam tại mỗi bước, giải pháp tối ưu của bài

Trang 19

Có thể nói một cách như thế nào nếu một giải thuật tham lam sẽ giải quyết được một bài toán tối ưu riêng biệt? Không có cách tổng quát, nhưng chiến lược lựa chọn tham lam và cấu trúc con tối ưu là hai thành phần then chốt Nếu ta có thể chứng minh rằng bài toán có các thuộc tínhnày, sau đó ta thuận lợi trong cách xây dựng một thuật toán tham lam cho nó

1.2 Ví dụ

1.2.1 Bài toán lựa chọn công việc

Giả sử rằng ta có một tập S = { 1,2, , n} của n công việc sử dụng cùng một

tài nguyên, ví dụ như một phòng họp, tại một thời điểm chỉ có một công việc được

tiến hành Các công việc i được bắt đầu tại thời điểm si và kết thúc tại thời điểm f

Hãy lựa chọn các công việc không mâu thuẫn nhau (nghĩa là hoạt động i và j

là tương thích nếu khoảng thời gian [s

INPUT: Thời gian khởi đầu s[1 n]; Thời gian kết thúc f[1 n]

OUTPUT: Lựa chọn các công việc không mâu thuẫn nhau sao cho số công việc được chọn là nhiều nhất

1.2.3 Tính chất của lời giải

Giả sử dãy công việc được sắp xếp tăng dần theo thời điểm kết thúc :

f

1  f

2  f

n

1 Luôn tồn tại một lời giải tối ưu chứa công việc thứ nhất

2 Nếu A S là lời giải tối của bài toán có chứa việc 1 thì A – {1} là lời giải tối ưu của bài toán với tập S’ gồm các công việc bắt đầu từ thời điểm f

1

trở đi

Trang 20

1.2.4 Các bước của thuật giải tham lam

1 Xác định cấu trúc tối ưu của bài toán

Tìm cấu trúc tối ưu để xây dựng một lời giải tối ưu cho bài toán từ những lời giải tối ưu của các bài toán con

Gọi Sij là tập con của các hoạt động trong S có thể bắt đầu sau khi hoạt động a

i kết thúc và trước khi hoạt động a

j bắt đầu

Sij chứa các hoạt động tương thích với ai và aj và cũng tương thích với tất cả

các hoạt động kết thúc không muộn hơn và bắt đầu không sớm hơn bắt đầu của aj

Giả sử các hoạt động được sắp xếp theo thứ tự tăng thời gian kết thúc của các hoạt động

Để tìm cấu trúc con cho bài toán xếp lịch, khảo sát các bài toán con Sij khác

rỗng và giả thuyết lời giải Sij chứa một số hoạt động ak sao cho:

kj, mỗi bài toán con chứa một

tập con các hoạt động Sij Lời giải cho Sij là tổ hợp của lời giải S

ik và S

kj cùng với chính hoạt động a

kj mà được dùng cho lời giải tối ưu cho tập Sij

cũng phải tối ưu

2 Xây dựng lời giải đệ qui

Tìm các tập con kích cỡ tối đa Aik và Akj chứa các hoạt động tương thích nhau cho mỗi bài toán con

Trang 21

Ta có công thức đệ qui để tìm c[i, j]

Chọn hoạt động am trong Sij có thời gian hoàn thành sớm nhất, rồi tìm lời giải

cho bài toán con Smj Hoạt động đƣợc chọn theo cách tham lam nghĩa là nó làm tối

đa thời gian còn lại chƣa đƣợc xếp lịch để đƣợc xếp lịch cho nhiều hoạt động khác

Loại bỏ những hoạt động chƣa đƣợc xếp lịch (bị trùng lặp)

Lặp lại quá trình trên

3 Chứng minh với bất kỳ lời gọi đệ qui, một lựa chọn tối ƣu là một lựa chọn tham lam Vì vậy nó luôn đảm bảo để tạo một lựa chọn tham lam

Chứng minh giải thuật sử dụng hai thuộc tính sau:

Bài toán có cấu trúc tối ƣu

Thuật giải thỏa mãn thuộc tính chọn tham lam

Một bài toán thể hiện cấu trúc tối ƣu nếu lời giải tối ƣu của bài toán lớn luôn chứa trong nó những lời giải tối ƣu của bài toán con

Nếu A S là lời giải tối của bài toán có chứa việc một thì A’ = A – {1} là lời giải tối ƣu của bài toán với tập S’ gồm các công việc bắt đầu từ thời điểm f

từ lựa chọn đó

Trang 22

Lựa chọn đƣợc tạo ra bởi giải thuật tham lam có thể phụ thuộc vào những lựa chọn ở xa nhƣng nó không thể phụ thuộc vào bất kỳ lựa chọn sẽ đƣợc phát sinh hay những lời giải của bài toán con

4 Chỉ ra rằng duy nhất một bài toán con sau khi chọn tham lam là khác rỗng

5 Phát triển lời giải đệ qui để thực hiện giải thuật tham lam

Giải thuật tham lam giải bài toán lựa chọn công việc

A:= A{i};

K:= i;

End;

Return A

Trang 23

Chương 2 THIẾT KẾ THUẬT TOÁN DỰA TRÊN Ý TƯỞNG CỦA PHƯƠNG PHÁP

2.1 Bài toán người du lịch

2.1.1 Phát biểu bài toán

Một người du lịch muốn tham quan n thành phố T1, T2,…,Tn Xuất phát từ một thành phố nào đó người du lịch muốn đi qua tất cả các thành phố còn lại, mỗi thành phố đi qua đúng một lần rồi quay lại đúng thành phố xuất phát Giả thiết luôn

có đường đi giữa hai thành phố bất kì

Gọi CP(i,j) là chi phí đi từ thành phố Ti đến Tj Hãy tìm hành trình thỏa mãn yêu cầu bài toán sao cho chi phí là nhỏ nhất

2.1.2 Phân tích thiết kế thuật toán

2.1.2.1 Xác định bài toán

INPUT: n thành phố, CP(i,j) _ chi phí đi từ thành phố Ti đến Tj

OUTPUT: Hành trình tối ưu và chi phí tương ứng

2.1.2.2 Ý tưởng

Đây là bài toán tìm chu trình có trọng số nhỏ nhất trong một đơn đồ thị vô hướng có trọng số

Thuật toán tham lam cho bài toán là chọn thành phố có chi phí nhỏ nhất tính

từ thành phố hiện thời đến thành phố chưa qua

2.1.2.3 Xây dựng thuật toán

Input: n thành phố, C= (Cij)

Output: TOUR //Hành trình tối ưu,

COST;//Chi phí tương ứng

Trang 24

- COST := COST + Cvw ;//Cập nhật chi phí

// Chuyến đi hoàn thành - khi hành trình trở về thành phố xuất phát ban đầu

TOUR := TOUR + <v, u>;

Trang 25

∈ O(n2

)

Trang 26

2.2 Bài toán cây bao trùm ngắn nhất

2.2.1 Phát biểu bài toán

Cho một đồ thị liên thông G vô hướng bao gồm n đỉnh, mã số từ 1 đến n, và m

cạnh nối hai đỉnh với nhau Mỗi cạnh có chiều dài cho trước Tính liên thông của đồ thị cho biết với hai đỉnh cho trước tuỳ ý ta luôn tìm được các cạnh gối đầu nhau để đi

từ đỉnh này đến đỉnh kia Hãy chỉ ra một phần P của đồ thị thoả các tính chất sau:

(i) P chứa tất cả các đỉnh của G;

(ii) P chứa một số ít nhất các cạnh của G;

(iii) P là đồ thị liên thông;

(iv) Tổng chiều dài các cạnh của P là ngắn nhất

Đồ thị P thoả ba tính chất (i), (ii) và (iii) được gọi là cây bao trùm của đồ thị G Nếu P thoả thêm tính chất (iv) thì P được gọi là cây bao trùm ngắn nhất của G Một

số tài liệu dùng thuật ngữ cây khung thay cho cây bao trùm và cây khung cực tiểu

thay cho cây bao trùm ngắn nhất

Dữ liệu vào: tệp văn bản tên DOTHI.INP

- Dòng đầu tiên ghi hai số tự nhiên n và m cách nhau qua dấu cách, biểu thị số đỉnh (n) và số cạnh (m) của đồ thị

- Mỗi dòng thứ i = 1, 2, , m trong số m dòng tiếp theo ghi ba giá trị x y và d cách nhau qua dấu cách với ý nghĩa cạnh (x, y) của đồ thị có chiều dài d

Dữ liệu ra: tệp văn bản tên DOTHI.OUT bao gồm:

- Danh sách các cạnh được chọn

- Dòng cuối cùng ghi tổng chiều dài tìm được

2.2.2 Phân tích thiết kế thuật toán

2.2.2.1 Xác định bài toán

Input: Đồ thị có trọng số liên thông G vô hướng bao gồm n đỉnh, m cạnh

Output: Cây bao trùm ngắn nhất P của đồ thị G

Trang 27

2.1.2.3 Xây dựng thuật toán

Bước 1: Sắp xếp các cạnh theo thứ tự trọng số tăng dần và khởi tạo T := Ø

Bước 2: Duyệt theo cạnh e thuộc danh sách đã sắp xếp

+ Nếu T + {e} không chứa chu trình thì ghép e vào cây T:= T + {e}

Trang 28

Tổng chiều dài 7 cạnh đã chọn và tổng độ dài các cạnh đã chọn là: 14

Đồ thị đầu

vào

Đồ thị đầu vào

Trang 29

Mô tả thuật toán với ví dụ minh họa trên như sau:

Bước 2: Duyệt theo cạnh e thuộc danh sách đã sắp xếp

+ Vì T + {(1, 5)} không chứa chu trình thì ghép cạnh (1,5) vào cây T:= T + {(1,5)}

1

1

1

Trang 30

+ Vì T + {(4, 8)} không chứa chu trình thì ghép cạnh (4,8) vào cây T:= T + {(4, 8)}

+ Vì T + {(7, 8)} không chứa chu trình thì ghép cạnh (7,8) vào cây T:= T + {(7, 8)}

+ Vì T + {(1, 6)} không chứa chu trình thì ghép cạnh (1,6) vào cây T:= T + {(1, 6)}

Trang 31

+ Vì T + {(2, 3)} không chứa chu trình thì ghép cạnh (2,3) vào cây

Trang 32

+ Vì T + {(1, 3)} không chứa chu trình thì ghép cạnh (1,3) vào cây

T:= T + {(1, 3)}

+ Vì T có đủ n -1 cạnh ( 7 cạnh) nên dừng

Cây khung cần tìm có 7 cạnh (đã chọn) và tổng độ dài các cạnh là: 14

Lưu ý đồ thị kết quả thu được ở các bước trung gian có thể không liên thông mà

bao gồm nhiều mảnh liên thông (cây con) Loại đồ thị này được gọi là rừng Kết quả

cuối cùng sẽ là cây vì nó liên thông và được tạo thành từ n - 1 cạnh Ta vận dụng tổ

chức find-union cho các tập đỉnh rời nhau để quản lí các tập đỉnh được chọn nhằm

phát hiện chu trình Cạnh (x, y) khi được ghép vào đồ thị trung gian sẽ tạo thành chu trình khi và chỉ khi các đỉnh x và y cùng nằm trong một cây của đồ thị (rừng) trung

gian đó Như vậy mỗi cây con của đồ thị trung gian được quản lí như một tập con

của tập các đỉnh 1 n của đồ thị ban đầu Tập con này có phần tử đại diện chính là

gốc của cây tương ứng Phần tử này được chọn theo mã số nhỏ nhất Các đỉnh còn lại của cây con đều trỏ đến gốc đó

Dễ thấy cây bao trùm luôn luôn có n đỉnh và n - 1 cạnh

2.2.3 Xác định độ phức tạp của thuật toán

Trang 33

2.3 Thuật toán Dijkstra -Tìm đường đi ngắn nhất trong đồ thị có trọng số

2.3.1 Phát biểu bài toán

Cho G = (V, E) là đơn đồ thị liên thông (vô hướng hoặc có hướng) có trọng

số, V = {1, , n} là tập các đỉnh , E là tập các cạnh (cung)

Cho s0 ∈ E Tìm đường đi ngắn nhất đi từ s0 đến các đỉnh còn lại Giải bài toán trên bằng thuật toán Dijkstra

2.3.2 Phân tích thiết kế thuật toán

2.3.2.1 Ý tưởng thuật toán Dijkstra

Thuật toán Dijkstra cho phép tìm đường đi ngắn nhất từ một đỉnh s đến các

đỉnh còn lại của đồ thị và chiều dài (trọng số ) tương ứng

Phương pháp của thuật toán là xác định tuần tự đỉnh có chiều dài đến s theo thứ tự tăng dần

Thuật toán được xây dựng trên cơ sở gán cho mỗi đỉnh các nhãn tạm thời

Nhãn tạm thời của các đỉnh cho biết cận trên của chiều dài đường đi ngắn nhất từ s đến đỉnh đó Nhãn của các đỉnh sẽ biến đổi trong các bước lặp, mà ở mỗi bước lặp sẽ có một nhãn tạm thời trở thành chính thức Nếu nhãn của một đỉnh nào

đó trở thành chính thức thì đó cũng chính là chiều dài ngắn nhất của đường đi từ s

Trang 35

Nếu v kề với si-1 thì L(v) = Min{L(v), L(si-1) + m(si-1,v)};

- Tìm si ∉ S và kề với sj, j = 0, i − 1 sao cho :

Thuật toán dừng khi i = n-1;

Khi thuật toán kết thúc, ta có :

0 = d(s0,s0) ≤ d(s0,s1) ≤ d(s0,s2) ≤ ≤ d(s0,sn-1)

Nếu chỉ tìm đường đi ngắn nhất từ s0 đến t, thì thuật toán dừng khi có t ∈ S

Tính chất tham lam của thuật toán Dijkstra

Tại mỗi bước, chọn si ∉ S và si là đỉnh kề với sj, với j = 0, i − 1 sao cho L(si )

= Min{L(v) : ∀v ∉ S }

Minh hoạ : Xét đồ thị có hướng G (hình dưới)

Đường đi ngắn nhất từ đỉnh s = 1 đến các đỉnh còn lại :

Trang 38

- Tìm s5 ∉ S và kề với 1, 3,2, 6 hoặc 4 sao cho :

2.3.3 Xác định độ phức tạp của thuật toán

Thuật toán mô tả bởi 2 vòng lặp lồng nhau nên T(n) O(n2)

2.4 Bài toán cái ba lô

2.4.1 Phát biểu bài toán

Có n vật, mỗi vật i, i{1, ,n} đƣợc đặc trƣng bởi trọng lƣợng wi(kg) và giá trị vi(US) Có một chiếc túi xách có khả năng mang m(kg) Giả sử wi, vi,

m N* i{1, ,n}

Hãy chọn vật xếp vào ba lô sao cho ba lô thu đƣợc có giá trị nhất

2.4.2 Phân tích thiết kế thuật toán

Các wi của n vật có thể đƣợc biểu diễn bằng mảng: w=(w1, w2,…,wn)

Trang 39

Output: c[1 n] đánh dấu các vật được chọn

Vmax: giá trị lớn nhất của chiếc túi xách

Mô tả:

Bước 1: Tính đơn giá cho các loại đồ vật

Bước 2: Xét các loại đồ vật theo thứ tự đơn giá từ lớn đến nhỏ

Bước 3: Với mỗi đồ vật được xét sẽ lấy một số lượng tối đa mà trọng lượng

còn lại của ba lô cho phép

Bước 4: Xác định trọng luợng còn lại của ba lô và quay lại bước 3 cho đến khi không còn có thể chọn được đồ vật nào nữa

Trang 40

Theo đó thì thứ tự ưu tiên để chọn đồ vật là: B, A, D và cuối cùng là C Vật B được xét đầu tiên và ta chọn tối đa 3 cái vì mỗi cái vì trọng lượng mỗi cái là 10 và ba lô có trọng lượng 37 Sau khi đã chọn 3 vât loại B, trọng lượng còn lại trong ba lô là 37 - 3*10 = 7

Xét đến vật A, vì A có trọng lượng 15 mà trọng lượng còn lại của ba lô chỉ còn 7 nên không thể chọn vật A

Xét vật D và ta thấy có thể chọn 1 vật D, khi đó trọng lượng còn lại của ba lô

2.4.3 Xác định độ phức tạp của thuật toán

Thuật toán mô tả bởi 1 vòng lặp lồng nhau nên T(n) O(n)

2.5 Bài toán băng nhạc

2.5.1 Phát biểu bài toán

Người ta cần ghi N bài hát, được mã số từ 1 đến N, vào một băng nhạc có thời lượng tính theo phút đủ chứa toàn bộ các bài hát đã cho Với mỗi bài hát ta biết thời lượng phát của mỗi bài hát đó Băng sẽ được lắp vào một máy phát nhạc đặt trong một siêu thị Khách hàng muốn nghe bài hát nào chỉ cần nhấn phím tương ứng với bài hát đó Để tìm và phát bài hát thứ I trên băng, máy xuất phát từ đầu cuộn băng, quay băng để bỏ qua i-1 bài ghi trước đó Thời gian quay băng bỏ qua mỗi bài hát và thời gian phát bài hát đó được tính là như nhau Tính trung bình, các bài hát trong một ngày được khách hàng lựa chọn với số lần ( tần suất ) là như nhau Hãy tìm cách ghi các bài trên băng sao cho tổng thời gian quay băng trong mỗi ngày là ít nhất

Dữ liệu vào được ghi trong tệp văn bản tên BANGNHAC.INP

Ngày đăng: 26/03/2021, 07:04

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

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

w