MỤC LỤC
I. Bài toán (Đề 24)
II. Phân tích bài toán
III. Xây dựng giải thuật
a. Tư tưởng giải thuật 5
b. Phương án thực hiện 5
IV. Đánh giá giải thuật xây dựng được
1
Hoµng Anh TuÊn -
CH21CNTT Vinh
BÀI TẬP LỚN MÔN HỌC
PHÂN TÍCH ĐÁNH GIÁ THUẬT TOÁN
I. Bài toán (Đề 24)
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 được nhận á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ệch của phương án này được định nghĩa bằng
max {|V(i) – p(
π
i
)|, i=1,2, ,n}
II. Phân tích bài toán
Không mất tính tổng quát ta giả sử:
− Các cỡ vai áo đôi một khác nhau
− Các cỡ vai của học sinh đôi một khác nhau.
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ọc
sinh theo chiều không giảm của kích cỡ vai. Sử dụng đồ thị với đường nét đậm
biểu thị giá trị kích cỡ vai áo, đường nét mảnh biểu thị kích cỡ vai của học sinh.
Ta có các trường hợp sau có thể xảy ra:
− Trường hợp 1:
Trường hợp 1
* Miv<Mip<Mav<Map
* |Mip-Miv| > |Map-Mav|
2
Hoµng Anh TuÊn -
CH21CNTT Vinh
1
n
Ma
v
Mi
p
Mi
v
Size
Ma
p
− Trường hợp 2:
Trường hợp 2
* |Miv<Mip<Mav<Map|
* |Mip-Miv| < |Map-Mav|
− Trường hợp 3:
Trường hợp 3
− Trường hợp 4:
Trường hợp 4
− Trường hợp 5: Là trường hợp suy biến của các trường hợp trên.
3
Hoµng Anh TuÊn -
CH21CNTT Vinh
1
n
Ma
p
Ma
v
Mi
p
Mi
v
Size
1
n
Ma
v
Ma
p
Mi
p
Mi
v
Size
1
n
Ma
p
Ma
v
Mi
v
Mi
p
Size
Trường hợp 5
Trong đó
− Ma
v
: Là giá trị lớn nhất của vai áo
− Mi
v:
Là giá trị nhỏ nhất của vai áo
− Ma
p
: Là kích thước lớn nhất của vai học sinh
− Mi
p
: Là kích thước nhỏ nhất của vai học sinh
Nhận xét rằng trong khi đổi vai trò của áo và học sinh ta sẽ được các
trường hợp tương tự.
Từ các tình huống trên ta dự đoán một phương án phân phát áo cho học
sinh như sau:
− Sắp xếp n học sinh theo thứ tự không giảm của kích thước vai, đánh
số từ 1 đến n theo thứ tự đó. (1)
− Sắp xếp n cái áo theo thứ tự không giảm của kích thước vai, đánh
số từ 1 đến n theo thứ tự đó. (2)
− 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ứ n nhận áo thứ n. (3)
Rõ ràng phương án phân phối áo như trên là thoả mãn yêu cầu đầu bài, với
độ lệc có thể là |Mip-Miv| hoặc |Map-Mav| tuỳ từng trường hợp. Như vậy chúng
ta có thể tìm ra một lời giải cho bài toán theo cách trên. Nhưng giải thuật này có
những hạn chế là:
− Một là: Việc sắp xếp học sinh và áo theo một trật tự nào đó là một
vấn đề khó khăn và tốn kém (O(n
2
)). Giả sử ta phải phân phối
khoảng 10000 chiếc áo cho 10000 học sinh. Thông thường để sắp
xếp học sinh và áo như trên chúng ta thường dùng phương pháp sắp
xếp chèn hoặc chọn. Khi đó, trường hợp xấu nhất ta phải dùng đến
4
Hoµng Anh TuÊn -
CH21CNTT Vinh
1
n
Ma
p
Ma
v
Mi
v
Mi
p
Size
10000(10000-1) phép duyệt qua các phần tử (Học sinh và áo) chưa
kể thao tác chèn và phân phối áo cho học sinh. 49995000 phép
duyệt. Giả sử mỗi phép duyệt mất ½ giây ta sẽ mất xấp xỉ 578 ngày
(Hơn một năm rưỡi) cho 1 người thực hiện việc này.
− Hai là: Một học sinh i không nhất thiết phải nhận được áo i mà có
thể nhận một cái áo j bất kỳ nào đó miễn là độ lệch |V(j)-P(i)|
không vượt quá độ lệch của phương án. Như vậy việc sắp xếp tất cả
các phần tử áo vào học sinh sẽ là không cần thiết trong đa số các
trường hợp của dữ liệu đầu vào.
− Ba là: Phải sắp xếp cả hai dãy.
Từ những nhận xét trên chúng ta nghĩ đến việc phân nhóm học sinh,
phân nhóm áo sao cho một học sinh bất kỳ trong nhóm học sinh có thể
nhận bất kỳ một cái áo nào trong nhóm áo tương ứng mà độ lệch không
vượt quá độ lệch của phương án. Trong đó các học sinh và áo trong các
nhóm này không nhất thiết phải được sắp xếp. Với tư tưởng này, bài
toán của chúng ta bây giờ sẽ trở thành:
− Xác định độ lệch nhỏ nhất của các phương án thoả mãn đầu bài.
Mà theo nhận xét trên, độ lệch này có thể là là |Mip-Miv| hoặc |
Map-Mav|. Tương đương với việc tìm phần tử lớn nhất và nhỏ nhất
cho mỗi dãy kích cỡ vai học sinh và dãy kích cỡ vai áo.
− Xác định giá trị kích thước vai học sinh (vai áo) làm tiêu trí để
phân nhóm.
III. Xây dựng giải thuật
a. Tư tưởng giải thuật
Tìm cách phân các cái áo và học sinh vào cùng một nhóm sao cho học một
học sinh bất kỳ trong nhóm có thể được phân phối bất kỳ một áo nào trong nhóm
mà độ lệch không vượt quá độ lệch của d phương án.
b. Phương án thực hiện
Ở đây tôi chỉ đi phân tích và xây dựng giải thuật cho trường hợp 1 khi Mi
v
Mi
p
Ma
v
Ma
p
. Các trường hợp khác tương tự.
B1: Tìm các giá trị Ma
v
, Ma
p
, Mi
v
, Mi
p
. Trong đó
5
Hoµng Anh TuÊn -
CH21CNTT Vinh
* Ma
v
- Là giá trị lớn nhất của vai áo
* Mi
v
- Là giá trị nhỏ nhất của vai áo
* Ma
p
- Là kích thước lớn nhất của vai học sinh
* Mi
p
- Là kích thước nhỏ nhất của vai học sinh
− Tìm Ma
v
, Ma
p
, Mi
v
, Mi
p
. Giải thuật tìm cỡ lớn nhất và bé nhất này
có độ phức tạp O(n). Thực tế có số phép duyệt là 2n.
− Tập các phương án thoả mãn đầu bài sẽ có độ lệch là d=Map-Mav.
− Ta sẽ đi tìm một phương án trong tập này.
B2: Phân nhóm.
− Nhận thấy rằng việc phân nhóm phải thoả mãn yêu cầu sau:
* Độ lệch giữa kích cỡ vai áo nhỏ nhất và kích cỡ vai học sinh
lớn nhất trong nhóm (thực chất là 2 nhóm áo và học sinh có thể
ghép đôi với nhau) không vượt quá d.
* Độ lệch giữa kích cỡ vai học sinh nhỏ nhất và kích cỡ vai áo
lớn nhất cũng không vượt quá d.
* Số lượng cái áo và học sinh trong cùng nhóm phải bằng nhau
− Nhóm thứ i sẽ chứa cái áo có kích cỡ bé Miv
i
(có thể được xác định
nhờ bước xác định đoạn trước), chứa học sinh có cỡ vai lớn nhất là
Map
i
= Miv
i
+d. Chứa học sinh có cỡ vai bé nhất Mip
i
(có thể được
xác định nhờ bước xác định đoạn trước). Vấn đề ở đây là xác định
kích cỡ lớn nhất Mav
i
của những cái áo trong đoạn này. Mav
i
có thể
được xác định bằng cách duyệt hết các cái áo chưa được phân nhóm
xem cỡ vai của cái áo nào gần với cỡ vai Map
i
nhất nhưng vẫn nhỏ
hơn Map
i
thì đó chính là Mav
i
6
Hoµng Anh TuÊn -
CH21CNTT Vinh
1
n
Ma
v
Mi
p
Mi
v
Size
Ma
p
d
d
d
i j
IV. Đánh giá giải thuật xây dựng được
Ta vẫn chỉ xét trường hợp 1 Mi
v
Mi
p
Ma
v
Ma
p
.
Với giải thuật xây dựng như trên ta có một số nhận xét sau
− Với d=Map-Mav
− Khi d=0 sẽ suy biến sang trường hợp 5 nhưng lúc này hai đường
trùng nhau, tức là với mỗi học sinh ta đều tìm được một cái áo có
cùng cỡ vai. (Vì ta đa giả thiết các cỡ vai áo đôi một khác nhau và
cỡ vai của học sinh đôi một khác nhau). Giải thuật này không có lời
giải. Ta phải thực hiện giải thuật như ở phần II hoặc giải thuật
tương đương với số phép duyệt là (n-1)n (O(n
2
)).
− Khi d=1. Giải thuật có lời giải nhưng với số phép duyệt là (n-1)n
(O(n
2
)).
− Khi d > 1. Giải thuật có lời giải với phép duyệt càng nhỏ khi d
càng lớn.
7
Hoµng Anh TuÊn -
CH21CNTT Vinh