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
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 4Qui 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 5Gi i thu t tìm ki m tu n t trên danh s ch
repeat 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;
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
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+ …+ (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 xét
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
xét 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 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 14Tí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 N
tr khóa ng u nhiên
Ch ng minh:
Chi u dài l i i c a út: là s c nh c n duy t qua t nút
y v nút r
i v i m i nút trên cây 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 chính là 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 trên cây nh phân
c g i là chi u dài l i i c a cây nh phân
Trang 15Ch 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àn
cây, ta có m t h th c truy h i sau ây, v i C1 = 1
∑N1
l 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
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 ý r ng tr khóa l n
nh t nút r
Trang 25Thí d : Heap d i d ng cây nh phân
Trang 28C 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ào
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 30Thêm P ào heap
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à ã 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
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 vòng l p trong và các thao tác khác ch òi 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 39ph c t p c a heap sort
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
Trang 42Ví d
Kích th c b ng b m = 101 Gi s m i tr khóa g m 4 ký
t N u khó “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:
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 ký t sau c ng!
Trang 43m 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:
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 : Dò 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 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 trong
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