Tải bản đầy đủ (.doc) (16 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (256.66 KB, 16 trang )

Phan Thùy Chi - Lớp HTTT3 K25B

Phân tích và đánh giá thuật toán

HỌC VIỆN KỸ THUẬT QUÂN SỰ
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 s 1, ...,
sn. 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

Giáo viên hướng dẫn:

PGS.TS. Đào Thanh Tĩnh

Học viên:

Phan Thùy Chi

Lớp:

HTTT3 - K25B

Hà Nội, 2014
0



Phan Thùy Chi - Lớp HTTT3 K25B

Phân tích và đánh giá thuật toán

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

1


Phan Thùy Chi - Lớp HTTT3 K25B


I.

Phân tích và đánh giá thuật toán

Đặ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.


2


Phan Thùy Chi - Lớp HTTT3 K25B

II.

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

A.

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

Phân tích và đánh giá thuật 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, ..., 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
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:

Đồ vật thứ
Kích thước

1
2

2
2

3
2


4
2

3

5
3

6
4

7
8

8
5


Phan Thùy Chi - Lớp HTTT3 K25B

Phân tích và đánh giá thuật toán
2
2

2

4(6)
2

8(7)

Túi 1
Sức chứa =10

2.

5(8)

3(5)

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

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

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 (tltui 1, 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.

4


Phan Thùy Chi - Lớp HTTT3 K25B

b)

Phân tích và đánh giá thuật toán

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

void sxtang(int s[],int n){
int i,j,tg;
for(i=0;ifor(j=i+1;jif(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
Đồ vật thứ
Sắp xếp các vật tăng
dần theo kích thước

1

2

3

4

5

6

7

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.
5


Phan Thùy Chi - Lớp HTTT3 K25B

Phân tích và đánh giá thuật toán

- Đồ 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:

3(3)
3(2)

4(5)

2(1)
4(4)

Túi 1
Sức chứa =8

5(6)

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

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

6

7(7)

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



Phan Thùy Chi - Lớp HTTT3 K25B

C.

Phân tích và đánh giá thuật toán

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.

-

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 (tltui 1, 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;ifor(j=i+1;jif(s[i]tg = s[i];
s[i] = s[j];
s[j] = tg;
7


Phan Thùy Chi - Lớp HTTT3 K25B

Phân tích và đánh giá thuật toán

}
}
}
d)


Ví dụ minh họa:

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

1

2

3

4

5

6

7

7

5

4

4

3


3

2

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

2(7)
4(3)
3(5)

3(6)

7(1)
Túi 1
Sức chứa=10

e)

5(2)

4(4)

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

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

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

- Với9 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).
95
0

7(1)

8


Phan Thùy Chi - Lớp HTTT3 K25B

Phân tích và đánh giá thuật toán

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ử:

9



Phan Thùy Chi - Lớp HTTT3 K25B

2.

Phân tích và đánh giá thuật toán

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
10


Phan Thùy Chi - Lớp HTTT3 K25B

Phân tích và đánh giá thuật toán

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
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
11


Phan Thùy Chi - Lớp HTTT3 K25B

Phân tích và đánh giá thuật toán

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
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ể

12


Phan Thùy Chi - Lớp HTTT3 K25B

Phân tích và đánh giá thuật toán


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
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
13



Phan Thùy Chi - Lớp HTTT3 K25B

Phân tích và đánh giá thuật toá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.

14


Phan Thùy Chi - Lớp HTTT3 K25B

Phân tích và đánh giá thuật toán

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.

15


Phan Thùy Chi - Lớp HTTT3 K25B

Phân tích và đánh giá thuật toán

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

16




×