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

Báo cáo môn phân tích đánh giá thuật toán

16 166 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 16
Dung lượng 704,5 KB

Nội dung

Có 3 phương pháp để giải quyết chúng được dùng trong thực tế: - Nếu kích thước dữ liệu nhập vào đủ nhỏ, có thể sử dụng thuật toán giải chính xác với chi phí thời gian hàm mũ là phương án

Trang 1

KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO MÔN HỌC

PHÂN TÍCH VÀ ĐÁNH GIÁ THUẬT TOÁN

Đề bài số 22:

Phương pháp xấp xỉ Bài toán cái túi: có n đồ vật với kích thước s1, ,

sn và các túi có sức chứa T Giả thiết rằng si  T,  i =1, 2, ,n Tìm cách xếp các đồ vật vào túi sao cho số túi phải sử dụng là ít nhất

Giáo viên hướng dẫn: PGS.TS Đào Thanh Tĩnh

Học viên: Phan Thùy Chi

Hà Nội, 2014

Trang 2

Mục lục

I Đặt vấn đề 2

II Bài toán cái túi 3

A Phát biểu bài toán: 3

B Một số thuật toán giải quyết bài toán: 3

1 Phương pháp theo kinh nghiệm: 3

2 Phương pháp tham lam: 4

2.1 Sắp xếp các vật theo kích thước tăng dần: 4

2.2 Sắp xếp các vật theo kích thước giảm dần: 6

III Cài đặt thử nghiệm 9

1 Chương trình minh họa 9

2 Một số kết quả kiểm thử 10

3 Đánh giá – bình luận: 13

KẾT LUẬN 14

TÀI LIỆU THAM KHẢO 15

Trang 3

I Đặt vấn đề

Phân tích, thiết kế và đánh giá thuật toán là một trong những nhân tố mấu chốt 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 lời giải (thuật toán) được đưa ra chỉ tốt ở một mức độ chấp nhận được

Rất khó có thể tìm được chính xác phương án tối ưu của bài toán, thế nhưng vì tầm quan trọng nên ta không thể bỏ qua được lớp bài toán này Có 3 phương pháp để giải quyết chúng được dùng trong thực tế:

- Nếu kích thước dữ liệu nhập vào đủ nhỏ, có thể sử dụng thuật toán giải chính xác với chi phí thời gian hàm mũ là phương án tốt nhất

- Ta phân loại bài toán ra trường hợp đặc biệt và quan trọng rồi tìm lời giải cho nó với chi phí thời gian đa thức

- Tìm lời giải gần tối ưu cho bài toán với chi phí thời gian đa thức Điều kiện gần tối ưu có nghĩa là đủ tốt Phương pháp tìm lời giải gần tối ưu ta gọi là phương pháp xấp xỉ Thuật toán được áp dụng cho phương pháp này gọi là thuật toán xấp xỉ

Với bài toán cái túi đã có nhiều phương pháp được đề xuất như: phương pháp quy hoạch động, phương pháp nhánh cận ở mỗi phương pháp đều có ưu, nhược điểm riêng Với bài tập này, em nghiên cứu giải bài toán này bằng phương pháp xấp xỉ Do thời gian có hạn, trong báo cáo chưa thể trình bày đầy

đủ chi tiết các thuật toán xấp xỉ, rất mong được sự đóng góp ý kiến của thầy giáo

và các bạn học viên

Qua đây, em xin chân thành biết ơn sự chỉ bảo tận tình của thầy giáo TS Đào Thanh Tĩnh đã giúp em hoàn thành tốt nội dung nghiên cứu này

Trang 4

II Bài toán cái túi

A Phát biểu bài toán:

Phương pháp xấp xỉ Bài toán cái túi: có n đồ vật với kích thước s 1 , , s n

và các túi có sức chứa T Giả thiết rằng s i  T,  i =1, 2, ,n Tìm cách xếp các đồ vật vào túi sao cho số túi phải sử dụng là ít nhất

B Một số thuật toán giải quyết bài toán:

1 Phương pháp theo kinh nghiệm:

a) Tư tưởng thuật toán:

- Tìm vật s[i] có kích thước lớn nhất và nhỏ hơn hoặc bằng sức chứa của túi

tltui[j] (tức là s[i] <= tltui[j]) Khi đó ta cho vật s[i] vào túi j

- Nếu nhét thêm vật thứ i+1 mà có kích thước túi sẽ lớn hơn sức chứa tối đa

của túi [j] thì ta cho vật vào túi j+1 Cứ như vậy cho đến khi không còn đồ vật nào cả

b) Đánh giá:

- Nếu n là lớn, con người không thể làm được vì mất quá nhiều thời gian.

- Kết quả: Nhận được kết quả tốt.

c) Ví dụ minh họa:

Sức chứa của túi T=1 Có 8 đồ vật với kích thước tương ứng như sau:

Trang 5

2 Phương pháp tham lam:

2.1 Sắp xếp các vật theo kích thước tăng dần:

- Sắp xếp các vật s[i] theo chiều tăng dần của kích thước

- Duyệt các đồ vật từ 1 đến n

Bắt đầu từ túi j=1, nếu túi tltui[j] + s[i] <=T thì cho vật s[i] vào túi tltui[j] Ngược lại nếu tltui[j] + s[i] > T thì ta xét túi tiếp theo

Quá trình lặp lại cho đến khi đã xét hết tất cả các đồ vật (i = n) là kết thúc

a) Mô tả thuật toán:

Input: - Cho n đồ vật

- Gọi s là mảng chứa kích thước của n đồ vật (s1, s2, …, sn)

- Gọi T là sức chứa tối đa của 1 túi.

Output: - Gọi tltui là mảng chứa sức chứa đang có của n túi (tltui1, tltui2,

…, tltuin)

- Gọi mảng bin là mảng lưu trữ thông tin vật nào đã được xếp vào túi nào.

2

8(7)

4(6) 5(8)

2 2 2 3(5) Túi 1

Sức chứa =10 Sức chứaTúi 2 =9 Sức chứa =9Túi 3

Trang 6

b) Cài đặt thuật toán:

void sxtang(int s[],int n){

int i,j,tg;

for(i=0;i<n-1;i++)

for(j=i+1;j<n;j++){

if(s[i]>s[j]) {

tg = s[i];

s[i] = s[j];

s[j] = tg;

} }

}

c) Ví dụ minh họa:

Có 7 đồ vật, sức chứa của túi T=10 Các vật có kích thước tương ứng: 2, 3, 3, 4,

4, 7, 5

* Xếp các đồ vật theo thứ tự tăng dần kích thước

Sắp xếp các vật tăng

dần theo kích thước 2 3 3 4 4 5 7

* Xếp các đồ vật:

- Đồ vật thứ 1: s[1]=2, túi 1 có sức chứa = 2

- Đồ vật thứ 2: s[2]=3, túi 1 có sức chứa =5

Trang 7

- Đồ vật thứ 3: s[3]=3, túi 1 có sức chứa =8.

- Đồ vật thứ 4: s[4]=4, túi 1 có sức chứa = 14 -> thêm túi 2

Thêm đồ vật thứ 4 vào túi 2, túi 2 có tổng sức chứa là 4

- Đồ vật thứ 5: s[5]=4, túi 1 có sức chứa =14 -> thêm vào túi 2

Thêm đồ vật thứ 5 vào túi 2, túi 2 có tổng sức chứa là 8

- Đồ vật thứ 6:s[6]=5, túi 1 có sức chứa =15 -> Thêm vào túi 2

Túi 2 có sức chứa là 13 -> thêm túi 3

- Đồ vật thứ 7:s[7]=7, túi 1 có sức chứa =17

Thêm đồ vật thứ 7 vào túi 2, túi 2 có tổng sức chứa là 15 -> Thêm đồ vật vào túi 3

Thêm đồ vật thứ 7 vào túi 3, túi 3 có tổng sức chứa là 12 -> Thêm đồ vật vào túi 4

Thêm đồ vật thứ 7 vào túi 4, túi 4 có tổng sức chứa là 7

Đã xét hết các đồ vật

 Ta được kết quả như hình sau:

C Sắp xếp các vật theo kích thước giảm dần:

a) Tư tưởng thuật toán:

- Sắp xếp mảng s[ ] theo chiều giảm dần của kích thước đồ vật

3(3)

3(2)

2(1)

4(5)

Túi 1

Sức chứa =8

7(7)

Túi 4 Sức chứa =7

Trang 8

- Duyệt các vật từ 1 đến n.

Nếu vật s[i] mà cho được vào túi j thì thực hiện cho vào túi j và tăng sức chứa tltui[j]

Nếu vật s[i] không thể thêm vào túi tltui[j] thì ta xét xem túi tltui[j+1] nếu cho vào được thì ta thêm vật s[i] vào túi tltui[j+1]

Lặp đi lặp lại với các vật s[i+1] tiếp theo cho đến khi i = n

b) Mô tả thuật toán:

Input: - Cho n đồ vật

- Gọi s là mảng chứa kích thước của n đồ vật (s1, s2, …, sn)

- Gọi T là sức chứa tối đa của 1 túi.

Output: - Gọi tltui là mảng sức chứa đang có của n túi (tltui1, tltui2, …, tltuin)

- Gọi mảng bin là mảng lưu trữ thông tin vật nào đã được xếp vào túi nào.

c) Cài đặt thuật toán:

void sxgiam(int s[],int n){

int i,j,tg;

for(i=0;i<n-1;i++)

for(j=i+1;j<n;j++){

if(s[i]<s[j]) {

tg = s[i];

s[i] = s[j];

s[j] = tg;

} }

}

Trang 9

d) Ví dụ minh họa:

Sắp xếp các vật tăng

dần theo kích thước 7 5 4 4 3 3 2

Xếp các đồ vật tương tự như trên ta có kết quả:

e) Đánh giá thuật toán:

- Với phương pháp sắp xếp mảng s[ ] theo chiều giảm dần thì cho kết quả tối ưu hơn so với thuật toán sắp xếp tăng dần

- Thuật toán cũng mất nhiều bộ nhớ khi n là lớn

- Độ phức tạp của thuật toán là O(n)

3(5)

7(1)

9

95

0

7(1)

4(3) 5(2)

2(7) 3(6) 4(4)

Túi 1

Sức chứa=10

Túi 3 Sức chứa =9

Túi 2 Sức chứa =9

Trang 10

III Cài đặt thử nghiệm

1 Chương trình minh họa

- Chương trình cài đặt thử nghiệm trên phần mềm DEV C++

- Chương trình thử nghiệm gồm các file:

 bai tap.dev

 Main.cpp

- Kết quả chạy thử:

Trang 11

2 Một số kết quả kiểm thử

* File dữ liệu đầu vào: 5.txt

Số lượng đồ vật = 5

Tải trọng của túi = 10

Trọng lượng của các đồ vật lần lượt là: 1 6 2 3 7

Cách 1 sắp xếp các đồ vật theo thứ tự giảm dần

Số lượng túi sử dụng là 2

Túi 1 với các đồ vật có kích thước là 7 – 3, Tổng = 10

Túi 2 với các đồ vật có kích thước là 6 – 2 - 1, Tổng = 9

Thời gian thực hiện thuật toán là không đáng kể

Cách 2 sắp xếp các đồ vật theo thứ tự tăng dần

Số lượng túi sử dụng là 3

Túi 1 với các đồ vật có kích thước là 1 - 2 - 3, Tổng = 6

Túi 2 với các đồ vật có kích thước là 6, Tổng = 6

Túi 3 với các đồ vật có kích thước là 7, Tổng = 7

Thời gian thực hiện thuật toán là không đáng kể

* File dữ liệu đầu vào: 10.txt

Số lượng đồ vật = 10

Tải trọng của túi = 15

Trọng lượng của các đồ vật lần lượt là: 5 7 3 2 6 5 2 8 4 1

Cách 1 sắp xếp các đồ vật theo thứ tự giảm dần

Số lượng túi sử dụng là 3

Túi 1 với các đồ vật có kích thước là 8 – 7, Tổng = 15

Túi 2 với các đồ vật có kích thước là 6 – 5 - 4, Tổng = 15

Túi 3 với các đồ vật có kích thước là 5 – 3 – 2 – 2 – 1 , Tổng = 13

Thời gian thực hiện thuật toán là không đáng kể

Cách 2 sắp xếp các đồ vật theo thứ tự tăng dần

Số lượng túi sử dụng là 4

Trang 12

Túi 1 với các đồ vật có kích thước là 1 - 2 – 2 – 3 - 4, Tổng = 12

Túi 2 với các đồ vật có kích thước là 5 - 5, Tổng = 10

Túi 3 với các đồ vật có kích thước là 6 - 7, Tổng = 13

Túi 4 với các đồ vật có kích thước là 8, Tổng = 8

Thời gian thực hiện thuật toán là không đáng kể

* File dữ liệu đầu vào: 100.txt

Số lượng đồ vật = 100

Tải trọng của túi = 540

Trọng lượng của các đồ vật lần lượt là: 2 4 5 6 47 4 3 5 7 8 12 4 7 23 38 2 9

7 10 14 22 4 5 6 7 4 3 5 7 8 12 4 7 3 8 2 9 7 10 14 22 4 5 6 7 4 3 25 7 8 12 4 7 3

8 2 19 7 10 14 2 4 5 6 7 4 3 5 7 8 12 4 17 3 8 2 9 7 10 14 2 4 5 6 17 4 3 5 7 8 12

4 7 3 8 2 39 7 10 14

Cách 1 sắp xếp các đồ vật theo thứ tự giảm dần

Số lượng túi sử dụng là 17

Túi 1 với các đồ vật có kích thước là 47 – 3 , Tổng = 50

Túi 2 với các đồ vật có kích thước là 39- 10, Tổng = 49

Túi 3 với các đồ vật có kích thước là 38- 12 , Tổng = 50

Túi 4 với các đồ vật có kích thước là 25 – 23 - 2 , Tổng = 50

Túi 5 với các đồ vật có kích thước là 22 -22 - 6 , Tổng = 50

Túi 6 với các đồ vật có kích thước là 19 – 17 - 14 , Tổng = 50

Túi 7 với các đồ vật có kích thước là 17 – 14 – 14 - 5 , Tổng = 50

Túi 8 với các đồ vật có kích thước là 14 – 14 – 12 - 10 , Tổng = 50

Túi 9 với các đồ vật có kích thước là 12 – 12 – 12 – 10 - 4, Tổng = 50 Túi 10 với các đồ vật có kích thước là 10 – 10 – 9 – 9 – 9- 3, Tổng = 50 Túi 11 với các đồ vật có kích thước là 8 – 8 – 8 – 8 – 8 – 8 - 2, Tổng = 50 Túi 12 với các đồ vật có kích thước là 8 – 8 – 8 – 7 – 7 – 7 - 5, Tổng = 50 Túi 13 với các đồ vật có kích thước là 7 – 7 – 7 – 7 – 7 – 7 - 7, Tổng = 49 Túi 14 với các đồ vật có kích thước là 7 – 7 – 7 – 7 – 7 – 7 - 7, Tổng = 49

Trang 13

Túi 15 với các đồ vật có kích thước là 6 – 6 – 6 – 6 – 5 – 5 – 5 – 5 - 5, Tổng

= 49

Túi 16 với các đồ vật có kích thước là 5 – 5 – 4 – 4 – 4 – 4 – 4 – 4 – 4 – 4 – 4 – 4, Tổng = 50

Túi 17 với các đồ vật có kích thước là 4 – 4 – 4 – 4 – 3 – 3 – 3 – 3 – 3 – 3 – 3 – 2 – 2 – 2 – 2 – 2 – 2 , Tổng = 49

Thời gian thực hiện thuật toán là không đáng kể

Cách 2 sắp xếp các đồ vật theo thứ tự tăng dần

Số lượng túi sử dụng là 19

Túi 1 với các đồ vật có kích thước là 2-2-2-2-2-2-2-2-3-3-3-3-3-3-3-3-3-4, Tổng = 47

Túi 2 với các đồ vật có kích thước là 4-4-4-4-4-4-4-4-4-4-4-4, Tổng = 48 Túi 3 với các đồ vật có kích thước là 4-4-5-5-5-5-5-5-5-5, Tổng = 48

Túi 4 với các đồ vật có kích thước là 5-6-6-6-6-6-7-7, Tổng = 49

Túi 5 với các đồ vật có kích thước là 7-7-7-7-7-7-7, Tổng = 49

Túi 6 với các đồ vật có kích thước là 7-7-7-7-7-7-7, Tổng = 49

Túi 7 với các đồ vật có kích thước là 7-8-8-8-8-8, Tổng = 47

Túi 8 với các đồ vật có kích thước là 8-8-8-8-9-9, Tổng = 50

Túi 9 với các đồ vật có kích thước là 9-10-10-10-10, Tổng = 49

Túi 10 với các đồ vật có kích thước là 10-12-12-12, Tổng = 46

Túi 11 với các đồ vật có kích thước là 12-12-14, Tổng = 38

Túi 12 với các đồ vật có kích thước là 14-14-14, Tổng = 42

Túi 13 với các đồ vật có kích thước là 14-17-17, Tổng = 48

Túi 14 với các đồ vật có kích thước là 19-22, Tổng = 41

Túi 15 với các đồ vật có kích thước là 22-23, Tổng = 45

Túi 16 với các đồ vật có kích thước là 25, Tổng = 25

Túi 17 với các đồ vật có kích thước là 38, Tổng = 38

Túi 17 với các đồ vật có kích thước là 39, Tổng = 39

Trang 14

Túi 17 với các đồ vật có kích thước là 47, Tổng = 47

Thời gian thực hiện thuật toán là không đáng kể

* File dữ liệu đầu vào: 1000.txt

Số lượng đồ vật = 1000

Tải trọng của túi = 500

Trọng lượng của các đồ vật lần lượt là:

Cách 1 sắp xếp các đồ vật theo thứ tự giảm dần

Số lượng túi sử dụng là 38

Thời gian thực hiện thuật toán là không đáng kể

Cách 2 sắp xếp các đồ vật theo thứ tự tăng dần

Số lượng túi sử dụng là 41

Thời gian thực hiện thuật toán là không đáng kể

3 Đánh giá – bình luận:

Với 2 thuật toán sắp xếp các đồ vật theo thứ tự tăng dần và giảm dần, dù thời gian thực hiện thuật toán là không đáng kể nhưng thuật toán sắp xếp đồ vật

theo thứ tự giảm dần có Tổng số lượng túi phải sửa dụng ít hơn so với thuật

toán sắp xếp tăng dần và sức chứa của mỗi túi cũng được sử dụng nhiều hơn, tránh lãng phí tài nguyên của túi

Trang 15

KẾT LUẬN

Bài toán cái túi được giải theo phương pháp tham lam bằng cách sắp xếp

dữ liệu đầu vào để đưa ra được một kết quả khả thi bằng giá trị tối ưu của bài toán Nhìn chung thuật giải trên đã giải quyết được tình huống của bài toán cơ bản đạt được các chỉ tiêu của thuật toán

Trang 16

TÀI LIỆU THAM KHẢO

1 Bài giảng của PGS, TS Đào Thanh Tĩnh

2 Thiết kế và đánh giá thuật toán, Trần Tuấn Minh

3 Knapsack problems (Algorithms and Computer Implementations), Silvano Martello and Paolo Toth

4 Một số trang seb

Ngày đăng: 23/05/2018, 14:44

TỪ KHÓA LIÊN QUAN

w