2/2/2017
1
Phân tích Thiết kế
THUẬT TOÁN
Đại Dương
duonghd@mta.edu.vn
Web: fit.mta.edu.vn/~duonghd
Bài 4 - Thiết kế thuật toán
Chia để trị -
Divide&Conquer
PHÂN TÍCH VÀ THIẾT KẾ THUẬ TOÁN
NỘI DUNG
I. Giới thiệu
II. Lược đồ chung
III. Bài toán áp dụng
IV. Bài tập
2/2/2017
2
I. Giới thiệu
một phương pháp được áp dụng rộng rãi
Ý tưởng chung phân bài toán thành bài toán nhỏ hơn “độc lập”
với nhau.
Giải các bài toán con theo cùng 1 cách thức
Tổng hợplời các bài toán con để được kết quả bài toán ban đầu.
Tư tưởng chung của cách tiếp cận Chia để trị
II. Lược đồ chung
Chia:
Bằng cách nào đó chia tập hợp các đối tượng của bài toán thành bài toán con
“độc lập”
Tiếp tục chia các bài toán con cho đến khi thể giải trực tiếp (không cần,
hoặc không thể chia nhỏ nữa)
Trị:
Trên các bài toán con thực hiện cùng một cách thức: Chia nhỏ nếu cần hoặc
giải trực tiếp
Tổng hợp:
Khi mỗi bài toán con được giải, tổng hợp để kết quả bài toán ban đầu.
II. Lược đồ chung
2/2/2017
3
III. Bài toán áp dụng
1. Tìm kiếm nhị phân
The Manhattan phone
book has 1,000,000+
entries.
How is it possible to
locate a name by
examining just a tiny
, tiny
fraction of those entries?
III. Bài toán áp dụng
1. Tìm kiếm nhị phân
Key idea of
“phone book
search”: repeated
halving
To find the page containing Pat Reeds number…
while (Phone book is longer than 1 page)
Open to the middle page.
if “Reed” comes before the first entry,
Rip and throw away the 2nd half.
else
Rip and throw away the 1st half.
end
end
III. Bài toán áp dụng
1. Tìm kiếm nhị phân
What happens to the
phone book length?
Original: 3000 pages
After 1 rip: 1500 pages
After 2 rips: 750 pages
After 3 rips: 375 pages
After 4 rips: 188 pages
After 5 rips: 94 pages
:
After 12 rips: 1 page
2/2/2017
4
III. Bài toán áp dụng
1. Tìm kiếm nhị phân
Repeatedly halving the size of the “search space” is the
main idea behind the method of binary search.
An item in a sorted array of length ncan be located with
just log2 ncomparisons.
“Savings” is significant!
n log2(n)
100 7
1000 10
10000 13
III. Bài toán áp dụng
Insight Through Computing
12
15
35
33
42
45
51
73
62
75
86
98
Binary
search:
target x =
70
v
L:
Mid:
R:
1
6
12
1 2 3 4 5 6 7 8 9 10 11 12
v(Mid) <= x
So throw away the left
half…
III. Bài toán áp dụng
Insight Through Computing
Binary
search:
target x =
70
1 2 3 4 5 6 7 8 9 10 11 12
12
15
35
33
42
45
51
73
62
75
86
98
v
L:
Mid:
R:
6
9
12
x < v(Mid)
So throw away the
right half…
2/2/2017
5
III. Bài toán áp dụng
Insight Through Computing
Binary
search:
target x =
70
1 2 3 4 5 6 7 8 9 10 11 12
v
12
15
35
33
42
45
51
73
62
75
86
98
L:
Mid:
R:
6
7
9
v(Mid) <= x
So throw away the left
half…
III. Bài toán áp dụng
Insight Through Computing
Binary
search:
target x =
70
1 2 3 4 5 6 7 8 9 10 11 12
v
12
15
35
33
42
45
51
73
62
75
86
98
L:
Mid:
R:
7
8
9
v(Mid) <= x
So throw away the left
half…
III. Bài toán áp dụng
Insight Through Computing
Binary
search:
target x =
70
1 2 3 4 5 6 7 8 9 10 11 12
v
12
15
35
33
42
45
51
73
62
75
86
98
L:
Mid:
R:
8
8
9
Done because
R-L = 1