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

index of cnpmpth02004slidepdf

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

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>

CH

ƯƠ

NG 3



S

P X

P VÀ TÌM KI

M NÂNG CAO



GV. Ngô Công Th

ng



B

môn Công ngh

ph

n m

m


Khoa Công ngh

thông tin


Website: dse.vnua.edu.vn/ncthang



Email:



N

i dung Ch

ươ

ng 3



1. S

p x

ế

p nhanh (Quick Sort)



2. S

p x

ế

p vun

đố

ng (Heap Sort)



3. S

p x

ế

p hịa nh

p (Merge Sort)



4. Tìm ki

ế

m nh

phân



</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

1. S

p x

ế

p nhanh (Quick Sort)



1.1. Ph

ươ

ng pháp



• S

p

x

ế

p

nhanh

(quick sort) còn

đượ

c

s

p

x

ế

p phân



đ

o

n (partition sort).


Ý t

ưở

ng thu

t tốn:




– Ch

n ng

u nhiên m

t ph

n t

x.



– Duy

t t

bên trái m

ng cho t

i khi có m

t ph

n t


a

<sub>i</sub>

>

=

x



– Sau

đ

ó duy

t t

bên ph

i m

ng cho t

i khi có m

t


ph

n t

aj

=

<x



Đổ

i ch

a

<sub>i</sub>

và a

<sub>j</sub>



– Ti

ế

p t

c duy

t và

đổ

i ch

cho t

i khi 2 phía g

p nhau.



Ngơ Cơng Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.3


1.1. Ph

ươ

ng pháp (

<i>ti</i>

<i>ế</i>

<i>p</i>

)



• K

ế

t qu

m

ng

đượ

c

chia thành 2 ph

n:



</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

Th

t

c s

p x

ế

p nhanh



Procedure Q_sort(L,R);


1) If L>=R then return;


2) i:=L; j:=R ; k:=(L+R) div 2;


3) x:=a[k];



4) Repeat



While a[i] <x Do i:=i+1;


While a[j] >x Do j:=j-1;


If i<j then a[i]

a[j]



Until i=j



5) Call Q_sort(L,j-1); { Th

c hi

n trên n

a <x }


6) Call Q_sort(j+1,R); { Th

c hi

n trên n

a >x }


Return



Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.5


1.2.

Đ

ánh giá



Ng

ườ

i ta

đ

ã ch

ng minh

đượ

c th

i gian trung



bình th

c hi

n gi

i thu

t là:


T

<sub>tb</sub>

= O(nlog

<sub>2</sub>

n)



Nh

ư

v

y, v

i n khá l

n Quick sort có hi

u l

c



</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

2. S

p x

ế

p vun

đố

ng (Heap Sort)



2.1. Ph

ươ

ng pháp



M

t cây nh

phân có chi

u cao h

đượ

c g

i là



đố

ng khi:



Là cây nh

phân hoàn ch

nh mà các nút lá

m

c


h-1 ph

i n

m phía bên trái.



Khoá

nút cha bao gi

c

ũ

ng l

n h

ơ

n khố

nút


con.




Ngơ Cơng Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.7


2. S

p x

ế

p vun

đố

ng (Heap Sort)



2.1. Ph

ươ

ng pháp



Thu

t tốn s

p x

ế

p vun

đố

ng chia làm 2 giai


đ

o

n.



</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5></div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6></div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

- L

p l

i các b

ướ

c t

ươ

ng t

cho các cây còn l

i.



Cu

i cùng ta thu

đượ

c dãy

đ

ã s

p là s=(11, 23, 42, 58, 65,


74)



* Gi

i thu

t vun

đố

ng:



- M

t lá coi nh

ư

cây con là m

t

đố

ng.



- Thu

t toán ti

ế

n hành t

đ

áy lên: Chuy

n

đổ

i thành

đố

ng


cho m

t cây con mà cây con trái và cây con ph

i c

a g

c

đ

ã


là m

t

đố

ng.



Cây nh

phân hoàn ch

nh có n nút thì v

i ch

s

[n/2] tr

lên


có th

là nút cha: [n/2], [n/2 ]-1, . . . , 1.



Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.13


<b>a) Th</b>

<b>ủ</b>

<b> t</b>

<b>ụ</b>

<b>c vun </b>

<b>đố</b>

<b>ng:</b>




<b>Ch</b>

<b>ỉ</b>

<b>nh lý cây nh</b>

<b>ị</b>

<b> phân con hoàn ch</b>

<b>ỉ</b>

<b>nh g</b>

<b>ố</b>

<b>c i trên cây nh</b>

<b>ị</b>



<b>phân có n nút </b>

<b>để</b>

<b> tr</b>

<b>ở</b>

<b> thành “</b>

<b>đố</b>

<b>ng” v</b>

<b>ớ</b>

<b>i </b>

<b>đ</b>

<b>i</b>

<b>ề</b>

<b>u ki</b>

<b>ệ</b>

<b>n cây con </b>


<b>trái và cây con ph</b>

<b>ả</b>

<b>i có g</b>

<b>ố</b>

<b>c là 2i và 2i+1 </b>

<b>đ</b>

<b>ã là </b>

<b>đố</b>

<b>ng.</b>



<b>Procedure ADJUST(i,n)</b>


<b>1. { Kh</b>

<b>ở</b>

<b>i </b>

<b>đầ</b>

<b>u }</b>



<b>Key:=K[i]; j:=2*i;</b>



<b>2. { Ch</b>

<b>ọ</b>

<b>n con </b>

<b>ứ</b>

<b>ng v</b>

<b>ớ</b>

<b>i khoá l</b>

<b>ớ</b>

<b>n nh</b>

<b>ấ</b>

<b>t trong 2 con c</b>

<b>ủ</b>

<b>a i }</b>


<b>While j<=n Do </b>



<b>Begin</b>



</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

<b>a) Th</b>

<b>ủ</b>

<b> t</b>

<b>ụ</b>

<b>c vun </b>

<b>đố</b>

<b>ng:</b>



<b>3. { So sánh khoá cha v</b>

<b>ớ</b>

<b>i khoá l</b>

<b>ớ</b>

<b>n nh</b>

<b>ấ</b>

<b>t }</b>


<b>If Key > K[j] then Begin</b>



<b>K[j/2]:=Key;</b>


<b>Return;</b>



<b>End;</b>



<b>K[j/2]:=K[j]; j:=2*j;</b>


<b>End; {K</b>

<b>ế</b>

<b>t thúc while}</b>



<b>4. { </b>

<b>Đư</b>

<b>a Key vào v</b>

<b>ị</b>

<b> trí c</b>

<b>ủ</b>

<b>a nó }</b>


<b>K[j/2]:=Key;</b>




<b>5. Return;</b>



Ngơ Cơng Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.15


<b>b) Th</b>

<b>ủ</b>

<b> t</b>

<b>ụ</b>

<b>c s</b>

<b>ắ</b>

<b>p x</b>

<b>ế</b>

<b>p vun </b>

<b>đố</b>

<b>ng:</b>



Procedure Heap_Sort(K,n)


1. { T

o

đố

ng ban

đầ

u }


For i:=[n/2] Downto 1 Do



Call ADJUST(i,n)


2. { S

p x

ế

p }



For i:= n-1 Downto 1 Do


Begin



tg:=K[1]; K[1]:=K[i+1];


K[i+1]:=tg;



Call ADJUST(1,i);


End;



3. Return



<b>5.2. </b>

<b>Đ</b>

<b>ánh giá</b>



</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

<b>3. S</b>

<b>ắ</b>

<b>p x</b>

<b>ế</b>

<b>p ki</b>

<b>ể</b>

<b>u hoà nh</b>

<b>ậ</b>

<b>p ( MERGE SORT)</b>


<b>3.1. Phép hoà nh</b>

<b>ậ</b>

<b>p 2 </b>

<b>đườ</b>

<b>ng</b>




Th

c hi

n h

p nh

t các b

n ghi c

a 2 b

ng

đ

ã

đượ

c s

p


x

ế

p thành 1 b

ng

đượ

c s

p.



<b>a) Ph</b>

<b>ươ</b>

<b>ng pháp:</b>



So sánh 2 khoá nh

nh

t ( ho

c l

n nh

t c

a 2 b

ng)

để


đư

a vào mi

n s

p x

ế

p.



Quá trình c

ti

ế

p t

c cho t

i khi 2 b

ng

đ

ã c

n.



<b>b) Gi</b>

<b>ả</b>

<b>i thu</b>

<b>ậ</b>

<b>t:</b>



B

ng 1: (x

<sub>b</sub>

, ..., x

<sub>m</sub>

)


B

ng 2: (x

<sub>m+1</sub>

, ..., x

<sub>n</sub>

)


B

ng s

p: (z

<sub>b</sub>

, ..., z

<sub>n</sub>

)



Ví d

: B

ng 1: (3, 5, 10, 16 )


B

ng 2: (1, 4, 15 )



B

ng s

p: (1, 3, 4, 5, 10, 15, 16)



Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.17


<b>* Th</b>

<b>ủ</b>

<b> t</b>

<b>ụ</b>

<b>c nh</b>

<b>ư</b>

<b> sau:</b>



<b>Procedure MERGE(X,b,m,n,Z);</b>


<b>1. i:=k:=b; j:=m+1;</b>



<b>2. While (i<=m) and (j<=n) Do </b>


<b>Begin If x[i]<=x[j] then </b>




<b>Begin Z[k]:=x[i];</b>


<b>i:=i+1;</b>


<b>End</b>



<b>Else Begin z[k]:=x[j];</b>


<b>j:=j+1;</b>


<b>End;</b>



</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

<b>* Th</b>

<b>ủ</b>

<b> t</b>

<b>ụ</b>

<b>c nh</b>

<b>ư</b>

<b> sau:</b>



<b>3. { M</b>

<b>ộ</b>

<b>t trong 2 b</b>

<b>ả</b>

<b>ng con </b>

<b>đ</b>

<b>ã c</b>

<b>ạ</b>

<b>n }</b>


<b>If i>m then (zk, ..., zn):= (xj, ..., xn)</b>


<b>Else (zk, ..., zn):= (xi, ..., xm)</b>



<b>4. Return</b>



Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.19


3.2. S

p x

ế

p ki

u hòa nh

p tr

c ti

ế

p (Straight two way


merge )



* B

ng con

đ

ã

đượ

c s

p g

i là m

t m

ch ( run).



* M

i b

n ghi coi nh

ư

1 m

ch có

độ

dài ( kích th

ướ

c )


là 1. N

ế

u hồ nh

p 2 b

ng nh

ư

v

y ta

đượ

c 1 m

ch


m

i có

độ

dài =2. Hồ nh

p 2 m

ch có

độ

dài là 2 ta



đượ

c m

t m

ch có

độ

dài là 4, ...




* Th

t

c MPASS th

c hi

n m

t b

ướ

c c

a s

p x

ế

p


hồ nh

p. Nó hịa nh

p t

ng c

p m

ch k

c

n nhau,


độ

dài L, t

b

ng X sang b

ng Y, n là s

l

ượ

ng



</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>

Procedure MPASS(X,Y,n,L)


1. i:=1;



2. Hồ nh

p c

p m

ch có

độ

dài L }


While i<= n-(2L-1) Do



Begin Call MERGE(X,i,i+L-1,i+2L-1, Y)


i:=i+2L;



End;



3. { Hồ nh

p c

p m

ch cịn l

i cu

i cùng


v

i t

ng

độ

dài <2L}



If i+L-1 <n then Call MERGE(X,i,i+L-1,n,Y)


Else (y

<sub>i</sub>

, ..., y

<sub>n</sub>

):= (x

<sub>i</sub>

, ..., x

<sub>n</sub>

);



Return



</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

3.3.

Đ

ánh giá



Th

i gian th

c hi

n trung bình c

a gi

i thu

t là:



Ttb = O(nlog

<sub>2</sub>

n)



* Nh

n xét chung:




- V

i n nh

có th

dùng các ph

ươ

ng pháp:



ch

n tr

c ti

ế

p, chèn tr

c ti

ế

p,

đổ

i ch

tr

c


ti

ế

p.



- V

i n l

n: N

ế

u dãy khố khơng s

p dùng



Quick sort, n

ế

u dãy khố có s

p dùng Heap



sort.



Ngơ Cơng Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.23


<b>4. Tìm ki</b>

<b>ế</b>

<b>m nh</b>

<b>ị</b>

<b> phân</b>


<b>Bài tốn tìm ki</b>

<b>ế</b>

<b>m</b>



* Bài tốn tìm ki

ế

m

đượ

c phát bi

u nh

ư

sau:



Cho m

t b

ng g

m n b

n ghi r

<sub>1</sub>

, r

<sub>2</sub>

, . . . , r

<sub>n</sub>

; r

<sub>i</sub>

(


1<= i <=n ) t

ươ

ng

ng v

i m

t khố k

<sub>i</sub>

. Hãy tìm


b

n ghi có giá tr

khố t

ươ

ng

ng b

ng x cho


tr

ướ

c.



</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

<b>1- Tìm </b>

<b>đượ</b>

<b>c b</b>

<b>ả</b>

<b>n ghi có giá tr</b>

<b>ị</b>

<b> khố t</b>

<b>ươ</b>

<b>ng </b>

<b>ứ</b>

<b>ng </b>


<b>b</b>

<b>ằ</b>

<b>ng x. Lúc </b>

<b>đ</b>

<b>ó ta nói phép tìm ki</b>

<b>ế</b>

<b>m </b>

<b>đượ</b>

<b>c tho</b>

<b>ả</b>

<b>. </b>


<b>2- Khơng tìm </b>

<b>đượ</b>

<b>c b</b>

<b>ả</b>

<b>n ghi nào có giá tr</b>

<b>ị</b>

<b> khố b</b>

<b>ằ</b>

<b>ng </b>


<b>x . Khi </b>

<b>đ</b>

<b>ó ta nói phép tìm ki</b>

<b>ế</b>

<b>m khơng tho</b>

<b>ả</b>

<b>.</b>



<b>Sau phép tìm ki</b>

<b>ế</b>

<b>m khơng tho</b>

<b>ả</b>

<b> n</b>

<b>ế</b>

<b>u có u c</b>

<b>ầ</b>

<b>n b</b>

<b>ổ</b>




<b>sung b</b>

<b>ả</b>

<b>n ghi m</b>

<b>ớ</b>

<b>i có khố x vào b</b>

<b>ả</b>

<b>ng. Gi</b>

<b>ả</b>

<b>i thu</b>

<b>ậ</b>

<b>t </b>


<b>này g</b>

<b>ọ</b>

<b>i là “ Tìm ki</b>

<b>ế</b>

<b>m có b</b>

<b>ổ</b>

<b> sung”.</b>



<b>Khố c</b>

<b>ủ</b>

<b>a m</b>

<b>ỗ</b>

<b>i b</b>

<b>ả</b>

<b>n ghi chính là </b>

<b>đặ</b>

<b>c </b>

<b>đ</b>

<b>i</b>

<b>ể</b>

<b>m nh</b>

<b>ậ</b>

<b>n bi</b>

<b>ế</b>

<b>t </b>


<b>c</b>

<b>ủ</b>

<b>a b</b>

<b>ả</b>

<b>n ghi </b>

<b>đ</b>

<b>ó trong tìm ki</b>

<b>ế</b>

<b>m, ta coi nó là </b>

<b>đạ</b>

<b>i di</b>

<b>ệ</b>

<b>n </b>


<b>c</b>

<b>ủ</b>

<b>a b</b>

<b>ả</b>

<b>n ghi trong gi</b>

<b>ả</b>

<b>i thu</b>

<b>ậ</b>

<b>t.</b>



Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.25


<b>4.1. Ý t</b>

<b>ưở</b>

<b>ng gi</b>

<b>ả</b>

<b>i thu</b>

<b>ậ</b>

<b>t</b>



<b>* Ph</b>

<b>ươ</b>

<b>ng pháp tìm ki</b>

<b>ế</b>

<b>m th</b>

<b>ự</b>

<b>c hi</b>

<b>ệ</b>

<b>n trên dãy khóa</b>

<b>đ</b>

<b>ã</b>


<b>s</b>

<b>ắ</b>

<b>p x</b>

<b>ế</b>

<b>p, có n</b>

<b>ộ</b>

<b>i dung nh</b>

<b>ư</b>

<b>sau:</b>



<b>- T</b>

<b>ươ</b>

<b>ng t</b>

<b>ự</b>

<b>nh</b>

<b>ư</b>

<b>tra tìm t</b>

<b>ừ</b>

<b>trong t</b>

<b>ừ đ</b>

<b>i</b>

<b>ể</b>

<b>n ho</b>

<b>ặ</b>

<b>c danh</b>


<b>b</b>

<b>ạ đ</b>

<b>i</b>

<b>ệ</b>

<b>n tho</b>

<b>ạ</b>

<b>i. Ch</b>

<b>ỉ</b>

<b>khác là trong tra c</b>

<b>ứ</b>

<b>u ta ch</b>

<b>ọ</b>

<b>n t</b>

<b>ừ</b>



<b>ng</b>

<b>ẫ</b>

<b>u nhiên, cịn trong tìm ki</b>

<b>ế</b>

<b>m nh</b>

<b>ị</b>

<b>phân ln ch</b>

<b>ọ</b>

<b>n</b>


<b>khố “</b>

<b>ở</b>

<b> gi</b>

<b>ữ</b>

<b>a” d</b>

<b>ẫ</b>

<b>y khố.</b>



<b>- Gi</b>

<b>ả</b>

<b>s</b>

<b>ử</b>

<b>có dãy khố k</b>

<b><sub>L</sub></b>

<b>, . . ., k</b>

<b><sub>R</sub></b>

<b>thì khố</b>

<b>ở</b>

<b> gi</b>

<b>ữ</b>

<b>a là</b>


<b>k</b>

<b><sub>i</sub></b>

<b>v</b>

<b>ớ</b>

<b>i</b>



</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>

<b>+ Tìm ki</b>

<b>ế</b>

<b>m s</b>

<b>ẽ</b>

<b> k</b>

<b>ế</b>

<b>t thúc n</b>

<b>ế</b>

<b>u: x=k</b>

<b><sub>i</sub></b>



<b>+ N</b>

<b>ế</b>

<b>u x<k</b>

<b><sub>i</sub></b>

<b>tìm ki</b>

<b>ế</b>

<b>m s</b>

<b>ẽ</b>

<b>đượ</b>

<b>c th</b>

<b>ự</b>

<b>c hi</b>

<b>ệ</b>

<b>n ti</b>

<b>ế</b>

<b>p </b>


<b>v</b>

<b>ớ</b>

<b>i k</b>

<b><sub>L</sub></b>

<b>, . . . , k</b>

<b><sub>i-1</sub></b>

<b>v</b>

<b>ớ</b>

<b>i cách t</b>

<b>ươ</b>

<b>ng t</b>

<b>ự</b>

<b>.</b>



<b>+ N</b>

<b>ế</b>

<b>u x>k</b>

<b><sub>i</sub></b>

<b>tìm ki</b>

<b>ế</b>

<b>m s</b>

<b>ẽ</b>

<b>đượ</b>

<b>c th</b>

<b>ự</b>

<b>c hi</b>

<b>ệ</b>

<b>n ti</b>

<b>ế</b>

<b>p </b>



<b>v</b>

<b>ớ</b>

<b>i k</b>

<b><sub>i+1</sub></b>

<b>, . . . , k</b>

<b><sub>r</sub></b>

<b>v</b>

<b>ớ</b>

<b>i cách t</b>

<b>ươ</b>

<b>ng t</b>

<b>ự</b>

<b>.</b>



<b>Qúa trình tìm ki</b>

<b>ế</b>

<b>m k</b>

<b>ế</b>

<b>t thúc khi tìm th</b>

<b>ấ</b>

<b>y m</b>

<b>ộ</b>

<b>t </b>


<b>khố mong mu</b>

<b>ố</b>

<b>n ho</b>

<b>ặ</b>

<b>c dãy khố r</b>

<b>ỗ</b>

<b>ng</b>



<b>( khơng tìm th</b>

<b>ấ</b>

<b>y ).</b>



Ngơ Cơng Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.27


<b>* Gi</b>

<b>ả</b>

<b>i thu</b>

<b>ậ</b>

<b>t:</b>



<b>Cho dãy K g</b>

<b>ồ</b>

<b>m n khoá, s</b>

<b>ắ</b>

<b>p x</b>

<b>ế</b>

<b>p theo th</b>

<b>ứ</b>

<b> t</b>

<b>ự</b>

<b> t</b>

<b>ă</b>

<b>ng d</b>

<b>ầ</b>

<b>n. Tìm khố có </b>


<b>giá tr</b>

<b>ị</b>

<b> =x.</b>



<b>Dùng bi</b>

<b>ế</b>

<b>n L, R, m: ch</b>

<b>ỉ</b>

<b> s</b>

<b>ố</b>

<b>đầ</b>

<b>u, ch</b>

<b>ỉ</b>

<b> s</b>

<b>ố</b>

<b> cu</b>

<b>ố</b>

<b>i, ch</b>

<b>ỉ</b>

<b> s</b>

<b>ố</b>

<b> gi</b>

<b>ữ</b>

<b>a c</b>

<b>ủ</b>

<b>a khố k.</b>


<b>N</b>

<b>ế</b>

<b>u tìm th</b>

<b>ấ</b>

<b>y cho ra ch</b>

<b>ỉ</b>

<b> s</b>

<b>ố</b>

<b> c</b>

<b>ủ</b>

<b>a khố </b>

<b>đ</b>

<b>ó, n</b>

<b>ế</b>

<b>u khơng tìm th</b>

<b>ấ</b>

<b>y cho ra </b>


<b>0.</b>



<b>Function Binary_search(K,n,x)</b>


<b>1. { Kh</b>

<b>ở</b>

<b>i t</b>

<b>ạ</b>

<b>o }</b>



<b>L:=1; R:=n;</b>


<b>2. { Tìm ki</b>

<b>ế</b>

<b>m }</b>


<b>While L<= R Do</b>


<b>Begin</b>



</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

<b>4. { So sánh }</b>



<b>If x<k[m] then R:=m-1</b>




<b>Else IF x>k[m] then L:=m+1</b>


<b>Else Return (m);</b>



<b>End; {End of While}</b>


<b>5. { Khơng tìm th</b>

<b>ấ</b>

<b>y }</b>


<b>Return (0)</b>



Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.29


<b>* Gi</b>

<b>ả</b>

<b>i thu</b>

<b>ậ</b>

<b>t vi</b>

<b>ế</b>

<b>t d</b>

<b>ạ</b>

<b>ng </b>

<b>đệ</b>

<b> quy nh</b>

<b>ư</b>

<b> sau:</b>



<b>L, r là ch</b>

<b>ỉ</b>

<b> s</b>

<b>ố</b>

<b>đầ</b>

<b>u, ch</b>

<b>ỉ</b>

<b> s</b>

<b>ố</b>

<b> cu</b>

<b>ố</b>

<b>i c</b>

<b>ủ</b>

<b>a dãy K, bi</b>

<b>ế</b>

<b>n nguyên Loc </b>



<b>để</b>

<b>đư</b>

<b>a ra ch</b>

<b>ỉ</b>

<b> s</b>

<b>ố</b>

<b>ứ</b>

<b>ng v</b>

<b>ớ</b>

<b>i khố c</b>

<b>ầ</b>

<b>n tìm, n</b>

<b>ế</b>

<b>u khơng tìm </b>


<b>th</b>

<b>ấ</b>

<b>y thì Loc =0.</b>



<b>Function Binary_search(L,R,x)</b>


<b>1. If L>R then Loc:=0</b>



<b>Else </b>



<b>begin m:=(L+R) div 2;</b>


<b>If x<k[m] then </b>



<b>Loc:=Binary_search(L,m-1,x)</b>


<b>Else If x>k[m] then </b>



<b>Loc:=Binary_search(m+1,R,x)</b>


<b>Else Loc:=m;</b>




<b>end;</b>



</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>

<b>4.2. </b>

<b>Đ</b>

<b>ánh giá</b>



<b>Phép tính tích c</b>

<b>ự</b>

<b>c là phép so sánh</b>

<b>L<= r</b>



<b>C</b>

<b><sub>min</sub></b>

<b>=1</b>



<b>Ng</b>

<b>ườ</b>

<b>i ta </b>

<b>đ</b>

<b>ã tính </b>

<b>đượ</b>

<b>c </b>


<b>C</b>

<b><sub>max</sub></b>

<b>=[log</b>

<b><sub>2</sub></b>

<b>n ]</b>



<b>T</b>

<b><sub>tb</sub></b>

<b>=O(log</b>

<b><sub>2</sub></b>

<b>n )</b>



<b>Tìm ki</b>

<b>ế</b>

<b>m nh</b>

<b>ị</b>

<b> phân t</b>

<b>ố</b>

<b>t h</b>

<b>ơ</b>

<b>n tìm ki</b>

<b>ế</b>

<b>m tu</b>

<b>ầ</b>

<b>n t</b>

<b>ự</b>



<b>nh</b>

<b>ư</b>

<b>ng dãy k ph</b>

<b>ả</b>

<b>i </b>

<b>đượ</b>

<b>c s</b>

<b>ắ</b>

<b>p.</b>



Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.31


<b>5. Cây nh</b>

<b>ị</b>

<b> phân tìm ki</b>

<b>ế</b>

<b>m</b>



<b>5.1. </b>

<b>Đị</b>

<b>nh ngh</b>

<b>ĩ</b>

<b>a cây nh</b>

<b>ị</b>

<b> phân tìm ki</b>

<b>ế</b>

<b>m</b>



<b>* Cây nh</b>

<b>ị</b>

<b> phân tìm ki</b>

<b>ế</b>

<b>m </b>

<b>ứ</b>

<b>ng v</b>

<b>ớ</b>

<b>i n khoá k</b>

<b><sub>1</sub></b>

<b>, k</b>

<b><sub>2</sub></b>

<b>, ..., k</b>

<b><sub>n</sub></b>

<b>là m</b>

<b>ộ</b>

<b>t </b>


<b>cây nh</b>

<b>ị</b>

<b> phân mà m</b>

<b>ỗ</b>

<b>i nút c</b>

<b>ủ</b>

<b>a nó </b>

<b>đề</b>

<b>u </b>

<b>đượ</b>

<b>c </b>

<b>đị</b>

<b>nh danh b</b>

<b>ở</b>

<b>i </b>


<b>m</b>

<b>ộ</b>

<b>t khố nào </b>

<b>đ</b>

<b>ó trong các khố </b>

<b>đ</b>

<b>ã cho. </b>

<b>Đố</b>

<b>i v</b>

<b>ớ</b>

<b>i m</b>

<b>ọ</b>

<b>i nút </b>


<b>trên cây tính ch</b>

<b>ấ</b>

<b>t sau </b>

<b>đ</b>

<b>ây ln </b>

<b>đượ</b>

<b>c tho</b>

<b>ả</b>

<b> mãn:</b>



<b>- M</b>

<b>ọ</b>

<b>i khố thu</b>

<b>ộ</b>

<b>c cây con trái c</b>

<b>ủ</b>

<b>a m</b>

<b>ộ</b>

<b>t nút </b>

<b>đề</b>

<b>u nh</b>

<b>ỏ</b>

<b>h</b>

<b>ơ</b>

<b>n </b>


<b>khoá </b>

<b>ứ</b>

<b>ng v</b>

<b>ớ</b>

<b>i nút </b>

<b>đ</b>

<b>ó.</b>




<b>- M</b>

<b>ọ</b>

<b>i khố thu</b>

<b>ộ</b>

<b>c cây con ph</b>

<b>ả</b>

<b>i c</b>

<b>ủ</b>

<b>a m</b>

<b>ộ</b>

<b>t nút </b>

<b>đề</b>

<b>u l</b>

<b>ớ</b>

<b>n h</b>

<b>ơ</b>

<b>n</b>


<b>khố </b>

<b>ứ</b>

<b>ng v</b>

<b>ớ</b>

<b>i nút </b>

<b>đ</b>

<b>ó.</b>



<b>Chú ý : Khố là s</b>

<b>ố</b>

<b> thì so sánh s</b>

<b>ố</b>

<b> bình th</b>

<b>ườ</b>

<b>ng, Khố là ch</b>

<b>ữ</b>



</div>
<span class='text_page_counter'>(17)</span><div class='page_container' data-page=17>

Ngơ Cơng Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 03 3.33


<b>5.2. Gi</b>

<b>ả</b>

<b>i thu</b>

<b>ậ</b>

<b>t tìm ki</b>

<b>ế</b>

<b>m</b>



*

Đố

i v

i m

t cây nh

phân

để

tìm ki

ế

m xem m

t khố


x nào

đ

ó có trên cây

đ

ó khơng? Ta có th

th

c hi

n


nh

ư

sau:



So sánh x v

i khoá

g

c và m

t trong 4 tình hu

ng


sau

đ

ây s

xu

t hi

n:



1- Khơng có g

c cây ( cây r

ng): X khơng có trên cây,



</div>
<span class='text_page_counter'>(18)</span><div class='page_container' data-page=18>

<b>2- X trùng v</b>

<b>ớ</b>

<b>i khố </b>

<b>ở</b>

<b> g</b>

<b>ố</b>

<b>c: Phép tìm ki</b>

<b>ế</b>

<b>m </b>

<b>đượ</b>

<b>c </b>


<b>tho</b>

<b>ả</b>

<b> mãn.</b>



<b>3- X nh</b>

<b>ỏ</b>

<b> h</b>

<b>ơ</b>

<b>n khố </b>

<b>ở</b>

<b> g</b>

<b>ố</b>

<b>c: Tìm ki</b>

<b>ế</b>

<b>m </b>

<b>đượ</b>

<b>c th</b>

<b>ự</b>

<b>c hi</b>

<b>ệ</b>

<b>n </b>


<b>ti</b>

<b>ế</b>

<b>p t</b>

<b>ụ</b>

<b>c b</b>

<b>ằ</b>

<b>ng cách xét cây con trái c</b>

<b>ủ</b>

<b>a g</b>

<b>ố</b>

<b>c v</b>

<b>ớ</b>

<b>i cách </b>


<b>làm t</b>

<b>ươ</b>

<b>ng t</b>

<b>ự</b>

<b>.</b>



<b>4- X l</b>

<b>ớ</b>

<b>n h</b>

<b>ơ</b>

<b>n khoá </b>

<b>ở</b>

<b> g</b>

<b>ố</b>

<b>c: Tìm ki</b>

<b>ế</b>

<b>m </b>

<b>đượ</b>

<b>c th</b>

<b>ự</b>

<b>c hi</b>

<b>ệ</b>

<b>n </b>


<b>ti</b>

<b>ế</b>

<b>p t</b>

<b>ụ</b>

<b>c b</b>

<b>ằ</b>

<b>ng cách xét cây con ph</b>

<b>ả</b>

<b>i c</b>

<b>ủ</b>

<b>a g</b>

<b>ố</b>

<b>c v</b>

<b>ớ</b>

<b>i </b>



<b>cách làm t</b>

<b>ươ</b>

<b>ng t</b>

<b>ự</b>

<b>.</b>




<b>Ví d</b>

<b>ụ</b>

<b> Tìm x=28 trên cây a: So x và 35, x<35 nên ta </b>


<b>tìm trên cây con trái c</b>

<b>ủ</b>

<b>a 35</b>



</div>
<span class='text_page_counter'>(19)</span><div class='page_container' data-page=19></div>

<!--links-->

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×