SlideShare a Scribd company logo
1 of 36
Chương 4

Chiến lược biến thể-để-trị
(transform-and-conquer)

1
Nội dung







Chiến lược Biến thể-để-trị
Giải thuật Gauss để giải hệ phương trình
tuyến tính
Cấu trúc heap và heapsort
Giải thuật Horner để định trị đa thức
So trùng dòng ký tự bằng giải thuật RabinKarp

2
1.Biến thể để trị (transform-and-conquer)


Kỹ thuật biến thể-để-trị thường làm việc theo hai
bước.






Bước 1 là bước biến thể, thể hiện của bài toán được biến
đổi để chuyển sang một dạng dễ dẫn đến lời giải.
Bước 2 là bước tìm ra lời giải cho bài toán.

Có nhiều biến dạng của bước 1:






Biến thể để đưa đến một thể hiện đơn giản hơn của bài
toán (đơn giản hóa thể hiện -instance simplification)
Biến thể để đưa đến một biểu diễn khác của cùng bài toán
(biến đổi biểu diễn -representation change)
Biến thể để đưa đến một thể hiện của một bài toán khác
mà đã có tồn tại giải thuật (thu giảm bài toán - problem
reduction).
3
2. Giải thuật Gauss để giải hệ
phương trình tuyến tính


Cho hệ phương trình gồm n phương trình với n ẩn số.
a11x1 + a12x2 + … + a1nxn = b1
a21x1 + a22x2 + … + a2nxn = b2
;
;

an1x1 + an2x2 + … + annxn = bn





Để giải hệ phương trình trên, ta dùng giải thuật loại trừ
Gauss (Gauss elimination).
Ý tưởng chính của giải thuật : biến đổi hệ thống n phương
trình tuyến tính với n biến thành một hệ thống tương đương
(tức là có cùng lời giải như hệ phương trình ban đầu) với một
ma trận tam giác trên (một ma trận với các hệ số zero dưới
đường chéo chính)
Giải thuật Gauss thể hiện tinh thần của chiến lược biến thểđể-trị theo kiểu “đơn giản hóa thể hiện” (instance
simplification).
4
a11x1 + a12x2 + … + a1nxn = b1
a21x1 + a22x2 + … + a2nxn = b2
;
;

an1x1 + an2x2 + … + annxn = bn



a’11x1 + a’12x2 + … + a’1nxn = b’1
a’22x2 + … + a’2nxn = b’2
a’nnxn = b’n

Làm cách nào để ta có thể chuyển một hệ thống với
ma trận A bất kỳ thành một hệ thống tương đương
với ma trận tam giác trên A’?
Bằng một loạt các phép biến đổi cơ bản như sau:
-

-

Hoán vị hai phương trình trong hệ thống
Thay một phương trình bằng phương trình đó nhân với
một hệ số.
Thay một phương trình với tổng hay hiệu phương trình đó
với một phương trình khác được nhân một hệ số.
5
Thí dụ
2x1 – x2 + x3 =1
4x1 + x2 – x3 = 5
x1 + x2 + x3 = 0
2 -1 1 1
4 1 -2 5
1 1 1 0
2 -1 1 1
0 3 -3 3
0 3/2 ½ -1/2
2 -1 1
0 3 -3
0 0 2

1
3
-2

row 2 – (4/2) row 1
row 3 – (1/2) row 1

row 3 – (1/2) row 2

 x3 = (-2/2)=1; x2 = (3-(-3)x3/3 = 0;
x1 = (1-x3 – (-1)x2)/2 = 1

6
Giải thuật Gauss
GaussElimination(A[1..n,1..n],b[1..n])
for i := 1 to n do A[i,n+1] := b[i];
for i := 1 to n -1 do
for j := i + 1 to n do
for k:= i to n+1 do
A[j,k] := A[j,k]-A[i,k]*A[j,i]/A[i,i];
Lưu ý: Vector cột b cũng được gom vào thành cột thứ
n+1 của ma trận A.
Trở ngại: Khi A[i,i] = 0, giải thuật không làm việc được.
Và khi |A[i,i]| quá nhỏ, giải thuật sẽ bị sai số làm tròn
khi máy tính tính toán (round-off-error) gây ảnh
hưởng xấu, làm cho sự tính toán trở nên không
chính xác.
7
Giải thuật Gauss cải tiến


Để tránh trường hợp |A[i,i]| quá nhỏ nêu trên,
ta áp dụng kỹ thuật tìm phần tử chốt bán
phần (partial pivoting) được mô tả như sau:
“Tại lượt lặp thứ i của vòng lặp ngoài, ta cần
tìm hàng nào có hệ số ở cột thứ i mang giá trị
tuyệt đối lớn nhất và hoán đổi hàng này với
hàng i và dùng hệ số đó như là phần tử chốt
của lượt lặp thứ i”

8
Giải thuật Gauss cải tiến
BetterGaussElimination(A[1..n,1..n],b[1..n])
for i := 1 to n do A[i,n+1] := b[i];
for i := 1 to n -1 do
pivotrow := i;
for j := i+1 to n do
if |A[j,i]| > |A[pivotrow,i]| then pivotrow:= j;
for k:= i to n+1 do
swap(A[i,k], A[pivotrow,k]);
for j := i + 1 to n do
temp:= A[j,i]/A[i,i];
for k:= i to n+1 do
A[j,k] := A[j,k]-A[i,k]*temp;

9
Độ phức tạp của giải thuật Gauss
n-1

n

n-1

n

C(n) = i=1 j=i+1(n+1-i+1) = i=1 j=i+1(n+2-i)
n-1

n-1

=i=1 (n+2-i)(n-(i+1)+1) = i=1 (n+2-i)(n-i)
= (n+1)(n-1)+n(n-2)+..+3.1
n-1

n-1

n-1

=j=1(j+2)j = j=1 j2 + j=1 2j
= (n-1)n(2n-1)/6 + 2(n-1)n/2
= n(n-1)(2n+5)/6  n3/3 = O(n3)
Sau khi dùng giải thuật Gauss để đưa ma trận về dạng ma trận tam
giác trên, ta sẽ dùng phương pháp thay thế lùi (backward
subsitution) để tính ra giá trị của các ẩn.
10
3. Cấu trúc dữ liệu heap và heapsort
Hàng đợi có độ ưu tiên (a priority-queue) là cấu
trúc dữ liệu mà hỗ trợ ít nhất hai tác vụ:




thêm một phần tử mới vào cấu trúc
Tìm phần tử có độ ưu tiên lớn nhất
xóa bỏ phần tử có độ ưu tiên lớn nhất

Hàng đợi có độ ưu tiên khác với hàng đợi thông
thường ở điểm khi lấy phần tử ra khỏi hàng đợi
thì đó không phải là phần tử cũ nhất trong hàng
đợi mà là phần tử có độ ưu tiên lớn nhất trong
hàng đợi.

11
Thi công hàng đợi có độ ưu tiên
Hàng đợi có độ ưu tiên như đã mô tả là một ví dụ về kiểu
dữ liệu trừu tượng. Có hai cách để thi công hàng đợi có
độ ưu tiên:
1. Dùng mảng để thi công hàng đợi có độ ưu tiên (Cách
này thì đơn giản khi thêm vào một phần tử mới nhưng
khi xóa bỏ phần tử có độ ưu tiên lớn nhất ra khỏi hàng
đợi thì độ phức tạp sẽ cao.)
2. Dùng cấu trúc dữ liệu heap.

12
Cấu trúc dữ liệu heap
Cấu trúc dữ liệu mà có thể hỗ trợ cho các tác vụ làm việc với
hàng đợi có độ ưu tiên sẽ chứa các mẩu tin trong một mảng
sao cho:
mỗi khóa phải lớn hơn khóa ở hai vị trí khác trong mảng.
Tương tự mỗi khóa trong hai khóa này phải lớn hơn hai trị
khóa khác và cứ như thế..

Thứ tự này sẽ dễ thấy hơn khi ta diễn tả mảng như một cấu
trúc cây với những đường nối mỗi khóa xuống hai khóa nhỏ
hơn.
Các trị khóa trong cấu trúc cây thỏa điều kiện heap như sau:
Khóa tại mỗi nút cần phải lớn hơn (hay bằng) các khóa ở hai
con của nó (nếu có). Điều này hàm ý trị khóa lớn nhất ở nút
rễ.
13
Thí dụ: Heap dưới dạng cây nhị phân

k
a[k]

1 2 3 4 5 6 7 8 9 10 11 12
X T O G S M N A E R A I
14
Heap dưới dạng một mảng


Ta có thể diễn tả dạng cây của heap thành một mảng
bằng cách đặt nút rễ tại vị trí 1 của mảng, các con của
nó tại vị trí 2 và 3, các nút ở các mức kế tiếp ở các vị trí
4, 5, 6 và 7, v.v..

k
a[k]

1 2 3 4 5 6 7 8 9 10 11 12
X T O G S M N A E R A I

Từ một nút dễ dàng để đi tới nút cha và các nút con của nó.
 Cha một nút ở vị trí j sẽ là nút ở vị trí j div 2.
 Hai con của một nút ở vị trí j sẽ ở các vị trí 2j
và 2j+1.
15
Các lối đi trên heap


Một heap là một cây nhị phân, được diễn tả
như là một mảng trong đó mỗi nút thỏa mãn
điều kiện heap. Đặc biệt, phần tử có khóa lớn
nhất luôn ở vị trí thứ nhất của mảng.



Tất cả các giải thuật làm việc trên heap đi
dọc theo một lối đi nào đó từ nút rễ xuống
mức đáy (bottom) của heap.
 Trong một heap có N nút, tất cả các lối đi
(path) thường có lgN nút trên đó.
16
Các giải thuật trên Heap
Có hai tác vụ quan trọng làm việc trên heap: thêm vào
phần tử mới và xóa bỏ phần tử lớn nhất ra khỏi heap.
1. Tác vụ thêm vào (insert)
Tác vụ này sẽ làm tăng kích thước của heap lên thêm một
phần tử. N được tăng thêm 1.
Và phần tử mới được đặt vào tại vị trí a[N], nhưng lúc đó
điều kiện heap có thể sẽ bị vi phạm.
Nếu điều kiện heap bị vi phạm, nó sẽ được khắc phục bằng
cách hoán đổi phần tử mới với cha của nó. Điều này lại có
thể gây ra vi phạm điều kiện heap và nó sẽ được khắc phục
tiếp với cùng một cách tương tự.
17
Tác vụ thêm vào
procedure upheap(k:integer)
var v: integer;
begin
v :=a[k]; a[0]:= maxint;
while a[k div 2] <= v do
begin a[k]:= a[k div 2 ]; k:=k div 2 end;
a[k]:= v
end;
procedure insert(v:integer);
begin
N:= N+1; a[N] := v ; upheap(N)
end;
18
Thêm (P) vào heap

M

19
Tác vụ xóa bỏ phần tử lớn nhất


Tác vụ xóa sẽ làm giảm kích thước của heap một đơn vị,
tức nó làm giảm N một đơn vị.



Nhưng phần tử lớn nhất (tức a[1]) sẽ được xóa bỏ và
được thay thể bằng phần tử mà đã ở vị trí a[N]. Nếu trị
khóa tại nút rễ quá nhỏ, nó phải được di chuyển xuống
để thỏa mãn điều kiện heap.



Thủ tục downheap thực hiện việc di chuyển phần tử
đang ở nút rễ xuống bằng cách hoán đổi nút ở vị trí k với
nút lớn hơn trong hai nút con của nó, nếu cần và dừng
lại khi nút ở k lớn hơn hai nút con của nó.

20
Tác vụ xóa bỏ
procedure downheap(k: integer);
label 0 ;
var j, v : integer;
begin
v:= a[k];
while k<= N div 2 do
begin
j:= 2*k;
if j < N then if a[j] < a[j+1] then
j:=j+1;
if v >= a[j] then go to 0;
a[k]:= a[j]; k:= j;
end;
0: a[k]: =v
end;

function remove: integer;
begin
remove := a[1];
a[1] := a[N]; N := N-1;
downheap(1);
end;

21
Thí dụ về tác vụ xóa
Trước khi xóa

M

Sau khi xóa
22
Độ phức tạp của các tác vụ trên heap
Tính chất 3.1: Mọi tác vụ thêm vào, xóa bỏ, downheap,
upheap đòi hỏi ít hơn 2lgN so sánh khi thực hiện trên
một heap gồm N phần tử.
Tất cả những tác vụ này phải đi dọc theo một lối đi giữa
nút rễ cho đến cuối heap mà bao gồm ít hơn lgN phần
tử với một heap gồm N phần tử.
Thừa số 2 là do tác vụ downheap khi xóa bỏ mà cần hai
thao tác so sánh trong vòng lặp trong và các thao tác
khác chỉ đòi hỏi lgN lần so sánh.

23
Giải thuật heapsort
Ý tưởng: Giải thuật bao gồm 2 công tác (1) tạo một heap
chứa những phần tử cần sắp thứ tự và (2) lần lượt lấy
chúng ra khỏi heap theo một thứ tự.
M : kích thước của heap
N: số phần tử cần được sắp thứ tự.
N:=0;
for k:= 1 to M do
insert(a[k]); /* construct the heap */
for k:= M downto 1 do
a[k]:= remove; /*putting the element removed into the
array a */
24
Độ phức tạp của heap sort
Tính chất: Heapsort dùng ít hơn 3MlgM lần so sánh để sắp
thứ tự M phần tử.
Giới hạn trên này xuất phát từ giải thuật heapsort và tính
chất của hai tác vụ thêm vào/xóa bỏ trên heap.
Vòng for thứ nhất tốn MlgM lần so sánh.
Vòng for thứ hai tốn 2MlgM lần so sánh.
Tổng cọng:
MlgM + 2MlgM = 3MlgM.

Heapsort là một thí dụ điển hình của chiến lược Biến
thể-để-trị, dùng kỹ thuật “biến đổi biểu diễn”
(representation change)
25
4. Giải thuật Horner để định trị đa thức
Ta cần định trị đa thức sau
p(x) = anxn + an-1xn-1 + … + a1x + a0
(4.1)
tại một điểm x.
G.H Horner, một nhà toán học người Anh, cách đây 150
năm đã đưa ra một qui tắc đinh trị đa thức rất hữu hiệu.
Qui tắc Horner là một thí dụ tốt về chiến lược Biến thể-đểtrị dùng kỹ thuật “thay đổi biểu diễn” (representation
change).
Từ công thức 4.1 ta có thể thu được một công thức mới
bằng cách liên tiếp dùng x làm thừa số chung trong
những đa thức con còn lại với số mũ giảm dần.
p(x) = (…(anx + an-1)x+…)x + a0

(4.2)

26
Giải thuật Horner
Horner(P[0..n],x)
// Mảng P[0..n] chứa các hệ số của đa thức.
p := P[n];
for j := n -1 down to 0 do
p := p*x + P[i];
return p;
Tổng số phép nhân và tổng số phép cọng trong giải thuật
chỉ là n.
Trong khi đó nếu tính trực tiếp đa thức thì chỉ riêng số hạng
anxn đã cần đến n phép nhân.
 Giải thuật Horner là giải thuật tối ưu để định trị đa
thức.
27
5. So trùng dòng ký tự bằng giải thuật
Rabin-Karp







So trùng dòng ký tự: tìm tất cả sự xuất hiện của một
khuôn mẫu (pattern) trong một văn bản (text).
Văn bản là một mảng ký tự T[1..n] chiều dài n và một
khuôn mẫu là một mảng P[1..m] chiều dài m.
Các phần tử của P và T là những ký tự lấy từ một tập ký
tự (alphabet) .
Khuôn mẫu P xuất hiện với bước dịch chuyển(shift) s
trong văn bản T (tức là, P xuất hiện bắt đầu từ vị trí s+1
trong văn bản T) nếu 1  s  n – m và T[s+1..s+m] =
P[1..m].
Nếu P xuất hiện với bước dịch chuyển s trong T, thì ta
bảo s là một bước dịch chuyển hợp lệ (valid shift); ngược
lại ta bảo s là một bước dịch chuyển không hợp lệ
(invalid shift).

28


Bài toán so trùng dòng ký tự là bài toán tìm tất cả những
bước dịch chuyển hợp lệ mà một khuôn mẫu P xuất hiện
trong một văn bản T cho trước.

Văn bản
Khuôn mẫu

abcabaabcabac
abaabcabac

Bước dịch chuyển: s = 3
Giải thuật Rabin-Karp vận dụng những khái niện căn
bản trong lý thuyết số chẳng hạn sự tương đương của
hai số modulo một số thứ ba.

29
Giải thuật Rabin-Karp










Giả sử  = {0, 1, 2, …, 9}, tức mỗi ký tự là một ký số
thập phân. (Trong trường hợp tổng quát, mỗi ký tự
là một ký số của cơ hệ d, tức là d = | |.)
Ta có thể xem một dòng gồm k ký tự kế tiếp diễn tả
một số thập phân có chiều dài k. Dòng ký tự “31415”
tương ứng với trị số thập phân 31415.
Cho một khuôn mẫu P[1..m], gọi p là giá trị thập
phân tương ứng với khuôn mẫu.
Cho một văn bản T[1..n], gọi ts là trị số thập phân
của dòng con chiều dài m T[s+1...s+m], với s = 0, 1,
…, n-m.
ts = p nếu và chỉ nếu T[s+1..s+m] = P[1..m] và s là
một bước dịch chuyển hợp lệ nếu và chỉ nếu ts = p
30





Ta có thể tính p trong thời gian O(m) dùng qui
tắc Horner:
p = P[m] + 10*(P[m-1] + 10*(P[m-2] + …
+ 10*(P[2] + 10*P[1])…))
Giá trị t0 có thể được tính một cách tương tự từ
T[1..m] trong thời gian O(m).
Chú ý: ts+1 có thể được tính từ ts:
ts+1 = 10(ts – 10m-1T[s+1]) + T[s+m+1]
(5.1)

Thí dụ: Nếu m = 5 và ts = 31415, thì ta sẽ bỏ ký số bậc
cao T[s+1] = ‘3’ và đưa vào ký số bậc thấp là ‘2’ để đạt
giá trị:
ts+1 = 10(31415 – 10000.3) + 2 = 14152

31












Mỗi lần thực thi phương trình (5.1) sẽ cần tiến hành
một số lượng phép toán số học cố định.
Việc tính toán t1, t2,…, tn-m tỉ lệ với O(n-m).
Như vậy, p và t0, t1, …, tn-m có thể được tính trong chi
phí thời gian O(m) +O(m) + O(n-m)  O(n + m).
Nhưng p và ts có thể quá lớn đến nỗi máy tính không
thể biểu diễn được. Để khắc phục vấn đề này, ta tính
p và các ts modulo một đại lượng q thích hợp.
Đại lượng q thường được chọn là một số nguyên tố
sao cho 10q thì chứa được trong một từ của máy
tính.
Trong trường hợp tổng quát, với bộ mẫu tự gồm d
ký tự {0, 1, …, d-1}, ta chọn q sao cho dq chứa được
trong một từ của máy tính.
32










Và phương trình (5.1) trở thành:
ts+1 = d(ts – hT[s+1]) + T[s+m+1])mod q
(5.2)
với h = dm-1 (mod q)
Tuy nhiên, ts  p (mod q) không hàm ý ts = p.
Mặt khác, nếu ts  p (mod q) thì ta có thể khẳng định
ts  p, và như vậy bước dịch chuyển s là không hợp
lệ.
Chúng ta có thể dùng cách thử ts  p (mod q) để loại
bỏ những bước dịch chuyển không hợp lệ s.
Một bước dịch chuyển s mà thỏa ts  p (mod q) thì
phải được thử nghiệm thêm để xem s có thực sự là
bước dịch chuyển hợp lệ hay chỉ là một sự khớp
trùng giả (spurious hit) mà thôi .

Giải thuật Rabin-Karp thể hiện rõ nét tinh thần chiến
lược Biến thể-để-trị
33
Thí dụ:
|2| 3| 5| 9| 0| 2| 3| 1| 4| 1| 5| 2| 6| 7| 3| 9| 9| 2| 1|
 ______ 

| 7|
|2| 3| 5| 9| 0| 2| 3| 1| 4| 1| 5| 2| 6| 7| 3| 9| 9| 2| 1|
 _______ 
 ______ 
 ______ 



| 8| 9| 3|11| 0| 1| 7| 8| 4| 5|10|11| 7| 9|11|

valid
match
| 3| 1| 4| 1| 5| 2|
 ______ 
 
| 7| 8|

spurious
match

14152 = (31415 – 3  1000)  10 + 2 (mod 13)
= 8 (mod 13)
34
procedure RABIN-KARP-MATCHER(T, P, d, q);
/* T is the text, P is the pattern, d is the radix and q is the prime */
begin
Thời gian thực thi của RABINn: = |T|; m: = |P|;
KARP-MATCHER là O((n – m +
h: = dm-1 mod q;
1)m) trong trường hợp xấu nhất
p: = 0; t0: = 0;
vì khi đó giải thuật phải kiểm tra
for i: = 1 to m do
lại mọi bước dịch chuyển hợp
begin
lệ.
p: = (d*p + P[i])mod q;
t0: = (d*t0 + T[i])mod q
Trong nhiều ứng dụng, thường
end
chỉ có một vài bước dịch
for s: = 0 to n – m do
chuyển hợp lệ và do đó thời
begin
gian chạy thường là O(n+m)
if p = ts then /* there may be a hit */
cọng với thời gian đòi hỏi để
if P[1..m] = T[s+1..s+m] then
kiểm tra lại các sự khớp trùng
Print “Pattern occurs with shift “s;
giả.
if s < n – m then
ts+1: = (d(ts –T[s + 1]h) + T[s+m+1])mod q
end
end
35
Vài ghi nhận về chiến lược biến thể-để-trị


Cây AVL là cây tìm kiếm nhị phân mà luôn luôn
được làm cho cân bằng.







Sự cân bằng này được duy trì bằng 4 phép quay (rotation).
Tất cả các thao tác trên cây AVL đều có độ phức tạp
O(nlgn), loại trừ được trường hợp xấu nhất của cây tìm
kiếm nhị phân.

Cây AVL và giải thuật loại trừ Gauss là những thí
dụ của biến thể-để-trị theo kiểu “đơn giản hóa thể
hiện”.
Heapsort, giải thuật Horner và giải thuật RabinKarp là những thí dụ của biến thể-để-trị theo kiểu
“biến đổi cách biểu diễn”
36

More Related Content

What's hot

Ctdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xepCtdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xepNguyễn Ngọc Hà
 
Chuong 2 Tim Kiem N Sap Xep
Chuong 2   Tim Kiem N Sap XepChuong 2   Tim Kiem N Sap Xep
Chuong 2 Tim Kiem N Sap Xepquang
 
ThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNguest717ec2
 
Nmlt c07 mang1_chieu_in
Nmlt c07 mang1_chieu_inNmlt c07 mang1_chieu_in
Nmlt c07 mang1_chieu_inHuy Nguyễn
 
xử lý số tín hiệu -Chuong 3
xử lý số tín hiệu -Chuong 3xử lý số tín hiệu -Chuong 3
xử lý số tín hiệu -Chuong 3Ngai Hoang Van
 
Bài 4: ARRAY VÀ ARRAYLIST - Giáo trình FPT
Bài 4: ARRAY VÀ ARRAYLIST - Giáo trình FPTBài 4: ARRAY VÀ ARRAYLIST - Giáo trình FPT
Bài 4: ARRAY VÀ ARRAYLIST - Giáo trình FPTMasterCode.vn
 
Nmlt C07 Mang1 Chieu
Nmlt C07 Mang1 ChieuNmlt C07 Mang1 Chieu
Nmlt C07 Mang1 ChieuCuong
 
Nmlt C06 Ham
Nmlt C06 HamNmlt C06 Ham
Nmlt C06 HamCuong
 
Bai3 timkiemsapxep
Bai3 timkiemsapxepBai3 timkiemsapxep
Bai3 timkiemsapxepnhà tôi
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Hồ Lợi
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1Nguyễn Công Hoàng
 
Ctdl C02
Ctdl C02Ctdl C02
Ctdl C02giang
 

What's hot (16)

Ctdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xepCtdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xep
 
Thuat Toan
Thuat ToanThuat Toan
Thuat Toan
 
Chuong 2 Tim Kiem N Sap Xep
Chuong 2   Tim Kiem N Sap XepChuong 2   Tim Kiem N Sap Xep
Chuong 2 Tim Kiem N Sap Xep
 
Bai tap java
Bai tap javaBai tap java
Bai tap java
 
ThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáN
 
Nmlt c07 mang1_chieu_in
Nmlt c07 mang1_chieu_inNmlt c07 mang1_chieu_in
Nmlt c07 mang1_chieu_in
 
xử lý số tín hiệu -Chuong 3
xử lý số tín hiệu -Chuong 3xử lý số tín hiệu -Chuong 3
xử lý số tín hiệu -Chuong 3
 
Bài 4: ARRAY VÀ ARRAYLIST - Giáo trình FPT
Bài 4: ARRAY VÀ ARRAYLIST - Giáo trình FPTBài 4: ARRAY VÀ ARRAYLIST - Giáo trình FPT
Bài 4: ARRAY VÀ ARRAYLIST - Giáo trình FPT
 
Dreamtex
DreamtexDreamtex
Dreamtex
 
Nmlt C07 Mang1 Chieu
Nmlt C07 Mang1 ChieuNmlt C07 Mang1 Chieu
Nmlt C07 Mang1 Chieu
 
Nmlt C06 Ham
Nmlt C06 HamNmlt C06 Ham
Nmlt C06 Ham
 
Đề tài: Xây dựng bài thí nghiệm xử lý tín hiệu số trên Matlab
Đề tài: Xây dựng bài thí nghiệm xử lý tín hiệu số trên MatlabĐề tài: Xây dựng bài thí nghiệm xử lý tín hiệu số trên Matlab
Đề tài: Xây dựng bài thí nghiệm xử lý tín hiệu số trên Matlab
 
Bai3 timkiemsapxep
Bai3 timkiemsapxepBai3 timkiemsapxep
Bai3 timkiemsapxep
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
 
Ctdl C02
Ctdl C02Ctdl C02
Ctdl C02
 

Viewers also liked

Cây nhị phân tìm kiếm
Cây nhị phân tìm kiếmCây nhị phân tìm kiếm
Cây nhị phân tìm kiếmkikihoho
 
Happy birthday branni!!
Happy birthday branni!!Happy birthday branni!!
Happy birthday branni!!Aiza Castro
 
Happy birthday branni!!
Happy birthday branni!!Happy birthday branni!!
Happy birthday branni!!Aiza Castro
 
Chap2 new (tran dai's conflicted copy 2013 04-02)
Chap2 new (tran dai's conflicted copy 2013 04-02)Chap2 new (tran dai's conflicted copy 2013 04-02)
Chap2 new (tran dai's conflicted copy 2013 04-02)Loc Tran
 
Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Loc Tran
 
Appendix b 2
Appendix b 2Appendix b 2
Appendix b 2Loc Tran
 
Appendix a 2
Appendix a 2Appendix a 2
Appendix a 2Loc Tran
 
Chap8 part ii
Chap8 part iiChap8 part ii
Chap8 part iiLoc Tran
 
đạI học quốc gia thành phố hồ chí minh
đạI học quốc gia thành phố hồ chí minhđạI học quốc gia thành phố hồ chí minh
đạI học quốc gia thành phố hồ chí minhLoc Tran
 

Viewers also liked (20)

Chap5 new
Chap5 newChap5 new
Chap5 new
 
Cây nhị phân tìm kiếm
Cây nhị phân tìm kiếmCây nhị phân tìm kiếm
Cây nhị phân tìm kiếm
 
Chap3 new
Chap3 newChap3 new
Chap3 new
 
Happy birthday branni!!
Happy birthday branni!!Happy birthday branni!!
Happy birthday branni!!
 
Chap2 new
Chap2 newChap2 new
Chap2 new
 
Chap6 new
Chap6 newChap6 new
Chap6 new
 
Happy birthday branni!!
Happy birthday branni!!Happy birthday branni!!
Happy birthday branni!!
 
Chap2 new (tran dai's conflicted copy 2013 04-02)
Chap2 new (tran dai's conflicted copy 2013 04-02)Chap2 new (tran dai's conflicted copy 2013 04-02)
Chap2 new (tran dai's conflicted copy 2013 04-02)
 
Chap8 new
Chap8 newChap8 new
Chap8 new
 
Chap4 new
Chap4 newChap4 new
Chap4 new
 
Yashwanth
YashwanthYashwanth
Yashwanth
 
Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)
 
Chap7 new
Chap7 newChap7 new
Chap7 new
 
Appendix b 2
Appendix b 2Appendix b 2
Appendix b 2
 
Appendix a 2
Appendix a 2Appendix a 2
Appendix a 2
 
Insurance
Insurance Insurance
Insurance
 
Chap8 part ii
Chap8 part iiChap8 part ii
Chap8 part ii
 
đạI học quốc gia thành phố hồ chí minh
đạI học quốc gia thành phố hồ chí minhđạI học quốc gia thành phố hồ chí minh
đạI học quốc gia thành phố hồ chí minh
 
Quality
QualityQuality
Quality
 
International entrepreneurship
International entrepreneurshipInternational entrepreneurship
International entrepreneurship
 

Similar to Chap4 new (tran dai's conflicted copy 2013 04-02)

Chuong 2 phan tich cac thuat toan sap xep va tim kiem
Chuong 2  phan tich cac thuat toan sap xep va tim kiemChuong 2  phan tich cac thuat toan sap xep va tim kiem
Chuong 2 phan tich cac thuat toan sap xep va tim kiemgaconne1985
 
Huong dan 8 o so
Huong dan 8 o soHuong dan 8 o so
Huong dan 8 o soshjdunglv
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfHngTrn365275
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfnguyenkaka2
 
Buổi 5_Excel_Hàm Toán học.pptx
Buổi 5_Excel_Hàm Toán học.pptxBuổi 5_Excel_Hàm Toán học.pptx
Buổi 5_Excel_Hàm Toán học.pptxCngNguynHng10
 
05 mat102-bai 2-v1.0
05 mat102-bai 2-v1.005 mat102-bai 2-v1.0
05 mat102-bai 2-v1.0Yen Dang
 
Tuan1_GioiThieu.pdf
Tuan1_GioiThieu.pdfTuan1_GioiThieu.pdf
Tuan1_GioiThieu.pdfNguynVnTun74
 
304686218-Chia-đoi-tập-vdgdhợp-2.docx
304686218-Chia-đoi-tập-vdgdhợp-2.docx304686218-Chia-đoi-tập-vdgdhợp-2.docx
304686218-Chia-đoi-tập-vdgdhợp-2.docxNguynAnThch
 
Thuchanh Ktdk-matlab
Thuchanh Ktdk-matlabThuchanh Ktdk-matlab
Thuchanh Ktdk-matlabmark
 
Nhom lenh co ban
Nhom lenh co banNhom lenh co ban
Nhom lenh co banVũ Tích
 
Bài tập thực hành số 1
Bài tập thực hành số 1Bài tập thực hành số 1
Bài tập thực hành số 1Tran Trung Dung
 
Bai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tuBai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tuBrand Xanh
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5Nguyễn Công Hoàng
 
toán nhập môn đại số tuyến tính ( toán 3- toán cao cấp)
toán nhập môn đại số tuyến tính ( toán 3- toán cao cấp)toán nhập môn đại số tuyến tính ( toán 3- toán cao cấp)
toán nhập môn đại số tuyến tính ( toán 3- toán cao cấp)KhnhTrnh10
 

Similar to Chap4 new (tran dai's conflicted copy 2013 04-02) (20)

Chuong 2 phan tich cac thuat toan sap xep va tim kiem
Chuong 2  phan tich cac thuat toan sap xep va tim kiemChuong 2  phan tich cac thuat toan sap xep va tim kiem
Chuong 2 phan tich cac thuat toan sap xep va tim kiem
 
Thuat Toan 2
Thuat Toan 2Thuat Toan 2
Thuat Toan 2
 
Gt de quy_2
Gt de quy_2Gt de quy_2
Gt de quy_2
 
Gt de quy
Gt de quyGt de quy
Gt de quy
 
Huong dan 8 o so
Huong dan 8 o soHuong dan 8 o so
Huong dan 8 o so
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdf
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdf
 
Buổi 5_Excel_Hàm Toán học.pptx
Buổi 5_Excel_Hàm Toán học.pptxBuổi 5_Excel_Hàm Toán học.pptx
Buổi 5_Excel_Hàm Toán học.pptx
 
Huong danthuchanhmang
Huong danthuchanhmangHuong danthuchanhmang
Huong danthuchanhmang
 
Saxep
SaxepSaxep
Saxep
 
05 mat102-bai 2-v1.0
05 mat102-bai 2-v1.005 mat102-bai 2-v1.0
05 mat102-bai 2-v1.0
 
Tuan1_GioiThieu.pdf
Tuan1_GioiThieu.pdfTuan1_GioiThieu.pdf
Tuan1_GioiThieu.pdf
 
304686218-Chia-đoi-tập-vdgdhợp-2.docx
304686218-Chia-đoi-tập-vdgdhợp-2.docx304686218-Chia-đoi-tập-vdgdhợp-2.docx
304686218-Chia-đoi-tập-vdgdhợp-2.docx
 
Thuchanh Ktdk-matlab
Thuchanh Ktdk-matlabThuchanh Ktdk-matlab
Thuchanh Ktdk-matlab
 
Nhom lenh co ban
Nhom lenh co banNhom lenh co ban
Nhom lenh co ban
 
Bài tập thực hành số 1
Bài tập thực hành số 1Bài tập thực hành số 1
Bài tập thực hành số 1
 
Bai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tuBai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tu
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
 
Chuong 3 he pttt- final
Chuong 3   he pttt- finalChuong 3   he pttt- final
Chuong 3 he pttt- final
 
toán nhập môn đại số tuyến tính ( toán 3- toán cao cấp)
toán nhập môn đại số tuyến tính ( toán 3- toán cao cấp)toán nhập môn đại số tuyến tính ( toán 3- toán cao cấp)
toán nhập môn đại số tuyến tính ( toán 3- toán cao cấp)
 

Recently uploaded

TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...Nguyen Thanh Tu Collection
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfhoangtuansinh1
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfTrnHoa46
 
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdfBỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdfNguyen Thanh Tu Collection
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................TrnHoa46
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...Nguyen Thanh Tu Collection
 
CD21 Exercise 2.1 KEY.docx tieng anh cho
CD21 Exercise 2.1 KEY.docx tieng anh choCD21 Exercise 2.1 KEY.docx tieng anh cho
CD21 Exercise 2.1 KEY.docx tieng anh chonamc250
 
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIĐiện Lạnh Bách Khoa Hà Nội
 
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptxNhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptxhoangvubaongoc112011
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢIPHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢImyvh40253
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIĐiện Lạnh Bách Khoa Hà Nội
 
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...Nguyen Thanh Tu Collection
 
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...Nguyen Thanh Tu Collection
 
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docxTHAO316680
 
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảo
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảoKiểm tra cuối học kì 1 sinh học 12 đề tham khảo
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảohoanhv296
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoámyvh40253
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdfTrnHoa46
 

Recently uploaded (20)

TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
 
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdfBỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
 
CD21 Exercise 2.1 KEY.docx tieng anh cho
CD21 Exercise 2.1 KEY.docx tieng anh choCD21 Exercise 2.1 KEY.docx tieng anh cho
CD21 Exercise 2.1 KEY.docx tieng anh cho
 
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
 
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
 
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptxNhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢIPHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
 
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
 
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
 
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
 
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảo
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảoKiểm tra cuối học kì 1 sinh học 12 đề tham khảo
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảo
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdf
 

Chap4 new (tran dai's conflicted copy 2013 04-02)

  • 1. Chương 4 Chiến lược biến thể-để-trị (transform-and-conquer) 1
  • 2. Nội dung      Chiến lược Biến thể-để-trị Giải thuật Gauss để giải hệ phương trình tuyến tính Cấu trúc heap và heapsort Giải thuật Horner để định trị đa thức So trùng dòng ký tự bằng giải thuật RabinKarp 2
  • 3. 1.Biến thể để trị (transform-and-conquer)  Kỹ thuật biến thể-để-trị thường làm việc theo hai bước.    Bước 1 là bước biến thể, thể hiện của bài toán được biến đổi để chuyển sang một dạng dễ dẫn đến lời giải. Bước 2 là bước tìm ra lời giải cho bài toán. Có nhiều biến dạng của bước 1:    Biến thể để đưa đến một thể hiện đơn giản hơn của bài toán (đơn giản hóa thể hiện -instance simplification) Biến thể để đưa đến một biểu diễn khác của cùng bài toán (biến đổi biểu diễn -representation change) Biến thể để đưa đến một thể hiện của một bài toán khác mà đã có tồn tại giải thuật (thu giảm bài toán - problem reduction). 3
  • 4. 2. Giải thuật Gauss để giải hệ phương trình tuyến tính  Cho hệ phương trình gồm n phương trình với n ẩn số. a11x1 + a12x2 + … + a1nxn = b1 a21x1 + a22x2 + … + a2nxn = b2 ; ; an1x1 + an2x2 + … + annxn = bn    Để giải hệ phương trình trên, ta dùng giải thuật loại trừ Gauss (Gauss elimination). Ý tưởng chính của giải thuật : biến đổi hệ thống n phương trình tuyến tính với n biến thành một hệ thống tương đương (tức là có cùng lời giải như hệ phương trình ban đầu) với một ma trận tam giác trên (một ma trận với các hệ số zero dưới đường chéo chính) Giải thuật Gauss thể hiện tinh thần của chiến lược biến thểđể-trị theo kiểu “đơn giản hóa thể hiện” (instance simplification). 4
  • 5. a11x1 + a12x2 + … + a1nxn = b1 a21x1 + a22x2 + … + a2nxn = b2 ; ; an1x1 + an2x2 + … + annxn = bn  a’11x1 + a’12x2 + … + a’1nxn = b’1 a’22x2 + … + a’2nxn = b’2 a’nnxn = b’n Làm cách nào để ta có thể chuyển một hệ thống với ma trận A bất kỳ thành một hệ thống tương đương với ma trận tam giác trên A’? Bằng một loạt các phép biến đổi cơ bản như sau: - - Hoán vị hai phương trình trong hệ thống Thay một phương trình bằng phương trình đó nhân với một hệ số. Thay một phương trình với tổng hay hiệu phương trình đó với một phương trình khác được nhân một hệ số. 5
  • 6. Thí dụ 2x1 – x2 + x3 =1 4x1 + x2 – x3 = 5 x1 + x2 + x3 = 0 2 -1 1 1 4 1 -2 5 1 1 1 0 2 -1 1 1 0 3 -3 3 0 3/2 ½ -1/2 2 -1 1 0 3 -3 0 0 2 1 3 -2 row 2 – (4/2) row 1 row 3 – (1/2) row 1 row 3 – (1/2) row 2  x3 = (-2/2)=1; x2 = (3-(-3)x3/3 = 0; x1 = (1-x3 – (-1)x2)/2 = 1 6
  • 7. Giải thuật Gauss GaussElimination(A[1..n,1..n],b[1..n]) for i := 1 to n do A[i,n+1] := b[i]; for i := 1 to n -1 do for j := i + 1 to n do for k:= i to n+1 do A[j,k] := A[j,k]-A[i,k]*A[j,i]/A[i,i]; Lưu ý: Vector cột b cũng được gom vào thành cột thứ n+1 của ma trận A. Trở ngại: Khi A[i,i] = 0, giải thuật không làm việc được. Và khi |A[i,i]| quá nhỏ, giải thuật sẽ bị sai số làm tròn khi máy tính tính toán (round-off-error) gây ảnh hưởng xấu, làm cho sự tính toán trở nên không chính xác. 7
  • 8. Giải thuật Gauss cải tiến  Để tránh trường hợp |A[i,i]| quá nhỏ nêu trên, ta áp dụng kỹ thuật tìm phần tử chốt bán phần (partial pivoting) được mô tả như sau: “Tại lượt lặp thứ i của vòng lặp ngoài, ta cần tìm hàng nào có hệ số ở cột thứ i mang giá trị tuyệt đối lớn nhất và hoán đổi hàng này với hàng i và dùng hệ số đó như là phần tử chốt của lượt lặp thứ i” 8
  • 9. Giải thuật Gauss cải tiến BetterGaussElimination(A[1..n,1..n],b[1..n]) for i := 1 to n do A[i,n+1] := b[i]; for i := 1 to n -1 do pivotrow := i; for j := i+1 to n do if |A[j,i]| > |A[pivotrow,i]| then pivotrow:= j; for k:= i to n+1 do swap(A[i,k], A[pivotrow,k]); for j := i + 1 to n do temp:= A[j,i]/A[i,i]; for k:= i to n+1 do A[j,k] := A[j,k]-A[i,k]*temp; 9
  • 10. Độ phức tạp của giải thuật Gauss n-1 n n-1 n C(n) = i=1 j=i+1(n+1-i+1) = i=1 j=i+1(n+2-i) n-1 n-1 =i=1 (n+2-i)(n-(i+1)+1) = i=1 (n+2-i)(n-i) = (n+1)(n-1)+n(n-2)+..+3.1 n-1 n-1 n-1 =j=1(j+2)j = j=1 j2 + j=1 2j = (n-1)n(2n-1)/6 + 2(n-1)n/2 = n(n-1)(2n+5)/6  n3/3 = O(n3) Sau khi dùng giải thuật Gauss để đưa ma trận về dạng ma trận tam giác trên, ta sẽ dùng phương pháp thay thế lùi (backward subsitution) để tính ra giá trị của các ẩn. 10
  • 11. 3. Cấu trúc dữ liệu heap và heapsort Hàng đợi có độ ưu tiên (a priority-queue) là cấu trúc dữ liệu mà hỗ trợ ít nhất hai tác vụ:    thêm một phần tử mới vào cấu trúc Tìm phần tử có độ ưu tiên lớn nhất xóa bỏ phần tử có độ ưu tiên lớn nhất Hàng đợi có độ ưu tiên khác với hàng đợi thông thường ở điểm khi lấy phần tử ra khỏi hàng đợi thì đó không phải là phần tử cũ nhất trong hàng đợi mà là phần tử có độ ưu tiên lớn nhất trong hàng đợi. 11
  • 12. Thi công hàng đợi có độ ưu tiên Hàng đợi có độ ưu tiên như đã mô tả là một ví dụ về kiểu dữ liệu trừu tượng. Có hai cách để thi công hàng đợi có độ ưu tiên: 1. Dùng mảng để thi công hàng đợi có độ ưu tiên (Cách này thì đơn giản khi thêm vào một phần tử mới nhưng khi xóa bỏ phần tử có độ ưu tiên lớn nhất ra khỏi hàng đợi thì độ phức tạp sẽ cao.) 2. Dùng cấu trúc dữ liệu heap. 12
  • 13. Cấu trúc dữ liệu heap Cấu trúc dữ liệu mà có thể hỗ trợ cho các tác vụ làm việc với hàng đợi có độ ưu tiên sẽ chứa các mẩu tin trong một mảng sao cho: mỗi khóa phải lớn hơn khóa ở hai vị trí khác trong mảng. Tương tự mỗi khóa trong hai khóa này phải lớn hơn hai trị khóa khác và cứ như thế.. Thứ tự này sẽ dễ thấy hơn khi ta diễn tả mảng như một cấu trúc cây với những đường nối mỗi khóa xuống hai khóa nhỏ hơn. Các trị khóa trong cấu trúc cây thỏa điều kiện heap như sau: Khóa tại mỗi nút cần phải lớn hơn (hay bằng) các khóa ở hai con của nó (nếu có). Điều này hàm ý trị khóa lớn nhất ở nút rễ. 13
  • 14. Thí dụ: Heap dưới dạng cây nhị phân k a[k] 1 2 3 4 5 6 7 8 9 10 11 12 X T O G S M N A E R A I 14
  • 15. Heap dưới dạng một mảng  Ta có thể diễn tả dạng cây của heap thành một mảng bằng cách đặt nút rễ tại vị trí 1 của mảng, các con của nó tại vị trí 2 và 3, các nút ở các mức kế tiếp ở các vị trí 4, 5, 6 và 7, v.v.. k a[k] 1 2 3 4 5 6 7 8 9 10 11 12 X T O G S M N A E R A I Từ một nút dễ dàng để đi tới nút cha và các nút con của nó.  Cha một nút ở vị trí j sẽ là nút ở vị trí j div 2.  Hai con của một nút ở vị trí j sẽ ở các vị trí 2j và 2j+1. 15
  • 16. Các lối đi trên heap  Một heap là một cây nhị phân, được diễn tả như là một mảng trong đó mỗi nút thỏa mãn điều kiện heap. Đặc biệt, phần tử có khóa lớn nhất luôn ở vị trí thứ nhất của mảng.  Tất cả các giải thuật làm việc trên heap đi dọc theo một lối đi nào đó từ nút rễ xuống mức đáy (bottom) của heap.  Trong một heap có N nút, tất cả các lối đi (path) thường có lgN nút trên đó. 16
  • 17. Các giải thuật trên Heap Có hai tác vụ quan trọng làm việc trên heap: thêm vào phần tử mới và xóa bỏ phần tử lớn nhất ra khỏi heap. 1. Tác vụ thêm vào (insert) Tác vụ này sẽ làm tăng kích thước của heap lên thêm một phần tử. N được tăng thêm 1. Và phần tử mới được đặt vào tại vị trí a[N], nhưng lúc đó điều kiện heap có thể sẽ bị vi phạm. Nếu điều kiện heap bị vi phạm, nó sẽ được khắc phục bằng cách hoán đổi phần tử mới với cha của nó. Điều này lại có thể gây ra vi phạm điều kiện heap và nó sẽ được khắc phục tiếp với cùng một cách tương tự. 17
  • 18. Tác vụ thêm vào procedure upheap(k:integer) var v: integer; begin v :=a[k]; a[0]:= maxint; while a[k div 2] <= v do begin a[k]:= a[k div 2 ]; k:=k div 2 end; a[k]:= v end; procedure insert(v:integer); begin N:= N+1; a[N] := v ; upheap(N) end; 18
  • 19. Thêm (P) vào heap M 19
  • 20. Tác vụ xóa bỏ phần tử lớn nhất  Tác vụ xóa sẽ làm giảm kích thước của heap một đơn vị, tức nó làm giảm N một đơn vị.  Nhưng phần tử lớn nhất (tức a[1]) sẽ được xóa bỏ và được thay thể bằng phần tử mà đã ở vị trí a[N]. Nếu trị khóa tại nút rễ quá nhỏ, nó phải được di chuyển xuống để thỏa mãn điều kiện heap.  Thủ tục downheap thực hiện việc di chuyển phần tử đang ở nút rễ xuống bằng cách hoán đổi nút ở vị trí k với nút lớn hơn trong hai nút con của nó, nếu cần và dừng lại khi nút ở k lớn hơn hai nút con của nó. 20
  • 21. Tác vụ xóa bỏ procedure downheap(k: integer); label 0 ; var j, v : integer; begin v:= a[k]; while k<= N div 2 do begin j:= 2*k; if j < N then if a[j] < a[j+1] then j:=j+1; if v >= a[j] then go to 0; a[k]:= a[j]; k:= j; end; 0: a[k]: =v end; function remove: integer; begin remove := a[1]; a[1] := a[N]; N := N-1; downheap(1); end; 21
  • 22. Thí dụ về tác vụ xóa Trước khi xóa M Sau khi xóa 22
  • 23. Độ phức tạp của các tác vụ trên heap Tính chất 3.1: Mọi tác vụ thêm vào, xóa bỏ, downheap, upheap đòi hỏi ít hơn 2lgN so sánh khi thực hiện trên một heap gồm N phần tử. Tất cả những tác vụ này phải đi dọc theo một lối đi giữa nút rễ cho đến cuối heap mà bao gồm ít hơn lgN phần tử với một heap gồm N phần tử. Thừa số 2 là do tác vụ downheap khi xóa bỏ mà cần hai thao tác so sánh trong vòng lặp trong và các thao tác khác chỉ đòi hỏi lgN lần so sánh. 23
  • 24. Giải thuật heapsort Ý tưởng: Giải thuật bao gồm 2 công tác (1) tạo một heap chứa những phần tử cần sắp thứ tự và (2) lần lượt lấy chúng ra khỏi heap theo một thứ tự. M : kích thước của heap N: số phần tử cần được sắp thứ tự. N:=0; for k:= 1 to M do insert(a[k]); /* construct the heap */ for k:= M downto 1 do a[k]:= remove; /*putting the element removed into the array a */ 24
  • 25. Độ phức tạp của heap sort Tính chất: Heapsort dùng ít hơn 3MlgM lần so sánh để sắp thứ tự M phần tử. Giới hạn trên này xuất phát từ giải thuật heapsort và tính chất của hai tác vụ thêm vào/xóa bỏ trên heap. Vòng for thứ nhất tốn MlgM lần so sánh. Vòng for thứ hai tốn 2MlgM lần so sánh. Tổng cọng: MlgM + 2MlgM = 3MlgM. Heapsort là một thí dụ điển hình của chiến lược Biến thể-để-trị, dùng kỹ thuật “biến đổi biểu diễn” (representation change) 25
  • 26. 4. Giải thuật Horner để định trị đa thức Ta cần định trị đa thức sau p(x) = anxn + an-1xn-1 + … + a1x + a0 (4.1) tại một điểm x. G.H Horner, một nhà toán học người Anh, cách đây 150 năm đã đưa ra một qui tắc đinh trị đa thức rất hữu hiệu. Qui tắc Horner là một thí dụ tốt về chiến lược Biến thể-đểtrị dùng kỹ thuật “thay đổi biểu diễn” (representation change). Từ công thức 4.1 ta có thể thu được một công thức mới bằng cách liên tiếp dùng x làm thừa số chung trong những đa thức con còn lại với số mũ giảm dần. p(x) = (…(anx + an-1)x+…)x + a0 (4.2) 26
  • 27. Giải thuật Horner Horner(P[0..n],x) // Mảng P[0..n] chứa các hệ số của đa thức. p := P[n]; for j := n -1 down to 0 do p := p*x + P[i]; return p; Tổng số phép nhân và tổng số phép cọng trong giải thuật chỉ là n. Trong khi đó nếu tính trực tiếp đa thức thì chỉ riêng số hạng anxn đã cần đến n phép nhân.  Giải thuật Horner là giải thuật tối ưu để định trị đa thức. 27
  • 28. 5. So trùng dòng ký tự bằng giải thuật Rabin-Karp      So trùng dòng ký tự: tìm tất cả sự xuất hiện của một khuôn mẫu (pattern) trong một văn bản (text). Văn bản là một mảng ký tự T[1..n] chiều dài n và một khuôn mẫu là một mảng P[1..m] chiều dài m. Các phần tử của P và T là những ký tự lấy từ một tập ký tự (alphabet) . Khuôn mẫu P xuất hiện với bước dịch chuyển(shift) s trong văn bản T (tức là, P xuất hiện bắt đầu từ vị trí s+1 trong văn bản T) nếu 1  s  n – m và T[s+1..s+m] = P[1..m]. Nếu P xuất hiện với bước dịch chuyển s trong T, thì ta bảo s là một bước dịch chuyển hợp lệ (valid shift); ngược lại ta bảo s là một bước dịch chuyển không hợp lệ (invalid shift). 28
  • 29.  Bài toán so trùng dòng ký tự là bài toán tìm tất cả những bước dịch chuyển hợp lệ mà một khuôn mẫu P xuất hiện trong một văn bản T cho trước. Văn bản Khuôn mẫu abcabaabcabac abaabcabac Bước dịch chuyển: s = 3 Giải thuật Rabin-Karp vận dụng những khái niện căn bản trong lý thuyết số chẳng hạn sự tương đương của hai số modulo một số thứ ba. 29
  • 30. Giải thuật Rabin-Karp      Giả sử  = {0, 1, 2, …, 9}, tức mỗi ký tự là một ký số thập phân. (Trong trường hợp tổng quát, mỗi ký tự là một ký số của cơ hệ d, tức là d = | |.) Ta có thể xem một dòng gồm k ký tự kế tiếp diễn tả một số thập phân có chiều dài k. Dòng ký tự “31415” tương ứng với trị số thập phân 31415. Cho một khuôn mẫu P[1..m], gọi p là giá trị thập phân tương ứng với khuôn mẫu. Cho một văn bản T[1..n], gọi ts là trị số thập phân của dòng con chiều dài m T[s+1...s+m], với s = 0, 1, …, n-m. ts = p nếu và chỉ nếu T[s+1..s+m] = P[1..m] và s là một bước dịch chuyển hợp lệ nếu và chỉ nếu ts = p 30
  • 31.    Ta có thể tính p trong thời gian O(m) dùng qui tắc Horner: p = P[m] + 10*(P[m-1] + 10*(P[m-2] + … + 10*(P[2] + 10*P[1])…)) Giá trị t0 có thể được tính một cách tương tự từ T[1..m] trong thời gian O(m). Chú ý: ts+1 có thể được tính từ ts: ts+1 = 10(ts – 10m-1T[s+1]) + T[s+m+1] (5.1) Thí dụ: Nếu m = 5 và ts = 31415, thì ta sẽ bỏ ký số bậc cao T[s+1] = ‘3’ và đưa vào ký số bậc thấp là ‘2’ để đạt giá trị: ts+1 = 10(31415 – 10000.3) + 2 = 14152 31
  • 32.       Mỗi lần thực thi phương trình (5.1) sẽ cần tiến hành một số lượng phép toán số học cố định. Việc tính toán t1, t2,…, tn-m tỉ lệ với O(n-m). Như vậy, p và t0, t1, …, tn-m có thể được tính trong chi phí thời gian O(m) +O(m) + O(n-m)  O(n + m). Nhưng p và ts có thể quá lớn đến nỗi máy tính không thể biểu diễn được. Để khắc phục vấn đề này, ta tính p và các ts modulo một đại lượng q thích hợp. Đại lượng q thường được chọn là một số nguyên tố sao cho 10q thì chứa được trong một từ của máy tính. Trong trường hợp tổng quát, với bộ mẫu tự gồm d ký tự {0, 1, …, d-1}, ta chọn q sao cho dq chứa được trong một từ của máy tính. 32
  • 33.      Và phương trình (5.1) trở thành: ts+1 = d(ts – hT[s+1]) + T[s+m+1])mod q (5.2) với h = dm-1 (mod q) Tuy nhiên, ts  p (mod q) không hàm ý ts = p. Mặt khác, nếu ts  p (mod q) thì ta có thể khẳng định ts  p, và như vậy bước dịch chuyển s là không hợp lệ. Chúng ta có thể dùng cách thử ts  p (mod q) để loại bỏ những bước dịch chuyển không hợp lệ s. Một bước dịch chuyển s mà thỏa ts  p (mod q) thì phải được thử nghiệm thêm để xem s có thực sự là bước dịch chuyển hợp lệ hay chỉ là một sự khớp trùng giả (spurious hit) mà thôi . Giải thuật Rabin-Karp thể hiện rõ nét tinh thần chiến lược Biến thể-để-trị 33
  • 34. Thí dụ: |2| 3| 5| 9| 0| 2| 3| 1| 4| 1| 5| 2| 6| 7| 3| 9| 9| 2| 1|  ______   | 7| |2| 3| 5| 9| 0| 2| 3| 1| 4| 1| 5| 2| 6| 7| 3| 9| 9| 2| 1|  _______   ______   ______     | 8| 9| 3|11| 0| 1| 7| 8| 4| 5|10|11| 7| 9|11| valid match | 3| 1| 4| 1| 5| 2|  ______    | 7| 8| spurious match 14152 = (31415 – 3  1000)  10 + 2 (mod 13) = 8 (mod 13) 34
  • 35. procedure RABIN-KARP-MATCHER(T, P, d, q); /* T is the text, P is the pattern, d is the radix and q is the prime */ begin Thời gian thực thi của RABINn: = |T|; m: = |P|; KARP-MATCHER là O((n – m + h: = dm-1 mod q; 1)m) trong trường hợp xấu nhất p: = 0; t0: = 0; vì khi đó giải thuật phải kiểm tra for i: = 1 to m do lại mọi bước dịch chuyển hợp begin lệ. p: = (d*p + P[i])mod q; t0: = (d*t0 + T[i])mod q Trong nhiều ứng dụng, thường end chỉ có một vài bước dịch for s: = 0 to n – m do chuyển hợp lệ và do đó thời begin gian chạy thường là O(n+m) if p = ts then /* there may be a hit */ cọng với thời gian đòi hỏi để if P[1..m] = T[s+1..s+m] then kiểm tra lại các sự khớp trùng Print “Pattern occurs with shift “s; giả. if s < n – m then ts+1: = (d(ts –T[s + 1]h) + T[s+m+1])mod q end end 35
  • 36. Vài ghi nhận về chiến lược biến thể-để-trị  Cây AVL là cây tìm kiếm nhị phân mà luôn luôn được làm cho cân bằng.     Sự cân bằng này được duy trì bằng 4 phép quay (rotation). Tất cả các thao tác trên cây AVL đều có độ phức tạp O(nlgn), loại trừ được trường hợp xấu nhất của cây tìm kiếm nhị phân. Cây AVL và giải thuật loại trừ Gauss là những thí dụ của biến thể-để-trị theo kiểu “đơn giản hóa thể hiện”. Heapsort, giải thuật Horner và giải thuật RabinKarp là những thí dụ của biến thể-để-trị theo kiểu “biến đổi cách biểu diễn” 36