1. Trang chủ
  2. » Giáo án - Bài giảng

Phân tích và đánh giá thuật toán bài toán phân phối áo áp dụng phương pháp xấp xỉ

40 338 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 40
Dung lượng 1,16 MB

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

Nội dung

Một phương án phân phối áocho các học sinh có độ lệch cực tiểu là chọn áo có kích thước vai nhỏ nhấtphát cho học sinh có kích thước vai nhỏ nhất.. − Ý tưởng 2 Thuật toán tham lam + Tìm h

Trang 1

-BÀI TẬP LỚNBài toán phân phối áo áp dụng phương

Trang 2

Mục lục

LỜI NÓI ĐẦU 2

I PHƯƠNG PHÁP XẤP XỈ 2

1 Tỷ lệ xấp xỉ 2

2 Yêu cầu của thuật toán xấp xỉ: 2

II TÊN ĐỀ TÀI (Đề số 23) 2

III PHÂN TÍCH BÀI TOÁN 2

1 Các vấn đề của bài toán 2

2 Các ví dụ minh họa 2

3 Cách xây dựng các phương án phân phối áo 2

IV THUẬT TOÁN 2

1 Thuật giải cơ bản 2

2 Thuật giải mở rộng 2

3 Chứng minh tính đúng đắn 2

V ĐÁNH GIÁ, BÌNH LUẬN 2

1 Đánh giá thuật toán 2

2 Độ phức tạp thuật toán 2

3 Bình luận 2

VI THỬ NGHIỆM 2

1 Chương trình thử nghiệm 2

2 Các ví dụ thử nghiệm 2

VII KẾT LUẬN 2

TÀI LIỆU THAM KHẢO 2

Trang 3

LỜI NÓI ĐẦU

Phân tích và đánh giá thuật toán là một trong những nhân tố quantrọng xác định được hiệu năng hệ thống khi giải quyết bài toán tin học đặt

ra Có nhiều bài toán (thuật toán) được đưa ra chỉ tốt ở một mức độ nào đóchấp nhận được Việc tính toán cho phép chấp nhận một sai số nào đó Vìvậy, thời gian gần đây phương pháp xấp xỉ được quan tâm và phát triểntrong một số ứng dụng Có rất nhiều bài toán mà ta có thể giải bằng phươngpháp này Trong đó phải đề cấp đến bài toán phân phối áo, đây là một bàitoán tối ưu hóa Bài toán được đặt tên từ vấn đề lựa chọn cách phân phối áosao cho kết quả thu được là độ lệch cực tiểu

Liên quan đến việc giải quyết bài toán này chúng ta có rất nhiềuphương án khác nhau như: Phương pháp sắp xếp (vun đống), phương pháptham lam …

Ở mỗi phương pháp đều có những ưu nhược điểm khác nhau Tuynhiên tất cả chỉ là những phương án tốt chứ chưa phải là phương án tối ưunhất

Trang 4

I PHƯƠNG PHÁP XẤP XỈ

Thuật toán cho kết quả gần với kết quả tối ưu được gọi là thuật toán xấp xỉ

1 Tỷ lệ xấp xỉ

− Bài toán có thể có nhiều giải pháp

− Cần tối ưu hóa một hàm mục tiêu

− Giải pháp tối ưu là giải pháp mà cực đại (hoặc cực tiểu) hóa hàm mụctiêu

Đặt:

− C là giá trị của hàm mục tiêu của giải pháp xấp xỉ

− C* là giá trị của hàm mục tiêu của giải pháp tối ưu

Một thuật toán xấp xỉ có tỷ lệ xấp xỉ, ký hiệu (n), với bất kỳ dữ liệu vàokích thước n là:

max(C

C¿, C

¿

C )≤ρ(n)

+ Bài toán cực tiểu hóa: C ≥ C* > 0, khi đó (n)=C/C*C/C*

+ Bài toán cực đại hóa: C* ≥ C > 0, khi đó (n)=C/C*C*/C

Một thuật toán với tỷ lệ xấp xỉ (n) được gọi là thuật toán xấp xỉ-(n)

Ta luôn có: (n) ≥ 1

Nếu (n) càng nhỏ thì giải pháp xấp xỉ càng gần với giải pháp tối ưu.Thuật toán xấp xỉ-1 cho giải pháp tối ưu (nghĩa là (n)=C/C*1)

2 Yêu cầu của thuật toán xấp xỉ:

Một thuật toán xấp xỉ phải thoả mãn các yêu cầu sau đây:

− Dễ tính, dễ chương trình hoá

− Ước lượng được sai số gặp phải

− Tính được thời gian chạy của thuật toán

− Chứng minh được tính đúng đắn của thuật toán

Trang 5

II TÊN ĐỀ TÀI (Đề số 23)

Người ta may sẵn n cái áo với các kích thước vai V(1), V(2), …, V(n)

cho n học sinh Các học sinh này được đánh số từ 1 tới n và có kích thước

vai là p(1), p(2), …, p(n) Nếu học sinh i nhận được áo j thì độ lệch vai cho trường hợp này sẽ là |V(i)-p(j)| Một phương án phân phối áo cho các học sinh 1,2, n được mô tả như một hoán vị  1 ,  2 , …, n với hàm ý học sinh i

nhận được áo i Độ lệnh phương án này được định nghĩa bằng:

max {|V(i) – p( i )|, i=1,2, ,n}

Hãy xây dựng thuật toán phân phối áo cho các học sinh sao cho độ lệnh

là cực tiểu Đánh giá độ phức tạp của thuật toán xây dựng được

III PHÂN TÍCH BÀI TOÁN

1 Các vấn đề của bài toán

− Dữ liệu đầu vào là hai dãy số V(1), V(2), …, V(n) và p(1), p(2), …, p(n) tương ứng với kích thước vai áo và kích thước vai của n học

sinh

− Đầu ra bài toán là đưa ra phương án phân phối áo cho học sinh với độlệnh là cực tiểu

− Giải pháp phân phối áo cho học sinh như thế nào

− Cách tính độ lệnh cực tiểu của các phương án

− Xây dựng thuật toán phân phối áo cho các học sinh sao cho độ lệnh làcực tiểu

− Đánh giá được độ phức tạp của thuật toán

− Khả năng nâng cao số phần tử tối đa của hai mảng dữ liệu đầu vào cóthể lên đến 1.000.000 phần tử Do vậy, bài toán phải tính đến khảnăng không thể chứa hết trong bộ nhớ quy ước

2 Các ví dụ minh họa

Ví dụ 1:

Kích thước vai áo có số thứ tự là: V(1,2…8) =C/C* {19, 8, 6, 11, 9, 13, 5, 14} Kích thước vai học sinh có số thứ tự là: p(1,2 8) =C/C* {15, 4, 3, 2, 6, 5, 1, 10}

Trang 6

Phương án 1:

Phân phối các áo có kích thước vai V 1 , V 2 , V 8 tương ứng với các học

sinh kích thước vai p 1 , p 2 , p 8

Khi đó độ lệnh của phương án phân phối là

d1 =C/C* max {|V(i) – p( i )|, i=1,2, ,8}

d1 =C/C* max {(19–15), (8–4), (6–3), (11–2), (9–6), (13–5), (5–1), (14–10)} =C/C* 9 Phương án 2:

Sắp xếp kích thước vai áo, vai học sinh theo thứ tự tăng dần và đánh

số lại theo thứ tự, ta có:

Kích thước vai áo có số thứ tự là: V(1,2…8)=C/C* { 5, 6, 8, 9, 11, 13, 14, 19} Kích thước vai học sinh có số thứ tự là: p(1,2 8)=C/C* { 1, 2, 3, 4, 5, 6, 10, 15}

Phân phối các áo có kích thước vai V 1 , V 2 , V 8 tương ứng với các học

sinh kích thước vai p 1 , p 2 , p 8

Khi đó độ lệnh của phương án phân phối là :

d2 =C/C* max {|V(i) – p( i )|, i=1,2, ,8}

d2 =C/C* max {(5–1), (6–2), (8–3), (9–4), (11–5), (13–6), (14–10), (19–15)} =C/C* 7 Phương án 3 :

Tìm áo có kích thước nhỏ nhất trong dãy V1 V8 =C/C* Vmin1=C/C* 5

Tìm học sinh có kích thước vai nhỏ nhất trong dãy p1…p8 =C/C* pmin1=C/C* 1

Phát áo có kích thước Vmin 1 cho học sinh có kích thước vai pmin 1

Thực hiện tương tự với các dãy còn lại có kết quả :

Trang 7

Khi đó độ lệnh của phương án phân phối là :

d3=C/C* max {|V(i) – p( i )|, i=1,2, ,8} = max {|Vmin(α) – pmin(α)|, α=1,2, ,8}

Phân phối các áo có kích thước vai V 1 , V 2 , V 10 tương ứng với các

học sinh kích thước vai p 1 , p 2 , p 10

Khi đó độ lệnh của phương án phân phối là

d1 =C/C* max {|V(i) – p( i )|, i=1,2, ,10}

d1 =C/C* max {(12–2), (8–5), (10–3), (17–6), (13–11), (27–23), (33–16), (42–20), (19–9), (22–19)} =C/C* 22

Trang 8

Khi đó độ lệnh của phương án phân phối là:

d2 =C/C* max {|V(i) – p( i )|, i=1,2, ,10}

d2 =C/C* max {(3–2), (8–5), (10–6), (11–9), (17–12), (19–13), (19–16), (27–20),(33–22), (42–23)} =C/C* 19

Phương án 3 :

Tìm áo có kích thước nhỏ nhất trong dãy V1 V10 =C/C* Vmin1=C/C* 2

Tìm học sinh có kích thước vai nhỏ nhất trong dãy p1…p10 =C/C* pmin1=C/C* 3

Phát áo có kích thước Vmin 1 cho học sinh có kích thước vai pmin 1

Thực hiện tương tự với các dãy còn lại có kết quả :

Khi đó độ lệnh của phương án phân phối là :

d3=C/C* max {|V(i) – p( i )|, i=1,2, ,10} = max {|Vmin(α) – pmin(α)|, α=1,2, ,10}

d3=C/C* max {|2 - 3|, |8 -5|, |10 -6|, |11 -9|, |17 -12|, |19 -13|,|19 - 16|, |27 - 20|, |33-22|, |42 -23|} =C/C* 19

Nhận xét: Trong phương án trên thì phương án 2 (phương án sắp xếp lại hai

dãy theo thứ tự tăng dần (không giảm)) và phương án 3 (phương pháp thamlam) là phương án cho kết quả có độ lệnh nhỏ hơn

3 Cách xây dựng các phương án phân phối áo

Sắp xếp n cái áo theo chiều không giảm của kích cỡ vai, sắp xếp các họcsinh theo chiều không giảm của kích cỡ vai Một phương án phân phối áocho các học sinh có độ lệch cực tiểu là chọn áo có kích thước vai nhỏ nhấtphát cho học sinh có kích thước vai nhỏ nhất Sau đó tiến hành tương tự vớicác áo và học sinh còn lại

Trang 9

IV THUẬT TOÁN

1 Thuật giải cơ bản

Lần lượt phát áo cho học sinh theo quy tắc:

- Học sinh thứ 1 được nhận áo thứ 1;

- Học sinh thứ 2 được nhận áo thứ 2;

- ………

- Học sinh thứ n nhận áo thứ n

Tính độ lệch của phương án

− Ý tưởng 2 (Thuật toán tham lam)

+ Tìm học sinh có kích thước vai nhỏ nhất trong n học sinh

+ Tìm chiếc áo có kích thước vai nhỏ nhất trong n chiếc áo

+ Phát chiếc áo vừa tìm được cho học sinh vừa tìm được

+ Tìm học sinh có kích thước vai nhỏ nhất trong n-1 học sinh còn lại+ Tìm chiếc áo có kích thước vai nhỏ nhất trong n-1 chiếc áo còn lại+ Phát chiếc áo vừa tìm được cho học sinh vừa tìm được

+ Thực hiện các bước trên cho đến khi không còn học sinh & áo

1.2 Thuật giải bằng lời cho ý tưởng 1:

− Input: Hai dãy số nguyên V1, V2, V3,… Vn; p1, p2, p3,…pn;

− Ouput: Độ lệnh cực tiểu d; mảng đã được sắp xếp tương ứng với

phương pháp phân phối áo

Trang 10

4 Bước 4: Tính độ lệch của từng học sinh, tính độ lệch lớn nhất

(độ lệch của phương án phân phối áo)

1.3 Thuật giải giả mã cho ý tưởng 1:

* Input: mảng số nguyên V[1 n],p[1 n] số nguyên n

* Output: mảng số nguyên đã săp xếp V[1 n],p[1 n] độ lệnh d;

{Sử dụng thuật toán Sắp xếp vun đống(HeapSort) để sắp xếp hai mảng kích thước của vai áo và vai học sinh vì thuật toán vun đống được đánh giá là có

Trang 11

proc Build_Initial_Heap( X:mang, n: tri so)

Trang 12

Output

d; V[1],p[1]; V[2],p[2]; …; V[n],p[n];

Input: Hai dãy số nguyên V 1 , V 2 , V 3 ,… V n ; p 1 , p 2 , p 3 ,…p n;

Ouput: Độ lệnh cực tiểu d; Phương án phân phối áo V(1),p(1); V(2),p(2); … V(n),p(n) (kết quả này đã đánh thứ tự lại số thứ tự của học

sinh)

Thuật toán:

1 Bước 1: Tìm áo có kích thước vai áo nhỏ nhất.

2 Bước 2: Tìm học sinh có kích thước vai nhỏ nhất.

3 Bước 3: Tính độ lệch vai áo của cặp áo và kích thước vai tìm

được

4 Bước 4: Thực hiện tương tự với số áo và học sinh còn lại.

1.5 Thuật giải giả mã cho ý tưởng 2:

* Input: Mảng số nguyên V[1 n],p[1 n] số nguyên n

* Output: Độ lệnh cực tiểu d; Phương án phân phối áo V(1),p(1); V(2),p(2);

…; V(n),p(n) (kết quả này đã đánh thứ tự lại số thứ tự của học sinh).

Trang 13

7.Greedy(X,Y,n-1);

Output d;

2 Thuật giải mở rộng

Đối với thuật toán 1: Thuật toán cơ bản áp dụng khi toàn bộ dữ liệu

của mảng V[ ] và mảng p[ ] có thể chứa được trong toàn bộ bộ nhớ quy ước

(640KB) Trong trường hợp số phần tử của X lớn hơn khả năng chứa của bộnhớ này (ví dụ n  1.000.000), thì việc sắp xếp với dữ liệu đầu vào là dãy

V[ ] và p[ ] với số lượng n lớn thì khi đó chúng ta không thể áp dụng thuần

túy thuật giải cơ bản được, mà sẽ phải mở rộng thuật giải sắp xếp cho hai

mảng V[ ] và mảng p[ ].

Thuật giải mở rộng này chủ yếu liên quan đến cách thức tải dữ liệu từ file ra

bộ nhớ và sắp xếp Ý tưởng chính sẽ là chia dãy V và p thành các dãy con

có độ dài MAXP (max length of part) thỏa mãn: bộ nhớ quy ước đủ chứatoàn bộ mỗi dãy con Khi đó, ta sẽ áp dụng thuật giải HeapSort cho các dãycon này

Đối với ý tưởng 2: Thuật toán có thể giải quyết được với số lượng lớn

của bộ dữ liệu đầu vào bằng việc xét từng phần tử Tuy nhiên thuật toán sẽphải trả giá bằng độ phức tạp lớn hơn

Nhận xét: Qua hai thuật toán xây dựng được thì việc giải quyết bài toán tùy

thuộc vào đặc thù bài toán cụ thể đặt ra, dữ liệu đầu vào ta có thể chọn thuậttoán cho phù hợp Xét về độ phức tạp của thuật toán thì thuật toán 1 xâydựng được có độ phức tạp nhỏ hơn so với thuật toán 2

3 Chứng minh tính đúng đắn

Sắp xếp tập p và V theo thứ tự tăng dần (không giảm).

Không mất tính tổng quát, giả sử theo thứ tự p(i), V(i), i=C/C*1…n là thứ tự sau

Trang 14

d =C/C* max{|V(i)- p( i )|, i=1,2}.

Ta có các độ lệch vai tương ứng như sau:

d1=C/C* max{|V(1)- p(1) |,|V(2)- p(2) |} và d2=C/C* Max{|V(2)- p(1) |,|V(1)- p(2) |}Giả sử p(1) ≤ p(2) và V(1)≤ V(2) thì ta chứng minh được: d1 ≤ d2 trong mọitrường hợp

Trang 15

Nhận xét: Như vậy trong tất cả các trường hợp thì ta luôn được d1 ≤ d 2.

3.2 Xét các phương án phân phối áo với n nghĩa là cho áo có kích thước

V(1),V(2)…V(n) và học sinh có kích thước vai là p(1), p(2),…,p(n) và

ta có độ lệch.

Gọi độ lệch của phương án sắp xếp hai mảng kích thước áo và kích

thước vai áo là d= max{|V(i)- p(i)|, k=1,n}=|V(k)-p(k)|.Giả sử tồn tại một phương án phân phối áo khác mà cho ta giá trị d’=C/C* max{|V(i)- p(i)|, k=1,n}=V(j)-p(j) nhỏ hơn d như vậy theo chứng minh trên thì chỉ V(k),V(j)

và p(k),p(j) cùng tăng hoặc cùng giảm (V(k)≤ V(j) và p(k)≤p(j) hoặc V(j)≤ V(k) và p(j)≤p(k)) Mặt khác d’ là trường hợp khác không phải là trường

hợp được sắp xếp vậy điều giả sử là sai Như vậy phương pháp sắp xếp cho

ta lời giải tối ưu

Việc chọn chiếc áo có kích thước nhỏ nhất cho người có kích thướcvai nhỏ nhất sẽ cho độ lệch nhỏ nhất mà học sinh có kích thước vai nhỏ nhất

có thể nhận đươc áo Tiến hành tương tự cho đến hết n học sinh thì cho tamột dãy các độ lệch kích thước áo và vai áo nhỏ nhất Vì thế mà chọn giá trịlớn nhất của các giá trị độ lệch ấy sẽ cho ta độ lệch phương án nhỏ nhấtnhận đươc

Nhận xét: Vậy thuật toán đã xây dựng đúng đắn.

Trang 16

V ĐÁNH GIÁ, BÌNH LUẬN

1 Đánh giá thuật toán

− Input: Dữ liệu đầu vào của thuật toán là hai dãy số nguyên với kích thước n được xác định trước, số n là một số nguyên không lớn hơn

1.000.000

− Output: Dữ liệu đầu ra của thuật toán này là tìm được độ lệch và

phương án phân phối các áo

− Tính xác định: Mỗi bước của thuật toán được thực hiện đơn giản và

chỉ bao gồm 3 phép toán: phép so sánh, phép gán và phép trừ Đó làcác phép so sánh để sắp xếp các dãy số nguyên, tính độ lệch củaphương án sắp xếp

− Tính khả khi: Các phép toán của thuật toán chỉ sử dụng phép gán,

phép so sánh và phép trừ trên tập số nguyên, đều là những phép toánthông thường

− Tính dừng: Dữ liệu vào là dãy số nguyên có kích thước n thì theo cả

thuật toán trình bày ở trên ta luôn đưa ra kết quả

2 Độ phức tạp thuật toán

Trong thuật giải 1, Thuật toán gồm 2 bước chính là sắp xếp dãy số không

giảm (2 dãy) và so sánh giá trị phần tử thứ k của dãy 1 với phần tử thứ k

của dãy 2 (k =C/C*1,2,… n)

Để giảm độ phức tạp của thuật toán, ta chọn phương pháp sắp xếp vun đống

(Heapsort) với số phép so sánh đối với mỗi dãy là =C/C* nlog 2 n

Trang 17

Trong thuật giải thuật 2, ta thấy rằng phép chủ yếu số phép so sánh

Qua 2 thuật toán xây dựng được, thì thuật toán 1 (sắp xếp) được cải thiện

về độ phức tạp tính toán hơn thuật toán số 2 (tham lam)

Trang 18

VI THỬ NGHIỆM

1 Chương trình thử nghiệm

Chương trình thử nghiệm cài đặt trên ngôn ngữ C++

Chương trình thử nghiệm gồm:

− File mã nguồn chương trình: PhanPhoiAo.dev

− File chạy chương trình: PhanPhoiAo.exe

− Các file dữ liệu đầu vào được tạo sẵn để thử nghiệm: 10.txt, 20.txt,

50.txt, 100.txt, 500.txt, 1000.txt, 10000.txt, 100000.txt

Cách chạy chương trình như sau:

− Chạy file PhanPhoiAo.exemàn hình chương trình như sau:

− Chọn chức năng: Nhấn phím 1 để phân phối áo dựa trên 1 file lưu

trữ kích thước vai áo và kích thước vai học sinh có sẵn bằng thuậttoán 1 (*.txt)

− Chọn chức năng:Nhấn phím 2 phân phối áo dựa trên thuật toán 1 cho

bộ dữ liệu ngẫu nhiên với kích thước được nhập từ bàn phím

− Chọn chức năng:Nhấn phím 3 để phân phối áo dựa trên 1 file lưu trữ

kích thước vai áo và kích thước vai học sinh có sẵn bằng thuật toán 2(*.txt)

− Chọn chức năng:Nhấn phím 4 phân phối áo dựa trên thuật toán 2 cho

bộ dữ liệu ngẫu nhiên với kích thước được nhập từ bàn phím

− Chọn chức năng: Nhấn phím 5 để thoát chương trình.

Trang 19

− Các dòng tiếp theo là các giá trị V[i],p[i]; i = 2,3, … n.

Cách phân phối áo sẽ được in ra màn hình và độ lệch của phân phối áo đócùng thời gian thực hiện

Môi trường thử nghiệm:Intel® Core ™ i5, 8GB RAM, Windows 7 x64

Trang 20

Chọn chức năng: 1 - File: 100.txt (Thời gian chạy 152ms)

Trang 21

Chọn chức năng: 1 - File: 100000.txt (Thời gian chạy 46220ms)

Trang 23

Chọn chức năng: 2 - Nhập 20 (Thời gian chạy 18ms)

Trang 24

Chọn chức năng: 2 - Nhập 100 (Thời gian chạy 150ms)

Trang 26

Chọn chức năng: 2 - Nhập 100000 (Thời gian chạy 40963ms)

Trang 28

Chọn chức năng: 2 - Nhập 1000000 (Thời gian chạy 452258ms)

Trang 29

Chọn chức năng: 3 - File: 20.txt (Thời gian chạy 21ms)

Trang 30

Chọn chức năng: 3 - File: 100.txt (Thời gian chạy 158ms)

Ngày đăng: 03/10/2017, 00:45

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