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.
Trang 1Ch 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
Trang 31.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 trong 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.
Trang 43 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 = node
node = record key, info: integer;
next: link
end;
var head, t, z: link;
i: integer;
Trang 5repeat t:= t.next until v < = t.key;
if v = t.key then listsearch:= t
else listsearch: = z
end;
Trang 6Gi i thu t t)m ki m tu n t tr%n danh s ch li%n
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;
Trang 7b ng nhau (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.
Trang 8Trong 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 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 ang
x2t th) c y con b%n ph i c a n't
Trang 11x.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
Trang 12m t danh s+ch c+c kh-a c- th t
Trang 13T 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 with
the key v in the binary search tree x */
Trang 15l n l t ch a k-1 n't v, N-k.
Trang 18L
Trang 19The following procedure is to delete the node t from the binarytree x.
procedure treedelete (t, x: link);
if t.r = z then /* the node t has no right child */
x: = x.1 /* replace the deleted node with the left child of
t */
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 */
Trang 20begin
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
if t.key < p.key then p.1: = x /* connect x to the parent
of the deleted node */
else p.r: = x;
end;
Trang 23Thi c ng h,ng i c- u ti%n
c-u ti%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
Trang 24C+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 6 r ng tr kh-a l n
nh t n't r
Trang 29T 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 do begin a[k]:= a[k div 2 ]; k:=k div 2 end;
a[k]:= v end;
procedure insert(v:integer);
begin
N:= N+1; a[N] := v ; unheap(N) end;
Trang 31T 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 c a[1] s c x a b v, cthay th b ng ph n t m, 3 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 m3n
Trang 32a[1] := a[N]; N := N-1;
downheap(1);
end;
Trang 35Th a s 2 l, do t c v downheap m, c n hai thao t c so
s nh trong v5ng l p trong v, c+c thao t+c kh+c ch 5i h ilgN l n so s+nh
Trang 371
9 8
3
1 5
9 8
3
2
5 1
Trang 389 8
3
2
8 5
3
2 1
5 3
Trang 42V# d
K#ch th c b ng b m = 101 Gi s m i tr kh-a g m 4 k6
t N u kh- :AKEY; c m3 h-a th,nh m t m3 g m 5bit, ta c- th coi kh-a y l, m t tr,ng s nh ph n nh sau:
Trang 43m 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- tht#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:
Trang 44Ph ng ph p gi i quy t ng : X u ri%ng
Separate chainin
Trong k thu t b m, ch'ng ta ph i quy t nh d ng c+ch
n,o gi i quy t v n hai kh-a kh+c nhau b m th,nh
type link = node;
node = record key, info: integer;
next: link end;
var heads: array [0 M] of link; t, x: link;
Trang 46Key: A S E A R C H I N G E X A M P L E
Hash: 1 8 5 1 7 3 8 9 3 7 5 2 1 2 5 1 5
A A A L
M X
C
E
E P
G R
H S
I
Trang 47Ph ng ph p gi i quy t ng : D5 tuy n t#nh
Ph ng ph+p x u ri%ng c- th +p d ng trong tr ng h p
M < N M: k#ch th c b ng b m, N: s tr kh-a th
c-C- m t s ph ng ph+p l u N m u tin trong b ng b m k#ch th c M m, M > N, nh v,o nh ng v tr# tr ng trong
c-b ng c-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+pd/ tuy n t1nh linear probing : m i khi c- ng th) d5 n
v tr# k ti p trong 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
Trang 51Key: A S E A R C H I N G E X A M P L E
Hash: 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
Trang 52= 1/ 1- 2 v i = N/M
N u = 2/3, ta c k t qu 5 b c d5