Tải bản đầy đủ (.pdf) (7 trang)

Phân tích thuật toán chia để trị

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 (267.02 KB, 7 trang )

14/04/2008
1
CHIA ĐỂ TRN
CHIA

ĐỂ

TRN
DIVIDE AND CONQUER
Phạm Thế Bảo
Khoa Toán – Tin học
Trường Đại học Khoa học Tự nhiên Tp.HCM
Nội dung
• Kỹ thuật quan trọng, đượcápdụng rộng rãi để
thiết
kế
các
giải
thuật

hiệu
quả
.
thiết
kế
các
giải
thuật

hiệu
quả


.
• Để giải quyếtmột bài toán kích thướcn,tachia
bài toán này thành mộtsố bài toán con có kích
thướcnhỏ hơn. Giải các bài toán con này rồitổng
hợpkếtquả lại để đượclờigiảibanđầu.
• Những bài toán con này cũng có thểđược chia
thành
các
bài
toán

kích
thước
nhỏ
hơn
nữa
để
thành
các
bài
toán

kích
thước
nhỏ
hơn
nữa
để
giải quyết. Quá trình này sẽđưa đếnnhững bài
toán mà lờigiảilàhiển nhiên hay dễ dàng thực

hiện. Ta gọinhững bài toán này là bài toán cơ sở.
Phạm Thế Bảo
14/04/2008
2
Mộtsố bài toán tiêu biểu
• MergeSort và QuickSort

• Nhân s

nguyên lớn
• Xếplịch thi đấuthể thao
• Bài toán con cân bằng
• …
Phạm Thế Bảo
MergeSort và QuickSort
• Chia tậpdữ liệulàm2tập con, quá trình chia
đế
khi
hỉ
ò
01
hầ
tử
Æ
dừ
(
bài

đế
n

khi
c
hỉ
c
ò
n
01
p
hầ
n
tử
Æ
dừ
ng
(
bài
t
o
á
n
cơ sở), tổng hợp2tập con bằng cách trộncó
thứ tự Æ tậpdữ liệu đượcsắpxếp.
• Giống MergeSort nhưng cầnphầntử cầm canh
đứng
giữa
để
chia
thành
2
tập

con
:
một
tập
sẽ
đứng
giữa
để
chia
thành
2
tập
con
:
một
tập
sẽ
có các phầntử có giá trị nhỏ hơn hay bằng, tập
còn lạisẽ có các phầntử có giá trị lớnhơn.
Phạm Thế Bảo
14/04/2008
3
Bài toán nhân hai số nguyên lớn
• Trong các ngôn ngữ lậptrình,kiểudữ liệusố
nguyên
đều

miền
giá
trị

hạn
chế
nguyên
đều

miền
giá
trị
hạn
chế
,
ví dụ: Pascal, C số nguyên từ -32768 đến 32767
• Khi gặp ứng dụng cầnsố nguyên lớnhơn
(hàng chục hay hàng trămchữ số), chúng ta
phải đixâydựng cấutrúcdữ liệusố nguyên
lớn
Các
thao
tác
đi
kèm

:
cộng
trừ
nhân
lớn
.
Các
thao

tác
đi
kèm

:
cộng
,
trừ
,
nhân
,…
• Chúng ta xem xét cách nhân 02 số nguyên lớn
có n chữ số sao cho hiệuquả.
Phạm Thế Bảo
• Nếuchúngtadùngcáchnhânthôngthường,
nghĩalàtừng chữ số nhân với nhau rồicộng lại
thì chi phí là O(n
2
).
• Á
p
dụ
n
g
k

t
h
uật
c

hi
a
để
t
r

.
T
a
c
hi
a
0
2
số
p
dụ g

tuật
ca
để
t ị
.
a
ca
0
số
nguyên X, Y thành các số nguyên lớncón/2
chữ số:X=A10
n/2

+B và Y=C10
n/2
+D
Ví dụ: A=1234 thì A=12x10
2
+34
Khi đóX.Y=AC10
n
+(AD+BC)10
n/2
+BD.
Giố
h
ê
l i
hi
iế
để
ó
bài
Giố
ng n

tr
ê
nta
l

i
c

hi
at
iế
ptục
để
c
ó
bài
toán cơ sở dễ dàng thựchiện.
Phạm Thế Bảo
14/04/2008
4
• Theo cách làm trên thì phảithựchiện4phép
nhân các số nguyên lớnn/2chữ số (AC, AD,
BC, BD), sau đódùng3phépcộng các số
nguyên lớnnchữ số và2phépnhanvới10
n



10
n/2
đ

t

ng hợp.
• Phép cộng số nguyên lớncần O(n), phép nhân
10
n

có thể thựchiện đơngiảnbằng cách thêm
nchữ số 0 Æ cũng cần O(n). GọiT(n)làthời
gian
nhân
hai
số
nguyên
lớn
ta

phương
gian
nhân
hai
số
nguyên
lớn
,
ta

phương
trình đệ quy:
Phạm Thế Bảo
• Giảiphương trình ta có T(n) =
Æ không cảithiện!
• Viếtlại:
XY AC10
n
+[(A
B)(D

C)+AC+BD]10
n/2
+BD
X
.
Y
=
AC10
n
+[(A
-
B)(D
-
C)+AC+BD]10
n/2
+BD
Công thức này chỉ cần tính 3 phép nhân của các
số nguyên lớnn/2 chữ số: AC,BD và (A-B)(D-
C), 6 phép cộng trừ và 2 phép nhân với10
n
.
L
ập
lu

ntươn
g
t

ta có

p
hươn
g
trình đ

q
u
y
:
ập

g

p g

qy
T(1)=1
T(n)=
Phạm Thế Bảo
Nghiệm?
14/04/2008
5
Nghiệmcủaphương trình T(n)=
Æ cảithiệnhơn.
Thuậtgiải thô:
longDigit multi2Integer(longDigit X, longDogit Y, int n){
if( 1) th t X*Y
if(
n=
1)


th
en re
t
urn
X*Y
;
A=left(X,n/2);
B=right(X,n/2);
C=left(Y,n/2);
D=right(Y,n/2);
m1=multi2Integer(A,C,n/2);
2 lti2I t (A
BD
C
/2)
m
2
=mu
lti2I
n
t
eger
(A
-
B
,
D
-
C

,n
/2)
;
m3=multi2Integer(B,D,n/2);
return (m1*10
n
+(m1+m2+m3)*10
n/2
+m3);
}
Phạm Thế Bảo
Xếplịch thi đấuthể thao
• Xét việcxếplịch thi đấu vòng tròn mộtlượt
cho
n
đội
đá
banh
Mỗi
đội
thi
đấu
với
nhau
cho
n
đội
đá
banh
.

Mỗi
đội
thi
đấu
với
nhau
,
mỗi độichỉđấunhiềunhấtmộttrậnmộtngày.
Làm sao ta xếplịch thi đấuchosố ngày ít nhất.
• Ta có tổng số trận đấucủatoàngiảilà
nếunchẵn thì ta có thể sắpn/2cặpthiđấu

à
Æ

í
hấ
(
1
)
à
Nế
trong m

tng
à
y
Æ
c


n
í
tn
hấ
t
(
n-
1
)
ng
à
y.
Nếu
nlẻ thìtacóthể sắp (n-1)/2 cặpthiđấutrong
một ngày Æ cầnítnhất n ngày
Phạm Thế Bảo
14/04/2008
6
• Lịch thi đấulàmộtbảng n dòng và n-1 cộtvàđược
đánh số tứ 1trởđi, dòng i đạidiệnchođộithứ ivàcộtj
đạidiện cho ngày thi đấu j, ô(i,j) ghi độiphải thi đấu
với đội i trong ngày j.
• Dùng chiếnlượcchiađể trị: để sắplịch cho n đội, ta
sắ
p
cho n
/
2 đ

i

,
để sắ
p
l

ch cho n
/
2 đ

itasắ
p
l

ch cho


p

,
p


p

n
/
4 đội, … Æ s

plịch thi đ


ucho2đội(
b
ài toán cơ
sở).
• Từ lịch thi đấucủa2đội, chúng ta sắplịch thi đấucho
4 độinhư sau:
– Lịch thi đấu cho 4 độilàmộtbảng 4 dòng 3 cột.
– Lịch thi đấu cho 2 đội 1 và 2 trong ngày 1 chính là lịch thi
đấu
của
2
đội
(
bài
toán

sở
)
Vậy
ô(
1
1
)=
2
ô(
2
1
)=
1
đấu

của
2
đội
(
bài
toán

sở
)
.
Vậy
ô(
1
,
1
)=
2
,
ô(
2
,
1
)=
1
.
Tương tự cũng có lịch thi đấu cho 2 đội 3 và 4 trong ngày
1: ô(3,1)=4 và ô(4,1)=3. Ta có thể thấy ô(3,1)=ô(1,1)+2 và
ô(4,1)=ô(2,1)+2.
– Lịch thi đấucủa4đội, ta lấygóctrênbêntráicủabảng lắp
vào cho góc dướibênphảivàlấy góc dưới bên trái lắpcho

góc trên bên phải.
Phạm Thế Bảo
Ngày 1
Đội1 2
Đội2 1
Ngày 1 Ngày 2 Ngày 3
Đội1 2
Đội2 1
Đội3 4
Đội4 3
Ngày 1 Ngày 2 Ngày 3
Đội1 24
Đội2 13
Đội3 42
Đội4 31
Phạm Thế Bảo
Ngày 1 Ngày 2 Ngày 3
Đội1 234
Đội2 143
Đội3 412
Đội4 321
14/04/2008
7
Ngày 1 Ngày 2 Ngày 3 Ngày 4 Ngày 5 Ngày 6 Ngày 7
Đội1 234
Đ

i
2
1

4
3
Ngày 1 Ngày 2 Ngày 3 Ngày 4 Ngày 5 Ngày 6 Ngày 7
Đội1 234 67 8
Đ

i
2
1
4
3
5
8
7
Ngày 1 Ngày 2 Ngày 3 Ngày 4 Ngày 5 Ngày 6 Ngày 7
Đội1 234567 8
Đ

i
2
1
4
3
6
5
8
7
Đ

i

2
1
4
3
Đội3 412
Đội4 321
Đội5 678
Đội6 587
Đội7 856
Đ

i
8
7
6
5
Đ

i
2
1
4
3
5
8
7
Đội3 412 85 6
Đội4 321 76 5
Đội5 678 23 4
Đội6 587 14 3

Đội7 856 41 2
Đ

i
8
7
6
5
3
2
1
Đ

i
2
1
4
3
6
5
8
7
Đội3 412785 6
Đội4 321876 5
Đội5 678123 4
Đội6 587214 3
Đội7 856341 2
Đ

i

8
7
6
5
4
3
2
1
Phạm Thế Bảo
Đ

i
8
7
6
5
Đ

i
8
7
6
5
3
2
1
Đ

i
8

7
6
5
4
3
2
1
Bài tập: cài đặtchương trình
Bài toán con cân bằng
• Vớikỹ thuậtchiađể trị,nếu bài toán ban đầu
đ
thà h
á
bài

ó
kí h
th ớ

đ
ược
thà
n
h
c
á
c
bài
t
o

á
nconc
ó

c
h
th
ư

cg

n
bằng nhau thì hiểusuấtsẽ cao hơn.
• Ví dụ:MergeSortchialàm2tậpconbằng
nhau (n/2 phầntử -cóthể sai khác 1) thì độ
phức
tạp

O
.
Đối
với
QuickSort
,
nếu
phức
tạp

O
.

Đối
với
QuickSort
,
nếu
phân hoạch không tốtthìđộ phứctạpvẫnlà
O(n
2
), trường hợpxấunhất.
Phạm Thế Bảo

×