ch ng3 - wordpress.com ng3 phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 n idung 1.tìm...

52
1 Ch ng 3 Phântích ph c t p m t s gi i thu t trên c u trúc d li u

Upload: truongminh

Post on 29-Nov-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

1

Ch ng 3

Phân tích ph c t p m t sgi i thu t trên c u trúc d li u

Page 2: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

2

N i dung

1. Tìm ki m tu n t trên danh sách liên k t2. Cây tìm ki m nh phân3. Hàng i có u tiên và heapsort4. K thu t b m

Page 3: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

3

1.Tìm ki m tu n t trên danh sách liên k t

Tìm ki m tu n t (sequential search) có th c th chi n thông qua vi c dùng danh sách liên k t (linkedlist) bi u di n các m u tin trong t p tin.

M t l i i m: d làm cho danh sách liên k t có th tmà giúp cho vi c tìm ki m nhanh chóng h n.

Page 4: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

4

3 4 7 21

Z…

Tìm ki m tu n t trên m t danh sách liên k t cóth t .Qui c: z là nút gi trong danh sách liên k t.

type link = nodenode = record key, info: integer;next: link

end;var head, t, z: link;

i: integer;

Page 5: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

5

Gi i thu t tìm ki m tu n t trên danh sáchliên k t

procedure initialize;begin

new(z); z.next: = z;new(head); head.next:= z

end;

function listsearch (v: integer; t: link): link;begin

z.key: = v;repeat t:= t.next until v < = t.key;if v = t.key then listsearch:= telse listsearch: = z

end;

Page 6: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

6

Gi i thu t tìm ki m tu n t trên danh sách liênk t (tt.)

function listinsert (v: integer; t: link): link;begin

z.key: = v;while t.next.key < v do t: = t.next;new(x); x.next: = t.key; t.next: = x;x.key: = v;listinsert: = x;

end;

Tính ch t: Tìm ki m tu n t trên danh sách liên k t cóth t dùng trung bình kho ng N/2 thao tác so sánh cho cs tìm ki m thành công hay không thành.

Page 7: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

7

Ch ng minh:

V i s tìm ki m thành công, n u gi s r ng m i m u tintrong danh sách liên k t có xác xu t b ng nhau (1/N)

c tìm th y, s l n so sánh trung bình s là:

(1 + 2+ …+ N)/N = N(N+1)/(2N) = (N+1)/2.

V i s tìm ki m không thành công, n u gi s r ng m i m utin trong danh sách liên k t hay nút k t thúc z có xác xu tb ng nhau (1/(N+1)) c tìm th y v trí sau cùng c aquá trình tìm ki m, s l n so sánh trung bình s là:

(1 + 2+ …+ (N+1))/(N+1) = (N+2)(N+1)/(2(N+1)) = (N+2)/2.

Page 8: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

8

2.Cây tìm ki m nh phân

10

13

7

5

192

Trong m t cây tìm ki m nh phân (binary search tree),t t c các m u tin v i khóa nh h n khóa t i nút ang xétthì cây con bên trái c a nút vàcác m u tin v i khóa l n h n hay b ng khóa t i nút angxét thì cây con bên ph i c a nút.

Page 9: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

9

Kh i t o cây nh phân

procedure tree_init;begin

new(z); z.1: = z; z.r: = z;new(head); head.key: = 0; head.r: = z;

end;

M t cây r ng c bi u di n b ng cây có contr bên ph i ch n nút gi z.

Page 10: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

10

Tác v thêm vàoThêm m t nút vào trong cây, ta th c hi n m t s tìmki m (không thành công) nút y trên cây, r i g n nút

y vào v trí ng v i nút gi z t i i m mà quá trình tìmki m k t thúc.

A

A R

S

C

E

H

Hình v minh h avi c thêm nút P vàocây nh phân.

Page 11: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

11

Tác v thêm vào (tt.)

;

procedure tree_insert (v: integer; x: link): link;var p: link;begin

repeatp: = x;if v < x.key then x: = x.1 else x: = x.r

until x = z;new(x); x.key: = v;x.1: = z; x.r: = z; /* create a new node */if v < p. key then p.1: = x /* p denotes the parent of

the new node */else p.r: = x;tree p.r: = x

end

Page 12: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

12

In ra cây nh phânprocedure treeprint(x: kink)begin

if x <> z thenbegin

treeprint (x.1);printnode (x);treeprint (x.r)

endend;

Vì m t cây nh phân di n t m t t p tin có th t , vi c in racác tr khóa trong cây theo m t cách úng n s em l im t danh sách các khóa có th t .

Page 13: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

13

Tác v tìm ki m

type link = node;node = record key, info: integer;l, r: link end;

var t, head, z: link;

function treesearch (v: integer, x: link): link; /* search the node withthe key v in the binary search tree x */

beginwhile v <> x. key and x <> z dobegin

if v < x.key then x: = x.1else x: = x.r

end;treesearch: = x

end;

Page 14: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

14

Tính ch t c a s tìm ki m trên cây nh phân

Tính ch t: M t tác v thêm vào hay tìm ki m trên m t cây nhphân òi h i ch ng 2lnN so sánh trên m t cây c t o ra t Ntr khóa ng u nhiên.

Ch ng minh:Chi u dài l i i c a 1 nút: là s c nh c n duy t qua t nút

y v nút r +1.

i v i m i nút trên cây nh phân, s so sánh c dùngcho m t s tìm ki m nút y thành công chính là chi u dàil i i c a nút y.

T ng t t c chi u dài l i i c a m i nút trên cây nh phânc g i là chi u dài l i i c a cây nh phân.

Page 15: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

15

Ch ng minh (tt.)

Khi chia chi u dài l i i toàn cây v i N, ta s c s so sánhtrung bình i v i m t s tìm ki m thành công trên cây.Nh ng n u CN bi u th chi u dài l i i trung bình c a toàncây, ta có m t h th c truy h i sau ây, v i C1 = 1

N

1

(Ck-1 + CN-k)CN = N +

S h ng N là do s ki n nút r óng góp 1 vào chi u dài l i ic a m i nút.S h ng th hai là do s ki n khóa t i nút r có xác xu t b ngnhau tr thành ph n t l n th k trong cây, v i hai cây conl n l t ch a k-1 nút và N-k.

Page 16: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

16

Ch ng minh (tt.)k

k-1N-k

H th c truy h i này r t gi ng h th c truy h i khi phântích Quicksort, và nó ã c gi i cùng m t cách al i cùng m t k t qu .Do ó chi u dài trung bình c a cây N nút làCN 2N lnN.Suy ra chi u dài trung bình c a m t nút trong cây là2lnN.

M t tác v tìm ki m hay thêm vào òi h i trung bình2lnN so sánh trên m t cây g m N nút.

Page 17: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

17

ph c t p trong tr òng h p x u nh t

Tính ch t: Trong tr ng h p x u nh t, m t tác v tìmki m trên cây nh phân g m N khóa có th c n N sosánh.Tr ng h p x u nh t x y ra khi cây nh phân b suy bi nthành m t danh sách liên k t.Tác v xóa

Vi c xoá m t nút r t d n u nút y không có nút con hay chcó m t nút con.

xóa m t nút có hai con thì khá ph c t p: ta ph i thayth nó v i nút có tr khóa cao nh t k ti p (t c nút t n cùngtrái c a cây con bên ph i).

Page 18: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

18

Thí d : Tác vxoá

E

C

R

H

L

N

M F

A

R

C N

M

A

P

H

L

Page 19: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

19

The following procedure is to delete the node t from the binarytree x.

procedure treedelete (t, x: link);var p, c: link;begin

repeat /* search for the node t in the tree */p: = x;

if t.key < z. key then x: = x.1else x: = x.runtil x = t;if t.r = z then /* the node t has no right child */

x: = x.1 /* replace the deleted node with the left child oft */else if t.r.1 = then /* the right chile of t has no left child */begin x: = x.r; x.1: = t.1 end /* replace the deleted node with its right child */

Page 20: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

20

elsebegin

e: = x.r;while c.1.1 <> z do c: = x.1; /* find the leftmost node

of the right subtree */x: = c.1; /* x denotes the node that will replace the

deleted one */c.1 = x.r; /* connect c, the parent of x to the right

child of x */x.1: = t.1; x.r: = t.r /* connect x: the children of the

deleted node t */end;if t.key < p.key then p.1: = x /* connect x to the parentof the deleted node */else p.r: = x;

end;

Page 21: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

21

3. Hàng i có u tiên và gi i thu t s pth t HEAPSORT

M t 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+ xóa b ph n t l n nh t

c g i là hàng i có u tiên (a priority-queue).

Hàng i có u tiên khác v i hàng i thông th ngi 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ênl n nh t trong hàng i.

Page 22: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

22

Hàng i có u tiên (tt.)

Chúng ta mu n xây d ng và duy trì m t c u trúc d li u ch a nh ngm u tin có tr khóa s ( u tiên) và có h tr m t s trong nh ngtác v sau:- t o m t hàng i có th t u tiên g m N ph n t .- thêm (insert ) m t ph n t m i vào.- xóa b ph n t l n nh t ra kh i hàng i.- thay th ph n t l n nh t v i m t ph n t m i

- thay i u tiên c a m t ph n t .- Xóa b m t ph n t b t k nào ó.- Ghép hai hàng i có u tiên thành m t hàng i có u tiênl n h n.

Page 23: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

23

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 ut ng ã nói ch ng 1. 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.

Page 24: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

24

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 ihàng i có u tiên s ch a các m u tin trong m t m ngsao 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 trkhó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 utrúc cây v i nh ng ng n i m i khóa xu ng hai khóanh 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 ý r ng tr khóa l nnh t nút r .

Page 25: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

25

Thí d : Heap d i d ng cây nh phân

X

T O

G

A

SM

R AE

N

I

Page 26: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

26

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 ngcách t nút r t i v trí 1 c a m ng, các con c a nó t i v trí 2và 3, các nút các m c k ti p các v trí 4, 5, 6 và 7, v.v..

k 1 2 3 4 5 6 7 8 9 10 11 12a[k] 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í 2jvà 2j+1.

Page 27: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

27

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 nheap. c bi t, ph n t có khóa l n nh t luôn vtrí 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 theom 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 ó.

Page 28: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

28

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àoph n t m i và xóa b ph n t l n nh t ra kh i heap.

Tác v này s làm t ng kích th c c a heap lên thêmm 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 cb ng cách hoán i ph n t m i v i cha c a nó. i unà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 .

1. Tác v thêm vào (insert)

Page 29: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

29

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 dobegin a[k]:= a[k div 2 ]; k:=k div 2 end;

a[k]:= vend;procedure insert(v:integer);begin

N:= N+1; a[N] := v ; unheap(N)end;

Page 30: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

30

Thêm (P) vào heap

X

T P

G

A

SO

R AE

N

I M

Page 31: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

31

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à cthay th b ng ph n t mà ã v trí a[N]. N u tr khóa t inú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 angnú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 khinút k l n h n hai nút con c a nó.

Page 32: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

32

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 dobegin

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]: =vend;

function remove: integer;begin

remove := a[1];a[1] := a[N]; N := N-1;downheap(1);

end;

Page 33: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

33

Thí d v tác v xóa

T

S P

G

A

RO

C AE

N

I M

Tr c khi xóa

Page 34: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

34

Sau khi xóa

S

R P

G

A

MO

C AE

N

I

Page 35: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

35

Tính ch t 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 dòi h i ít h n 2lgN so sánh khith 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 anút r cho n cu i heap mà bao g m ít h n lgN ph n tv i m t heap g m N ph n t .

Th a s 2 là do tác v downheap mà c n hai thao tác sosánh trong vòng l p trong và các thao tác khác ch òi h ilgN l n so sánh.

Page 36: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

36

Gi i thu t heapsort

Ý t ng: Gi i thu t bao g m 2 công tác (1) t o m t heapch a nh ng ph n t c n s p th t và (2) l n l t l ychúng ra kh i heap theo m t th t .

M : kích th c c a heapN: 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 thearray a */

Page 37: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

37

S p th t dãy s 5, 3, 1, 9, 8, 2, 11 b ng heapsort

11

8 9

3 5 1 2

5

3 1

9

5

3

1

9

8

3

1

5

9

8

3

2

5 1

Page 38: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

38

9

8

3

2

5 1 11

8

5

3

2

1

5

3

1

2

3

1 2

2

1

1

9 11

8 911

58 9

11

3

58

9 11

2 3

5 8 9 11

Page 39: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

39

ph c t p c a heap sort

Tính ch t: Heapsort dùng ít h n 3MlgM l n sosá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 heapsortvà tính ch t c a hai tác v thêm vào/xóa b trênheap.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

Page 40: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

40

4.K thu t b m

K thu t b m (Hashing) là m t ph ng pháp tìm ki m cácm u tin trong m t b ng b ng các bi n i các tr khóa thànhnh ng a ch (v trí) trong b ng.

B c u là t o m t hàm b m (hash function ) mà chuy n ikhóa tìm ki m thành m t a ch trong b ng.

M t cách lý t ng, nh ng tr khóa khác nhau nên ánh xthành nh ng a ch khác nhau, nh ng không có hàm b m nàolà hoàn h o và do ó hai hay nhi u khóa khác nhau có th b mthành cùng m t v trí b ng.

B c k ti p là quá trình gi i quy t ng (collision-resolution) mà i phó v i tr ng h p hai hay nhi u khóakhác nhau có th b m thành cùng m t v trí b ng.

Page 41: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

41

Hàm b m

Hàm b m là hàm bi n th các tr khóa thành nh ng snguyên trong t m [0 .. M-1], v i M là s m c tin mà có th

c ch a trong m t s l ng ô nh có s n.

M t hàm b m lý t ng là hàm b m mà- d tính toán- g n gi ng nh m t hàm “ng u nhiêm”.

M t ph ng pháp thông th ng nh t b m là cho M làm t s nguyên t và v i m i tr khóa k, ta tính

h(k): = k mod M

y là m t ph ng pháp tr c ti p mà d tính và r i kháu các tr khóa ra trên b ng b m.

Page 42: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

42

Ví dKích th c b ng b m = 101. Gi s m i tr khóa g m 4 kýt . N u khóa (“AKEY”) c mã hóa thành m t mã g m 5bit, ta có th coi khóa y là m t tràng s nh ph n nh sau:

00001 01011 00101 110011 × 323 + 11 x 322 + 5 x 321 + 25 x 320

Mà t ng ng v i tr s th p phân 44217 .Vì, 44217 mod 101 = 80, nh v y khóa “AKEY” ánh xthành 80.

T i sao kích th c M c a b ng b m c n ph i là s nguyênt ? Lý do là vì chúng ta mu n t t c m i ký t trong khóa

u tham gia vào vi c chuy n i (b m) thành v trí.

Trong thí d trên, n u M = 32, hàm b m c a b t k khóanào c ng ch b m m i ký t sau cùng!

Page 43: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

43

B m m t khóa dài

N u khóa là m t dòng ký t khá dài thì chúng ta v n có thtính b ng m t hàm b m mà bi n i khóa t ng ký t m t.K thu t ó th hi n b ng gi i thu t l p nh sau:

h:= key[1];for j:= 2 to key_size dobegin

h:= ((h*32) + key[j]) mod M; /*25 is 32, used for5-bit code */

end;

Page 44: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

44

Ph ng pháp gi i quy t ng : Xâu riêng(Separate chaining)Trong k thu t b m, chúng ta ph i quy t nh dùng cáchnào gi i quy t v n hai khóa khác nhau b m thànhcùng m t giá tr a ch .M t ph ng pháp n gi n nh t: t o cho m i v trí trongb ng b m m t danh sách liên k t (xâu riêng) xâu t t cnh ng tr khóa mà b m vào cùng v trí ó.Khi các tr khóa c xâu trên danh sách liên k t, chúngnên c s p cho có th t .

type link = node;node = record key, info: integer;

next: link end;var heads: array [0..M] of link; t, x: link;

Page 45: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

45

Xâu riêng (tt.)Danh sách liên k t cho t ng v trí trong b ng b m c kh it o nh gi i thu t sau:

procedure initialize;var i: integer;begin

new (z); z.next: = z;for i: = 0 to M-1 dobegin

new (heads [i]); heads [i].next: = zend;

end;Trong hình v sau trình bày vi c a vào b ng b m m t dãycác ký t ch .

Page 46: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

46

Key: A S E A R C H I N G E X A M P L EHash: 1 8 5 1 7 3 8 9 3 7 5 2 1 2 5 1 5

A

A

A

L

M

X

C

N E

E

E

P

G

R

H

S

I

0 1 2 3 4 5 6 7 8 9 10

Page 47: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

47

Ph ng pháp gi i quy t ng : Dò tuy n tính

Ph ng pháp xâu riêng có th áp d ng trong tr ng h pM < N (M: kích th c b ng b m, N: s tr khóa có th có)

Có m t s ph ng pháp l u N m u tin trong b ng b m cókích th c M mà M > N, nh vào nh ng v trí tr ng trongb ng b m gi i quy t ng . Nh ng ph ng pháp nhv y c g i là k thu t b m a ch m (open addressinghashing).

Ph ng pháp a ch m n gi n nh t là ph ng phápdò tuy n tính ( linear probing): m i khi có ng thì dò nv trí k ti p trong b ng b m, t c là so sánh tr khóa c n tìmv i tr khóa t i m u tin.

Page 48: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

48

Dò tuy n tính (tt.)

Có ba k t qu có th có c a s th m dò:- N u hai tr khóa kh p nhau thì s tìm ki m k t thúc thànhcông.- N u không th y có m u tin t i v trí, thì s tìm ki m k t thúcth t b i.- Ng c l i, dò tìm t i v trí k ti p, ti p t c nh th cho n khitìm th y tr khóa kh p nhau ho c là m t v trí r ng.

Page 49: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

49

Gi i thu t dò tuy n tínhprocedure hash_initialize;var i: integer;begin

for i: = 0 to M do a[i].key:= maxint; /* maxint means an emptyposition */end;function hash_search(v: integer): integer;var x: integer;begin

x: = h(v);while a[x].key <> maxit and a[x].key <> v dox: = (x+1) mod M;if a[x].key: = v then hash_search: = xelse hash_search: = M;

end;

Page 50: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

50

Dò tuy n tính (tt.)

function hash_insert (v: integer): integer;var x: intergerbegin

x:= h(v);while a[x].key <> maxint do /* collision */x: = (x+1) mod M;a[x].key: = v; hash-insert: = x;

end;

Hình v sau trình bày vi c a vào b ng b m m t dãy các kýt ch : A S E A R C H I N G E X A M P L E

Page 51: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

51

Key: A S E A R C H I N G E X A M P L EHash: 1 0 5 1 18 3 8 9 14 7 5 5 1 13 16 12 5

R

P

N

M

L

E

X

I

H

G

E

E

A

C

A

A

S

Page 52: Ch ng3 - WordPress.com ng3 Phântích ph c t p m t s gi ithu ttrên c utrúc d li u 2 N idung 1.Tìm ki m tu n t trên danhsáchliên k t 2. Cây tìm ki mnh phân 3. Hàng icó u

52

Tính ch t c a dò tuy n tính

Kích th c b ng b m dùng cho k thu t dò tuy n tínhth ng l n h n b ng b m dùng xâu riêng, vì ta ph i cóM > N, nh ng t ng ch b nh s ít h n vì không c n l ucác con tr .

Tính ch t. Dò tuy n tính s d ng trung bình ít h n 5 b c dòi v i m t b ng b m y d i 2/3.

Công th c chính xác v s l n dò trung bình c n cho m t stìm ki m không thành công là:

½ + 1/(2*(1- )2) v i = N/M

N u = 2/3, ta c k t qu 5 b c dò.