Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 52 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
52
Dung lượng
1,02 MB
Nội dung
Ch ng Phân tích ph c t p m t s gi i thu t c u trúc d li u N i dung Tìm ki m tu n t danh s ch liên k t Cây tìm ki m nh phân u tiên heapsort Hàng i có K thu t b m 1.Tìm ki m tu n t danh s ch liên k t Tìm ki m tu n t sequential search) c th c th c hi n th ng qua vi c d ng danh s ch liên k t (linked list) bi u di n c c m u tin t p tin M t l i i m: d làm cho danh s ch liên k t có th t mà giúp cho vi c tìm ki m nhanh chóng h n Tìm ki m tu n t m t danh s ch liên k t có th t Qui c: z nút gi danh sách liên k t 21 Z … type link = ↑ node node = record key, info: integer; next: link end; var head, t, z: link; i: integer; Gi i thu t tìm ki m tu n t danh s ch liê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:= t else listsearch: = z end; Gi i thu t tìm ki m tu n t danh s ch liên k t t.) function listinsert (v: integer; t: link): link; begin z↑.key: = v; while t↑.next↑.key < v 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 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 c s tìm ki m thành cơng hay khơng thành Ch ng minh: V i s tìm ki m thành c ng, n u gi s r ng m i m u tin danh s ch liên k t có xác xu t b ng (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 u tin danh sách liên k t hay nút k t thúc z có xác xu t b ng (1/(N+1)) c tìm th y v trí sau c ng c a 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 2.Cây tìm ki m nh phân Trong m t tìm ki m nh phân binary search tree), t t c m u tin v i khóa nh h n khóa t i nút ang xét bên trái c a nút m u tin v i khóa l n h n hay b ng khóa t i nút ang xét bên ph i c a nút 10 13 19 Kh i t o nh phân M t r ng tr bên ph i ch c bi u di n b ng có n nút gi z procedure tree_init; begin new(z); z↑.1: = z; z↑.r: = z; new(head); head↑.key: = 0; head↑.r: = z; end; T c v thêm vào Thêm m t nút vào c y ta th c hi n m t s t m nút y c y, r i g n nút ki m kh ng thành c y vào v trí ng v i nút gi z t i i m mà qu trình tìm ki m k t thúc A S E A R C Hình v minh h a vi c thêm nút P vào nh phân H 10 8 5 11 11 11 8 11 3 9 11 11 38 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 xu t ph t t gi i thu t heapsort tính ch t c a hai t c v thêm vào/x a b 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 39 4.K thu t b m K thu t b m Hashin m t ph ng ph p tìm ki m c c m u tin m t b ng b ng c c bi n i c c tr kh a thành trí b ng nh ng a ch c u t o m t hàm b m hash function kh a t m ki m thành m t a ch b ng chuy n i M t c ch l t ng, nh ng tr kh a kh c nên nh x thành nh ng a ch kh c nhau, nh ng kh ng c hàm b m hai hay nhi u kh a kh c c th b m hoàn h o thành c ng m t v trí b ng c k ti p qu trình gi i quy t ng collisionresolution i ph v i tr ng h p hai hay nhi u kh a kh c c th b m thành c ng m t v trí b ng 40 Hàm b m Hàm b m hàm bi n th c c tr kh a thành nh ng s nguyên t m [0 M-1], v i M s m c tin mà có th c ch a m t s l ng nh có s n M t hàm b m lý t ng hàm b m mà - d tính tố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 cho M m t s nguyên t v i m i tr khóa k, ta tính h k = k mod M y m t ph ng pháp tr c ti p mà d tính r i u tr khóa b ng b m 41 Ví d Kích th c b ng b m = 101 Gi s m i tr khóa g m ký c mã hóa thành m t mã g m t N u khó “AKEY” bit, ta có th coi khóa y m t tràng s nh ph n nh sau: 00001 01011 00101 11001 × 323 x 322 x 321 x 320 ng v i tr s th p phân 44217 Mà t ng Vì, 44217 mod 101 = 80, nh v y khóa “AKEY” ánh x thành 80 T i kích th c M c a b ng b m c n ph i s nguyên t ? Lý mu n t t c m i ký t khóa u tham gia vào vi c chuy n i m thành v trí Trong thí d trên, n u M = 32, hàm b m c a b t k khóa c ng ch b m m i ký t sau c ng! 42 m m t khóa dài N u khóa m t dịng ký t dài v n có th tí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:= to key_size begin h:= ((h*32) + key[j]) mod M; /*25 is 32, used for 5-bit code */ end; 43 Ph ng ph p gi i quy t Separate chainin ng : Xâu riêng Trong k thu t b m, ph i quy t nh d ng cách gi i quy t v n hai khóa khác b m thành c 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í xâu t t c b ng b m m t danh sách liên k t âu riên nh ng tr khóa mà b m vào c ng v trí ó c xâu danh sách liên k t, chúng Khi tr khóa c s p cho có th t nên type link = ↑ node; node = record key, info: integer; next: link end; var heads: array [0 M] of link; t, x: link; 44 Xâu riêng tt Danh sách liên k t cho t ng v trí b ng b m t o nh gi i thu t sau: c kh i procedure initialize; var i: integer; begin new (z); z↑.next: = z; for i: = to M-1 begin new (heads [i]); heads [i]↑.next: = z end; end; Trong hình v sau trình bày vi c c c ký t ch a vào b ng b m m t dãy 45 Key: A S E A R C H I N G E X A M P L E Hash: 8 2 5 10 A M C E G H I A X N E R S A E L P 46 Ph ng ph p gi i quy t ng : Dị n tính Ph ng pháp xâu riêng có th áp d ng tr ng h p M < 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 b ng b m có kích th c M mà M > N, nh vào nh ng v trí tr ng b ng b m gi i quy t ng Nh ng ph ng pháp nh v y c g i k thu t b m a ch m open addressing hashing Ph ng pháp a ch m n gi n nh t ph ng pháp dị n tính linear probing : m i có ng dị n v trí k ti p b ng b m, t c so sánh tr khóa c n tìm v i tr khóa t i m u tin 47 Dị n tính Có ba k t qu có th có c a s th m dị: - N u hai tr khóa kh p s tìm ki m k t thúc thành cơng - N u khơng th y có m u tin t i v trí, s tìm ki m k t thúc th 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 tìm th y tr khóa kh p ho c m t v trí r ng 48 Gi i thu t dị n tính procedure hash_initialize; var i: integer; begin for i: = to M a[i].key:= maxint; /* maxint means an empty position */ end; function hash_search(v: integer): integer; var x: integer; begin x: = h(v); while a[x].key maxit and a[x].key v x: = (x+1) mod M; if a[x].key: = v then hash_search: = x else hash_search: = M; end; 49 Dị n tính tt function hash_insert (v: integer): integer; var x: interger begin x:= h(v); while a[x].key maxint /* 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 50 Key: A S E A R C H I N G E X A M P L E Hash: 18 14 5 13 16 12 S A A C A E E G H I X E L M N P R 51 Tính ch t c a dị n tính Kích th c b ng b m d ng cho k thu t dị n tính th ng l n h n b ng b m d ng xâu riêng, ta ph i có M > N, nh ng t ng ch b nh s h n khơng c n l u tr Tính ch t Dị n tính s d ng trung bình h n i v i m t b ng b m y d i c dò Cơng th c xác v s l n dị trung bình c n cho m t s tìm ki m khơng thành cơng là: ½ N u 1/ 1= 2/3, ta v i = N/M c k t qu b c dò 52 ... v i m i nút nh phân, s so sánh c d ng cho m t s tìm ki m nút y thành cơng chi u dài l 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 nh phân c g i chi u dài l i i c a nh phân 14 Ch ng minh... x; tree p↑.r: = x end 11 In nh phân procedure treeprint(x: kink) begin if x z then begin treeprint (x↑.1); printnode (x); treeprint (x↑.r) end end; Vì m t nh phân di n t m t t p tin có th t... else x: = x↑.r end; treesearch: = x end; 13 Tính ch t c a s tìm ki m nh phân Tính ch t: M t tác v thêm vào hay tìm ki m m t nh phân òi h i ch ng 2lnN so sánh m t c t o t N tr khóa ng u nhiên Ch ng