Chương 3: Phân tích độ phức tạp một số giải thuật trên cấu trúc dữ liệu pps

52 405 3
Chương 3: Phân tích độ phức tạp một số giải thuật trên cấu trúc dữ liệu pps

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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

Ngày đăng: 05/08/2014, 20:21

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan