1. Trang chủ
  2. » Công Nghệ Thông Tin

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

52 13 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 52
Dung lượng 1,02 MB

Nội dung

Tìm kiếm tuần tự có thể được thực hiện thông qua việc dùng danh sách liên kết biểu diễn các mẫu tin trong tập tin. Một lợi điểm: Để làm cho danh sách liên kết mà giúp việc cho việc tìm kiếm nhanh chóng hơn.

Ch ng Ph n t#ch ph c t p m t s gi i thu t tr%n c u tr'c d li u N i dung T)m ki m tu n t tr%n danh s ch li%n k t C y t)m ki m nh ph n u ti%n v, heapsort H,ng i c4 K thu t b m 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 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 tr%n m t danh s ch li%n k t cth t Qui c: z l, 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 tr%n 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 tr%n 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 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 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+ 1+ 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 qu+ tr)nh t)m ki m, s l n so s+nh trung b)nh s l,: (1 + 2+ 1+ (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 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 x2t th) c y 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 ang x2t th) c y b%n ph i c a n't 10 13 19 Kh i t o c y nh ph n M t c y r ng tr b%n ph i ch c bi u di n b ng c y 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 tr"n 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 c y 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 tr%n n,y xu t ph t t gi i thu t heapsort v, t#nh ch t c a hai t c v th%m v,o/x a b tr%n heap V5ng for th nh t t n MlgM l n so s+nh V5ng 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 l, 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 l, 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 n,o hai hay nhi u kh a kh c c th b m l, ho,n h o v, th,nh c ng m t v tr# b ng c k ti p l, 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 l, 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 l, 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 l6 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 tr%n 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 k6 c m3 h-a th,nh m t m3 g m t N u kh- :AKEY; bit, ta c- th coi kh-a y l, 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 l, s nguy%n t ? L6 l, v) ch'ng ta mu n t t c m i k6 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 n,o c ng ch b m m i k6 t sau c ng! 42 m m t kh-a d,i N u kh-a l, m t d5ng k6 t kh+ d,i th) ch'ng ta v n c- th t#nh b ng m t h,m b m m, bi n i kh-a t ng k6 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, ch'ng ta ph i quy t nh d ng c+ch gi i quy t v n hai kh-a kh+c b m th,nh n,o 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# u ri%n x ut tc b ng b m m t danh s+ch li%n k t nh ng tr kh-a m, b m v,o c ng v tr# - c x u tr%n danh s+ch li%n k t, ch'ng Khi c+c 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 k6 t ch a v,o b ng b m m t d3y 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 : D5 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 cC- m t s ph ng ph+p l u N m u tin b ng b m ck#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 l, k thu t b m a ch m open addressing hashing Ph ng ph+p a ch m n gi n nh t l, ph ng ph+p d/ n t1nh linear probing : m i c- ng th) d5 n v tr# k ti p b ng b m, t c l, so s+nh tr kh-a c n t)m v i tr kh-a t i m u tin 47 D5 n t#nh C- ba k t qu c- th c- c a s th m d5: - N u hai tr kh-a kh p th) 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#, th) s t)m ki m k t th'c th t b i - Ng c l i, d5 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 l, m t v tr# r ng 48 Gi i thu t d5 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 D5 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 d3y c c k6 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 d5 n t#nh K#ch th c b ng b m d ng cho k thu t d5 n t#nh th ng l n h n b ng b m d ng x u ri%ng, v) ta ph i cM > N, nh ng t ng ch b nh s #t h n v) kh/ng c n l u c+c tr T#nh ch t D/ n t1nh s d ng trung b nh 1t h n i v i m t b ng b m y d i c d/ C/ng th c ch#nh x+c v s l n d5 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 d5 52

Ngày đăng: 09/05/2021, 22:00

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w