Bài giảng Phân tích thiết kế và đánh giá thuật toán (Phần 1)
Tóm tắt Bài giảng Phân tích thiết kế và đánh giá thuật toán (Phần 1): ... p ầ ủa y số a l mộ ủa mộ ụ . T m mộ m ả ộ a số l mộ m ù l mộ ả . 1 2 Đ c tr ng của thuật toán T ắ : T ầ p ả ảm ả mộ ả sa ự ố ớ ộ l ầ . Đ y l ư a ọ ố ớ mộ . T : ầ p ả ảm ả s sa mộ số ướ . T x : C ướ ủa p ả ượ p ụ y p ầm lẫ ố ớ ư ọ . T ả: ượ xem l ả ư ả ă ả y ả a a p p ...Cấu tr c dữ iệu – Data structure Niklaus Wirth, một l p trình viên và nhà khoa họ m y ư i phát minh ra ngôn ng l p Pas al ng nói một câu nói n i ti l ực l p : C ư (Programs) = C u trúc d li u (Data Structures) + Giải thu t (Algorithms). Câu nói này nói lên bản ch t của vi c l p l m một c u t...h họa cho thu t toán: void selection_sort(int a[], int n) { int i, j, vtmin; ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 17 for(i=0; i<n-1;i++) { vtmin = i; // m lư p ầ a .. -1] for(j=i+1;j<n;j++) if(a[j] < a[vtmin]) vtmin = j; swap(a[vtmin], a...
mộ x N ý ự. Mộ
ả l y a ộ x ố ớ m ý ự ự m xem ý ự x
a ê lầ . K ướ ủa ả l ố l ố ớ ô
l p C l y ố ớ N. N ư s l ố l ộ
p p ủa l S*N S l số p ầ ủa ả s ụ . C ý
l mộ ố ả y ớ ộ p p l (S + N).
Trong ộ l p mộ ự 1000000000 p p
ô a m ộ a . C a am ả ả sa êm:
Độ phức tạp Giá tr N ớn nhất
(N) 100 000 000
(N log N) 40 000 000
(N2) 10 000
(N3) 500
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
8
(N4) 90
(2N) 20
(N!) 11
Th i gian thực hiện của các thuật toán c độ phức tạp khác nhau
O(Log(N)) 10-7 giây
O(N) 10-6 giây
O(N*Log(N)) 10-5 giây
O(N2) 10-4 giây
O(N6) 3 p
O(2N) 1014 ăm
O(N!) 10142 ăm
Ch ý về phân tích thuật toán.
T ô ư a y mộ ố ộ p p
a ủa l s ụ . T y ê ê ự a ay ù ý p p
-O – ô lắm y ượ
ư . N ư ê l -O l ê ư a
s m mô ê ố .
Ví dụ: C mộ mả ượ sắp A. H y x xem mả A a p ầ
m ủa D ay ô . H y xem m ư sa :
int j=0;
for (int i=0; i<N; i++)
{
while ( (j D) )
j++;
if (A[i]-A[j] == D)
return 1;
}
R ê l O(N2 : l p le ê ượ ọ N
lầ m lầ ă lê ố a N lầ . N ư mộ p ố s a y
l O(N) ả a ự ủa l ă ô y
N lầ .
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
9
N a l O(N2 a ẫ ư l
l O N a ưa a ượ ô x .
4. Cấu tr c dữ iệu – Data structure
Niklaus Wirth, một l p trình viên và nhà khoa họ m y ư i phát minh ra ngôn
ng l p Pas al ng nói một câu nói n i ti l ực l p : C ư
(Programs) = C u trúc d li u (Data Structures) + Giải thu t (Algorithms). Câu nói này nói
lên bản ch t của vi c l p l m một c u trúc d li u phù hợp bi u di n d li u của
bài toán và t x y ựng giải thu t phù hợp với c u trúc d li chọn. Ngày nay với sự
phát tri n của các k thu t l p trình, câu nói của Wirth không hẳ y ối n a
ư ẫn phản ánh sự gắn k t và tầm quan trọng của các c u trúc d li u và giải thu t.
C u trúc d li ược s dụ bi u di n d li u còn các giải thu ược s dụ thực
hi n các thao tác trên các d li u của bài toán nh m hoàn thành các ch ă ủa ư
trình
Các chiến c thiết kế thuật toán
K ô mộ p ư p p p a x y ự ê
ả l . C a ọ m y ê ưa a
lượ ả p ụ l a .
5.1. Duyệt toàn ộ (E hausted search)
C lượ y ộ l lượ m m l p ê p ả ầ ê
ả y . T p ư p p y ộ a s xem x ả
ê ộ mộ ô a ủa xem p ả l m ủa
ay ô . P ư p p y yê ầ mộ m m a xem mộ ê
p ả l m ủa ay ô . M ù s p ư p p y ô
p ả l ự l ô ả ố ớ m ướ p
lớ . C p ư p p ả ă ủa p ư p p y ộ a s
xem x ư 3.
5.2. Đệ qui quay ui – Backtracking
C lượ ay l l mộ lượ x y ự ựa ê a
qui. N m ủa ượ mô a ướ mộ e m p ầ ủa e
m s mộ p s ướ
p ầ ủa m x m ủa . M ù ô p ả
p ụ s ả ựa ê p ư p p ay l
l ô ẻ ẹp sự ắ ọ s m ma l .
3 Chia đ tr (Divide and Conquer)
C lượ a l mộ lượ a ọ ả .
ư ủa lượ y e ả y l : ầ ả y mộ
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
10
a s a ả
sa ợp m ủa l m ủa a ầ .
T y ê ă y m a y ố: l m a
mộ ợp lý l ượ ả y
a s p p y ố a l ợp l ả ủa
s ượ ự ư .
C sắp x p ộ me e s sắp x p a s ộ l
a y ượ y ư 3 .
Ví dụ[6, trang 57]: T ụ y a s xem x Na .
Đ Na a ý ô sa :
N N/2 2
N/2 2
1 nÕu N = 0
a (a ) nÕu N ch½n
a*(a ) nÕu N lÎ
T ô ê a s y a ủa ư sa :
int power(int a, int n)
{
if(n==0)
return 1;
else{
int t = power(a, n/2);
if(n%2==0)
return t*t;
else
return a*t*t;
}
}
Chiến c tham am (Greedy)
C lượ am lam l mộ lượ x y ự m m ố ư ụ ộ
ố ư m ượ m ố ư ụ ả ư
ợp . T ư ợp m l ả ủa lượ am lam ư
ă a ộ p p p .
Ch ý: T mộ số x y ự ượ m ọ ợp
m ố ư . T am ă m ầ ớ m
ố ư .
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
11
5.5. Qui hoạch động (Dynamic Programming)
ộ l lượ x y ự ả y ố ư
ủa ô p ả l m lớ /
l a ê ô ụ ượ . Trong
lượ ộ a s x y ự a ủa ố
s l ả ựa ê s p lems ựa ê a . C
qui ộ ư s ụ mả lư l m ủa
a p : m p p .
ài tập
ài tập 1: X y ự s ồ ả số a N y
số a ượ a ư sa :
0 1 1 N N-1 + N- ớ N .
ài tập 2 X y ự s ồ ả :
...x x x ớ N số x ự m ă a N x p
p m.
ài tập 3 T mộ ma a p MxN mộ p ầ a ượ ọ l m
yê ựa ủa ma sa le p ư l p ầ ê p ầ lớ
ê ộ ủa ma . C ẳ a 0 l mộ p ầ yê ựa ma sa :
1 2 3
4 5 6
7 8 9
H y ư m ả m yê ựa ủa mộ ma p
p m ưa a ộ p p ủa .
ài tập C mộ ma ướ MxN ồm số yê ả số m
ư . H y ư m ma ủa ma sa p ầ
ma lớ ượ max m m s m pla ea . H y ưa a
ộ p p ủa s ụ .
ài tập V ư p số ủa mộ a ả s số l
yê a x l mộ số yê mộ x0. H y ủa a
e ô H e sa :
N x an*x
n + an-1*x
n-1+ .. +a1*x + a0
f(x) = a0 + x*(a1+x*(a2+x* .+x an-1+an*x Cô H e .
ài tập C 4 ộp ướ a m m ủa ộp ượ ô 1
4 m xa m . H y ưa a ả x p ộp 1 y sa
e p a ê x ố ướ sa ủa y ủ ả 4 m
xa m .
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
12
ài tập 7 H y ư a ượ a ả số yê
số a số.
ài tập 8 p ụ s a ả số yê ố N.
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
13
CHƯƠNG II: S P XẾP (S RTING) VÀ T IẾ (SE RCHING)
1. Bài toán s p ếp
1 1 S p ếp trong (Interna Sorting)
Sắp x p ược xem là một trong nh l ực nghiên c u c n của khoa học máy
. T ướ t toán chi ti t chúng ta cần nắm v ng một số khái ni m ản
sau:
+ Mộ ư ng (field) là mộ d li ẳng h ư ê i, số n tho i
của mộ ư i ...
+ Một bản ghi (record) là một t p hợp ư ng
+ Một file là một t p hợp các bản ghi
Sắp x p (sorting) là một quá trình x p t các bản ghi của một file theo một th tự nào
. V c x p y ược thực hi n dựa trên một hay nhi ư ô
y ược gọi là khóa xắp x p (key). Th tự của các bả ượ x nh dựa trên các khóa
khác nhau và vi c sắp x p ố ược thực hi ối với m i khóa theo các th tự khác nhau.
Chúng ta s t p trung vào các thu t toán xắp x p và giả s khóa ch gồm 1 ư ng duy nh t.
Hầu h t các thu t toán xắp x p ược gọi là các thu t toán xắp x p so sánh: chúng s dụng hai
a ả l s s i ch (swap) các phần t cần sắp x p.
C sắp x p ả ượ a l m a .
Sắp x p (internal sorting): D l ầ sắp x p ượ lư ầy ủ ộ ớ
trong ự sắp x p.
1 2 S p ếp ngoài (E terna Sorting)
Sắp x p ex e al s : D l ầ sắp x p ướ lớ ô
lư ộ ớ sắp x p a y p l m a
.
T p m ủa mô ọ y a xem x sắp x p . Cụ
l sắp x p s l mộ mả ả ồm a ư l ư l
ư a p a xem x ư a ủa
ả y ụ m ọa ượ ự ê mả số yê
ư l ư a ủa ả .
1 3 S p ếp gián tiếp
Khi các bả ước lớn vi i các bản ghi là r t tố m
giảm p ư i ta có th s dụ p ư p p sắp x p gián ti p. Vi c này có th ược
thực hi n theo nhi u cách khác nhau và môt trong nh p ư p p l o ra một file
mới ch a ư ng khóa của le a ầu, ho c con tr tới ho c là ch số của các bản ghi ban
ầu. Chúng ta s sắp x p trên file mới này với các bả ước nh sa y
c p vào các bả le a ầu thông qua các con tr ho c ch số y l l m
ư ng th y ối với các h quản tr s d li u).
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
14
Ví dụ: chúng ta muốn sắp x p các bản ghi của le sa y:
Index Dept Last First Age ID number
1 123 Smith Jon 3 234-45-4586
2 23 Wilson Pete 4 345-65-0697
3 2 Charles Philip 9 508-45-6859
4 45 Shilst Greg 8 234-45-5784
Sau khi sắp x p x truy c p vào các bản ghi theo th tự sắp x p chúng ta s
dụng th tự ược cung c p b i cột index (ch số . T ư ng hợp này là 3, 2, 4, 1. (chúng
ta không nh t thi t phả i các bả a ầu).
1.3 Các tiêu chuẩn đánh giá một thuật toán s p ếp
Các thu t toán sắp x p có th ược so sánh với nhau dựa trên các y u tố sa y:
+ Th i gian thực hi n (run-time): số các thao tác thực hi ư ng là số các phép so
s i các bản ghi).
+ Bộ nhớ s dụ Mem y : l lượng bộ nhớ cần thi thực hi n thu t toán
lượng bộ nhớ s dụ ch a d li u cần sắp x p.
+ Một vài thu t toán thuộc lo “ pla e ô ần (ho c cần một số cố nh) thêm
bộ nhớ cho vi c thực hi n thu t toán.
+ Các thu ư ng s dụng thêm bộ nhớ t l thu n theo hàm tuy n tính ho c
m m ớ ước file sắp x p.
+ T t nhiên là bộ nhớ s dụng càng nh càng tốt m c dù vi ối gi a th i gian và
bộ nhớ cần thi t có th là có lợi.
+ Sự nh (Stability):Một thu ược gọi là nh n ư gi ược
quan h th tự của các khóa b a ô l m ay i th tự của các khóa b ng nhau).
C a ư ng lo lắng nhi u nh t là v th i gian thực hi n của thu t toán vì các thu t
toán mà chúng ta bàn v ư ng s dụ ước bộ nhớ ư ư a .
Ví dụ v sắp x p nh: Chúng ta muốn sắp x p le sa y ự trên ký tự ầu của các
bả ướ y l t quả sắp x p của các thu t toán nh và không nh:
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
15
Chúng ta s xem xét t i sao tính nh trong các thu t toán sắp x p l ượ
quan trọ ư y.
2. Các ph ng pháp s p ếp c ản
2.1. S p ếp chọn (Selection sort)
Mô ả :
Tìm phần t có khóa lớn nh t (nh nh sa sắp x p phần
còn l i của mảng.
S ồ :
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
16
Bắ ầu
K t c
Nh p n, a[0..n-1]
i=0
i<n
vtmin=i
j<n
j=i+1
a[j]<a[vtmin]
vtmin=j
vtmin!=i
Đ i ch a[i], a[vtmin]
Đ
S
i=i+1
j=j+1
Đ
S
S
Đ
Đ
S
Đ n mã sau minh họa cho thu t toán:
void selection_sort(int a[], int n)
{
int i, j, vtmin;
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
17
for(i=0; i<n-1;i++)
{
vtmin = i; // m lư p ầ a .. -1]
for(j=i+1;j<n;j++)
if(a[j] < a[vtmin])
vtmin = j;
swap(a[vtmin], a[i]); // m a m a
}
}
Ví dụ:
Với m i giá tr của i thu t toán thực hi n (n – i – 1) phép so sánh và vì i ch y t 0 cho tới
(n–2), thu t toán s cần (n-1) + (n- + + 1 -1)/2 t c là O(n2) phép so sánh. T mọ
ư ợp số lầ s s ủa l ô . M lầ y ủa l p ố ớ
mộ lầ a p ầ ê số lầ ủa
l . N ư y ư ợp ố ầ 0 lầ ầ /
lầ ồ ầ lầ .
2 2 S p ếp đổi ch trực tiếp (E change sort)
Tư ự ư sắp x p ọ ư ầm ớ
sắp x p è l sắp x p ự p mộ số l ọ l
I e a e s ay S a Sele S .
Mô ả: Bắ ầ x p ầ ầ ê a ớ 0 a x ả p ầ sa
a ọ l a ớ y +1 ớ -1 ố ù . Vớ m p a a ý l a
l p ầ sa a a a l xảy a sa a s a
a[j].
Ví dụ minh họa G ả s mả a ầ l a 1 19 3 1 . C ướ ủa
s ượ ự ư sa :
i=0, j=2: 1, 6, 2, 19, 3, 12
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
18
i=1, j=2: 1, 2, 6, 19, 3, 12
i=2, j=4: 1, 2, 3, 19, 6, 12
i=3, j=4: 1, 2, 3, 6, 19, 12
i=4, j=5: 1, 2, 3, 6, 12, 19
K ả ố ù : 1 3 1 19.
S ồ :
Bắ ầu
K t c
Nh p n, a[0..n-1]
i=0
i<n
j<n
j=i+1
a[j]<a[i]
Đ
S
i=i+1
j=j+1
Đ
S
S
Đ
Đ i ch a[i], a[j]
C ủa :
void exchange_sort(int a[], int n)
{
int i, j;
int tam;
for(i=0; i<n-1;i++)
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
19
for(j=i+1;j<n;j++)
if(a[j] < a[i])
{
// a a
tam = a[i];
a[i] = a[j];
a[j] = tam;
}
}
Độ p p ủa : C y s ớ sắp x p ọ
sắp x p ự p ầ số ướ s s ư ư : l * -1 / lầ s s .
N ư số ướ a p ầ ớ số lầ s s : * -1 / . T ư
ợp x số ướ ủa ớ số lầ s s ư ợp
số ướ l * -1 /4. C ư ợp ố số ướ 0.
N ư y sắp x p ự p l m s ớ
sắp x p ọ số lầ .
2.3. S p ếp ch n (Insertion sort)
Mô ả :
T ựa a l hèn m i khóa vào mộ y ược sắp x p
của dãy cần sắp. P ư p p y ư ược s dụng trong vi c sắp x p các cây bài trong
.
S ồ ả ủa ư sa :
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
20
Bắ ầu
K t c
i=1
i<n
tam=a[i]
j=i-1
Đ
j>=0
a[j]>tam
a[j]=a[j-1]
j=j-1
S
a[j+1]=tam
i=i+1
S
Đ
Đ
S
C mô ả l ư sa : a ầ a ư mả a 0.. -1 ồm p ầ
ư ợp ầ ê 1 l ượ sắp ướ ủa a s
è a mả a 0.. -1] sao c sa è p ầ ẫ e ự ă
ầ . Bướ p e s è a +1 mả a 0.. mộ ư ự. T
ớ mả è a -1 mả a 0.. -2]). Đ è a mả
a 0.. -1 a ù mộ m lư a sa ù mộ số -1
ớ ầ mả a am s py a a +1 a l lù mả l mộ
è am mả . V l p s a am -1 a a +1
tam.
Đ m ư ư sa :
void insertion_sort(int a[], int n)
{
int i, j, temp;
for(i=1;i<n;i++)
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
21
{
int j = i;
temp = a[i];
while(j>0 && temp < a[j-1])
{
a[j] = a[j-1];
j = j-1;
}
a[j] = temp;
}
}
Ví dụ:
T sắp x p è l mộ sắp x p s a le l
a số sắp x p ả .
Với m i i chúng ta cần thực hi n so sánh khóa hiên t i (a[i]) với nhi u nh t là i khóa và
vì i ch y t 1 tới n-1 nên chúng ta phải thực hi n nhi u nh : 1 + + + -1 = n(n-1)/2 t c
là O(n2 p p s s ư ự ư t toán sắp x p chọn. Tuy nhiên l p le ô
p ả l ượ ự ự ô l l p lầ ê
ê ự sắp x p è a s ớ sắp x p ọ . T ư
ợp ố ầ s ụ lầ s s 0 lầ . T ê ự mộ
mả ỳ ồm mả ượ sắp ê è ộ ả.
T sắp x p è l a sắp x p ả
ộ p p O(n2)).
2.4. S p ếp nổi ọt ( u e sort)
Mô ả :
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
22
T sắp x p ọ ựa ê s s a p ầ a :
+ Duy t qua danh sách các bản ghi cần sắp theo th tự i ch hai phần t k nhau
n u chúng không theo th tự.
+ L p l u này cho tới khi không có hai bản ghi nào sai th tự.
K ô th y r ng n pha thực hi l ủ ự x .
Thu y ư ự ư t toán sắp x p chọn ngo i tr vi c có thêm nhi u
a i ch hai phần t .
S ồ :
Bắ ầu
K t c
Nh p n, a[0..n-1]
i=0
i<n
j>i
j=n-1
a[j]<a[j-1]
Đ
S
i=i+1
j=j-1
Đ
S
S
Đ
Đ i ch a[j], a[j-1]
C :
void bubble_sort1(int a[], int n)
{
int i, j;
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
23
for(i=n-1;i>=0;i--)
for(j=1;j<=i;j++)
if(a[j-1]>a[j])
swap(a[j-1],a[j]);
}
void bubble_sort2(int a[], int n)
{
int i, j;
for(i=0;i<n;i++)
for(j=n-1;j>i;j--)
if(a[j-1]>a[j])
swap(a[j-1],a[j]);
}
T ộ p p l O(N*(N-1)/2) = O(N2), số lầ s s số lầ
ủa ư ợp ồ . T sắp x p ọ l
m số sắp x p ả m sắp x p
ự p m ù số lầ s s a ư a p ầ a
ê số lầ .
2.5 So sánh các thuật toán s p ếp c ản
S p xếp chọn:
+ T i n2/ p p s s ướ i ch .
+ T ư ng hợp x u nh ư ự.
S p xếp chèn:
+ Trung bình cần n2/4 phép so sánh, n2/8 ướ i ch .
+ X u nh t cần g p ô ước so vớ ư ng hợp trung bình.
+ Th i gian là tuy ối với các file hầ ư sắp l a
số sắp x p ả .
S p xếp nổi bọt:
+ Trung bình cần n2/2 phép so sánh, n2/ a i ch .
+ X u nh ư ự.
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
24
3. Cấu tr c dữ iệu Heap, s p ếp vun đống (Heap sort).
3.1. Cấu tr c Heap
T ướ m eap s a s m mộ
ọ l Heap eap a a s e ay ọ l ố .
Heap l mộ y p ầy ủ m a ey l ey pa e . H y ớ
l mộ y p ầy ủ l mộ y p ầy ả ầ ủa y ầ ố
ù ầy p a ủa y . C mô ả l mộ y p m
m sa : l mộ ủa y ô m ố ù s
l mộ m ố ù s ô a em
ê ủa ô 1 s 1 ư a
em ê ủa ủ m l l m ố ù mộ s số
số ủa a em ê ủa .
Ví dụ
Chiều cao của một heap
Mộ eap s a l O l .
Chứng minh
G ả s l số ủa mộ eap a l .
V mộ y p số ố a l 2
h
-1 nên suy ra:
12h 2
h
-1
L y l a a ủa ẳ a ượ :
h – 1 l
T êm 1 ủa ẳ l l y l a a a l ượ :
log(n + 1)
T ê s y a:
3
7
4
5 1
7
7
2 6
9 1
3
1
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
25
l + 1 l (n) + 1
Các ví dụ về cấu tr c Heap:
Heap ớ a 3:
eap ớ a 4
i u diễn Heap
C a mộ y p ê mộ eap
ô ư ự ố ư mộ y p mộ mả .
Đố ớ mộ eap lư mộ mả a a sa ả s a ắ ầ
0):
Left(i) = 2*i + 1
Right(i) = 2*i + 2
Parent(i) = (i-1)/2
Ví dụ
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
26
Thủ tục heapri y
Đ y l ủ ụ ả ả ủ ụ a ê eap
Input:
+ Mộ mả A mộ số mả
+ G ả s a y Le R l eap
+ A p ỡ Heap y ớ Le R .
Output:
+ Mả A y ố l l mộ Heap
K ô a y ộ p p l O(log n).
C a s y y l mộ ủ ụ m y ư ượ l
a ay ủa mộ a eap ủa eap s p ỡ y
p ả sự s a .
Sa y l C ủa ủ ụ :
void heaprify(int *A, int i, int n)
{
l = Left(i); /* l = 2*i +1*/
r = Right(i); /* r = 2*i + 2 */
if(l A[i])
largest = l;
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
27
else
largest = i;
if(r A[largest])
largest = r;
if(lagest !=i)
{
swap(A[i], A[largest]);
heaprify(A, largest, n);
}
}
V ả y l mộ ủ ụ ả s ớ a ảm
. T ủ ụ y ả ớ ướ ư sa :
+ X p ầ lớ 3 p ầ A A Le A R .
+ N A ô p ả l p ầ lớ 3 p ầ ê A ớ
A la es A la es s l A Le A R .
+ Gọ ủ ụ ớ la es l m ay ủa eap
l A la es .
Ví dụ
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
28
Thủ tục ui dheap
T ủ ụ l eap s y mộ mả ỳ mộ eap. V ả ủ ụ y
ự ọ ớ ủ ụ eap y ê e ự ượ l . V y e ự
ượ l ê a y ố l eap. N a ố ủa
mả ư ớ l ê a ô ầ p ả ự ủ ụ eap ố ớ
.
Đ m C ự l eap:
void buildheap(int *a, int n)
{
int i;
for(i=n/2; i>=0; i--)
heaprify(a, i, n);
}
Dựa y y eap mả ộ p p l O(n*log n .
T ê ự eap ộ p p l O . T a ự ủa
eap y ê mộ y ướ mộ ụ l mố a
a p ầ a a Le a R l O 1 . Cộ êm ớ a ủ ụ y
ự ê mộ y ố mộ l ủa . Số y ủa
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
29
ủa l ố l /3. S y a a ô ộ p p ủa
l : T T /3 + O 1 T O l y s y a ộ p p ủa
l eap l *l . C lý l ư sa : K ướ ủa p
ủa y l : /4 /8 /1 1 l số ủa y. T a ự
eap y ố ớ ướ y l 1 3 l – 1 a
s x p x l :
1*n/4 + 2 * n/8 + 3 * /1 + + l -1) * 1 < n/4(1 + 2* ½ + 3 * ¼ + 4 * 1/8 + ...) =
O(n).
Ví dụ
Các thao tác trên heap khác
N eap a sa y ư ự ố ớ mộ eap:
+ Insert()
+ Extract_Max()
C a ô a y y ư a y ô
ự ớ s ụ ủ ụ eap y m a ê . Vớ a y
a s ụ mộ eap mộ ợ ư ê . Mộ ợ ư ê l
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
30
mộ l ớ a ả l se max m m ex a max m m
a s p ầ sa ủa a ọ .
3.2. S p ếp vun đống (Heap sort)
T Heap s ý ư ả :
+ T ự ủ ụ l eap mả A mộ eap
+ V A l mộ eap ê p ầ lớ s l A 1 .
+ Đ A 0 A -1], A[n-1 m ủa a
a ư mả y ướ l -1 ay l xem x p ầ ầ ủa
mả ô l mộ eap a.
+ V A 0 l ê a s ọ ủ ụ eap y ố ớ l mả
mộ eap.
+ L p l a ê ớ mộ p ầ eap mả
ượ sắp.
C C ủa :
void heapsort(int *A, int n)
{
int i;
buildheap(A, n);
for(i=n-1;i>0;i--)
{
swap(A[0], A[i]);
heaprify(A, 0, i-1);
}
}
Ch ý: Đ ọ sắp x p ê mả a n p ầ ọ m eaps ư sa :
heapsort(a, n);
Độ phức tạp của thuật toán heapsort
T ủ ụ l eap ộ p p l O .
T ủ ụ eap y ộ p p l O l .
Heaps ọ ớ l eap 1 lầ -1 lầ ọ ớ eap y s y a ộ p p ủa l
O(n + (n-1)logn) = O(n*log n).
T ê ự eaps ô a quicksort.
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
31
4. T m kiếm tuyến tính
4.1 ài toán t m kiếm
T m m l mộ ộ l ự ê ủa a ọ
m y ượ ụ ộ ê ự . Bả m ư a
p ư p p ma ự ự m m. T
ô y a ư x yê p ả m m: m m mộ ố
s ọ mộ ầ a m m mộ l lư ê m y
ê m m mộ m mộ ả a m mộ
s l m m ê m I e e .
T mô ọ y a a m ớ m m ê mộ mả mộ
a s p ầ ù . T ô ư p ầ y l mộ ả ượ p
a a ư ê : ư lư l mộ ư p
p ầ ớ a ô ư l ố a ọ l
ư a p p ầ y ượ ọ l ô a m m ủa m m
ô a m m ượ lư ê ộ ớ ủa m y m m.
K ả m m l v trí của phần tử th a mãn điều kiện t m kiếm: ư a
ớ mộ a ướ a m m . T m y y a
y p ớ ô ượ a ư l ủa p ầ m y. N
ả l ô m y ư ợp y ẫ ô ả
s ượ mộ ư ư ớ ô ồ p ầ
: ẳ ư -1 ố ớ mả NULL ố ớ a s l ê .
C m m : m m m m
ầ ự m m p ớ m m ựa ê l
ư l y ư y m m p y y e
T y ê p ầ y a s xem x a p ư p p m m ượ p ụ ớ
l mả l m m ượ a ộ ớ ủa m y .
Đ ầ ê m a ầ lư ý l ố ớ mả y y p ớ
p ầ a l ư a ựa số p a s p
ê ư m p ầ ư a l số yê .
4.2 T m kiếm tuần tự (Sequentia search)
ư ủa m m ầ ự ả : y a ả p ầ ủa
mả y m y p ầ a ớ a m m ả
ủa p ầ . C y ớ mả m ẫ ô p ầ a
ớ a m m ả -1 ô m y .
T s ồ ả ư sa :
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
32
C C ủa :
int sequential_search(int a[], int n, int k)
{
int i;
for(i=0;i<n;i++)
if(a[i]==k)
return i;
return -1;
}
D a s ả ả l ủa p ầ ầ ê a m
m m ồ p ầ .
Độ p p ư ợp ồ : O(n).
T ư ợp ố ộ p p O(1).
C m p ầ lớ m p ầ ủa mộ mả a s
l m m ầ ự. Mộ y l số p ầ ủa mả
ỡ 10000000 l m ố ộ p ượ ư số p ầ ủa
mả lê ẳ ư m ê mộ ư số ê ư ủa ả ớ
a ô ả.
Begin
mả a[0..n-1] a
i = 0
k==a[i] return i;
End
sai
i >= n
return -1;
i = i + 1;
sai
ài giảng môn học Phân tích thiết kế và đánh giá giải thuật
33
5 Các vấn đề khác
N ượ y ê ẫ mộ số m
a am ả : ẳ ư sắp x p S ell s sắp x p m
Counting sort sắp x p số Ra x s . C y ượ xem ư p ầ ự m
ủa s ê .
6. ài tập
ài tập 1: C sắp x p ả ô l p C ê 1 mả
số yê l ủa ư ượ p le ex ượ s ẫ ê số
p ầ ả 10000 s s a ự ự ủa .
ài tập 2: C sắp x p a ô C ớ mộ mả
s ê ê : x ý ự ộ ố a l 0 : số yê m : số
a sắp x p l ư ê . S s a ự ủa s s ớ
m s s ủa C.
ài tập 3[6, trang 52]: C ủa sắp x p ự e
a . H y m p l mả a 0.. p ầ số 0 ớ
số -1 ượ sắp x p ă ầ a ô a p ầ mộ số x è x
mả a 0.. -1 sa sa è ả ượ l a 0.. l mộ mả ượ sắp x p.
S ụ m a x y ự sắp x p è .
G i ý C è p ầ mả ư p ầ ủa
sắp x p è ượ y s ụ p ư p p .
File đính kèm:
bai_giang_phan_tich_thiet_ke_va_danh_gia_thuat_toan_phan_1.pdf



