Professional Documents
Culture Documents
BI GING TM TT
Lt 2008
LI NI U
p ng nhu cu hc tp ca cc bn sinh vin, nht l sinh vin chuyn ngnh
cng ngh thng tin, Khoa Cng Ngh Thng Tin Trng i Hc Lt chng ti
tin hnh bin son cc gio trnh, bi ging chnh trong chng trnh hc
Ti liu ny c son theo cng chi tit mn Cu Trc D Liu V Thut Gii 2
ca Khoa Cng Ngh Thng Tin Trng i Hc Lt. Mc tiu ca n nhm gip cc
bn sinh vin chuyn ngnh c mt ti liu c ng dng lm ti liu hc tp.
Mc d rt c gng nhiu trong qu trnh bin son gio trnh, song khng khi cn
nhiu thiu st v hn ch. Rt mong nhn c s ng gp kin qu bu ca sinh
vin v cc bn c gio trnh ngy mt hon thin hn.
Lt, ngy 30 thng 06 nm 2008
Mc lc
Chng I: Cy ............................................................................................................................... 4
I. Cc thut ng c bn trn cy ................................................................................................ 4
1. nh ngha ......................................................................................................................... 4
2. Th t cc nt trong cy.................................................................................................... 5
3. Cc th t duyt cy quan trng........................................................................................ 6
4. Cy c nhn v cy biu thc ............................................................................................ 6
II. Cy nh phn (Binary Trees)................................................................................................... 8
1. nh ngha ......................................................................................................................... 8
2. Vi tnh cht ca cy nh phn........................................................................................... 9
3. Biu din cy nh phn ...................................................................................................... 9
4. Duyt cy nh phn ............................................................................................................ 9
5. Ci t cy nh phn ........................................................................................................ 10
IV. Cy tm kim nh phn (Binary Search Trees) .................................................................... 12
1. nh ngha ........................................................................................................................ 12
2. Ci t cy tm kim nh phn .......................................................................................... 13
V. Cy nh phn tm kim cn bng (Cy AVL) ....................................................................... 21
1. Cy nh phn cn bng hon ton..................................................................................... 21
2. Xy dng cy nh phn cn bng hon ton..................................................................... 21
3. Cy tm kim nh phn cn bng (cy AVL).................................................................... 22
Bi tp........................................................................................................................................ 32
Chng II: Th ....................................................................................................................... 35
I. Cc nh ngha ................................................................................................................... 35
III. Biu din th.................................................................................................................... 36
1. Biu din th bng ma trn k...................................................................................... 37
2. Biu din th bng danh sch cc nh k.................................................................... 38
IV. Cc php duyt th (traversals of Graph)........................................................................ 38
1. Duyt theo chiu su (Depth-first search) ........................................................................ 38
2. Duyt theo chiu rng (breadth-first search).................................................................... 40
V. Mt s bi ton trn th................................................................................................... 43
1. Bi ton tm ng i ngn nht t mt nh ca th .................................................. 43
2. Bi ton tm bao ng chuyn tip. .................................................................................. 47
3. Bi ton tm cy bao trm ti thiu (minimum-cost spanning tree)................................. 48
Bi tp........................................................................................................................................ 53
Chng III: Bng Bm ............................................................................................................... 55
I. Phng php bm................................................................................................................. 55
II. Cc hm bm ..................................................................................................................... 57
1. Phng php chia ............................................................................................................. 57
2. Phng php nhn ............................................................................................................ 57
3. Hm bm cho cc gi tr kho l xu k t ...................................................................... 58
III. Cc phng php gii quyt va chm.................................................................................. 59
1. Phng php nh a ch m........................................................................................... 59
2. Phng php to dy chuyn............................................................................................ 62
IV. Ci t bng bm a ch m............................................................................................... 63
V. Ci t bng bm dy chuyn.............................................................................................. 66
VI. Hiu qu ca cc phng php bm.................................................................................... 69
2
Bi tp........................................................................................................................................ 71
Chng IV: Mt s phng php thit k thut gii............................................................... 73
I. Phng php chia tr........................................................................................................ 73
1. M u.............................................................................................................................. 73
2. Tm kim nh phn............................................................................................................ 74
3. Bi ton Min-Max ............................................................................................................ 75
4. Thut ton QuickSort........................................................................................................ 76
II. Phng php quay lui ........................................................................................................... 79
1. M u.............................................................................................................................. 79
2. Bi ton lit k dy nh phn di n .............................................................................. 80
3. Bi ton lit k cc hon v............................................................................................... 80
4. Bi ton duyt th theo chiu su (DFS)...................................................................... 81
III. Phng php tham lam ........................................................................................................ 83
1. M u.............................................................................................................................. 83
2. Bi ton ngi du lch ...................................................................................................... 84
3. Thut ton Prim - Tm cy bao trm nh nht ................................................................. 86
4. Bi ton chic ti sch ...................................................................................................... 86
Bi tp........................................................................................................................................ 87
Ti liu tham kho....................................................................................................................... 89
Chng I
Cy
Mc tiu
Sau khi hc xong chng ny, sinh vin phi:
-
Lp trnh theo tng module (chng trnh con) v cch gi chng trnh con
.
Ni dung
Trong chng ny chng ta s nghin cu cc vn sau:
-
Cc thut ng c bn.
Cy nh phn
Cy tm kim nh phn
I. Cc thut ng c bn trn cy
Cy l mt tp hp cc phn t gi l nt (nodes) trong c mt nt c phn bit
gi l nt gc (root). Trn tp hp cc nt ny c mt quan h, gi l mi quan h cha
- con (parenthood), xc nh h thng cu trc trn cc nt. Mi nt, tr nt gc, c
duy nht mt nt cha. Mt nt c th c nhiu nt con hoc khng c nt con no.
Mi nt biu din mt phn t trong tp hp ang xt v n c th c mt kiu no
bt k, thng ta biu din nt bng mt k t, mt chui hoc mt s ghi trong vng
trn. Mi quan h cha con c biu din theo qui c nt cha dng trn nt con
dng di v c ni bi mt on thng. Mt cch hnh thc ta c th nh ngha
cy mt cch qui nh sau:
1. nh ngha
-
Gi s ta c n l mt nt n c v k cy T1,.., Tk vi cc nt gc tng ng l
n1,.., nk th c th xy dng mt cy mi bng cch cho nt n l cha ca cc nt
4
Cy rng th danh sch duyt cy l rng v n c coi l biu thc duyt tin
t, trung t, hu t ca cy.
tin t: A B C D E F H K L
trung t: C B E D F A K H L
hu t: C E F D B K L H A
cha mt record v thng tin ca sinh vin (m SV, h tn, ngy sinh, a ch,...) th
kho c th l m SV hoc h tn hoc ngy sinh tu theo gi tr no ta ang quan tm
n trong gii thut.
V d: Cy biu din biu thc (a+b)*(a-c) nh trong hnh I.4.
Khi chng ta duyt mt cy biu din mt biu thc ton hc v lit k nhn
ca cc nt theo th t duyt th ta c:
Biu thc dng tin t (prefix) tng ng vi php duyt tin t ca cy.
Biu thc dng trung t (infix) tng ng vi php duyt trung t ca cy.
Biu thc dng hu t (posfix) tng ng vi php duyt hu t ca cy.
Ch
-
Cc php ton trong biu thc ton hc c th c tnh giao hon nhng khi ta
biu din biu thc trn cy th phi tun th theo biu thc cho. V d biu
thc a+b, vi a,b l hai s nguyn th r rng a+b=b+a nhng hai cy biu din
cho hai biu thc ny l khc nhau (v cy c th t).
Hnh I.7: Hai cy c th t ging nhau nhng l hai cy nh phn khc nhau
Ch rng, trong cy nh phn, mt nt con ch c th l nt con tri hoc nt con
phi, nn c nhng cy c th t ging nhau nhng l hai cy nh phn khc nhau. V
d hnh I.7 cho thy hai cy c th t ging nhau nhng l hai cy nh phn khc
nhau. Nt 2 l nt con tri ca cy a/ nhng n l con phi trong cy b/. Tng t nt
5 l con phi trong cy a/ nhng n l con tri trong cy b/.
S nt mc i<=2i+1. Do s nt ti a ca n l 2h-1
4. Duyt cy nh phn
Ta c th p dng cc php duyt cy tng qut duyt cy nh phn. Tuy nhin v
cy nh phn l cu trc cy c bit nn cc php duyt cy nh phn cng n gin
hn. C ba cch duyt cy nh phn thng dng (xem kt hp vi hnh I.8):
-
HnhI.8
Ch rng danh sch duyt tin t, hu t ca cy nh phn trng vi danh sch duyt
tin t, hu t ca cy khi ta p dng php duyt cy tng qut. Nhng danh sch
duyt trung t th khc nhau.
V d
Hnh I.9
Cc danh sch duyt cy nh phn
Tin t:
ABDHIEJCFKLGM
ABDHIEJCFKLGM
Trung
t:
HDIBJEAKFLCGM
HDIBJEAKFLCMG
Hu t:
HIDJEBKLFMGCA
HIDJEBKLFMGCA
5. Ci t cy nh phn
Tng t cy tng qut, ta cng c th ci t cy nh phn bng con tr bng cch
thit k mi nt c hai con tr, mt con tr tr nt con tri, mt con tr tr nt con
phi, trng Data s cha nhn ca nt.
typedef TData;
typedef struct Tnode
{
TData Data;
TNode* left,right;
};
typedef TNode* TTree;
Vi cch khai bo nh trn ta c th thit k cc php ton c bn trn cy nh phn
nh sau :
To cy rng
Cy rng l mt cy l khng cha mt nt no c. Nh vy khi to cy rng ta ch
cn cho cy tr ti gi tr NULL.
void MakeNullTree(TTree *T)
10
{
(*T)=NULL;
}
Kim tra cy rng
int EmptyTree(TTree T)
{
return T==NULL;
}
Xc nh con tri ca mt nt
TTree LeftChild(TTree n)
{
if (n!=NULL) return n->left;
else return NULL;
}
Xc nh con phi ca mt nt
TTree RightChild(TTree n)
{
if (n!=NULL) return n->right;
else return NULL;
}
Kim tra nt l:
Nu nt l nt l th n khng c bt k mt con no c nn khi con tri v con
phi ca n cng bng NULL
int IsLeaf(TTree n)
{
if(n!=NULL)
return(LeftChild(n)==NULL)&&(RightChild(n)==NULL);
else return NULL;
}
Xc nh s nt ca cy
int nb_nodes(TTree T)
{
11
if(EmptyTree(T)) return 0;
else return 1+nb_nodes(LeftChild(T))+ nb_nodes(RightChild(T));
}
Cc th tc duyt cy: tin t, trung t, hu t
Th tc duyt tin t
void PreOrder(TTree T)
{
cout<<T->Data;
if (LeftChild(T)!=NULL) PreOrder(LeftChild(T));
if (RightChild(T)!=NULL)PreOrder(RightChild(T));
}
Th tc duyt trung t
void InOrder(TTree T)
{
if (LeftChild(T)=!NULL)InOrder(LeftChild(T));
cout<<T->data;
if (RightChild(T)!=NULL) InOrder(RightChild(T));
}
Th tc duyt hu t
void PosOrder(TTree T)
{
if (LeftChild(T)!=NULL) PosOrder(LeftChild(T));
if (RightChild(T)!=NULL)PosOrder(RightChild(T));
cout<<T->data;
}
IV. Cy tm kim nh phn (Binary Search Trees)
1. nh ngha
Cy tm kim nh phn (TKNP) l cy nh phn m kho ti mi nt cy ln hn kho
ca tt c cc nt thuc cy con bn tri v nh hn kho ca tt c cc nt thuc cy
con bn phi.
Lu : d liu lu tr ti mi nt c th rt phc tp nh l mt record chng hn,
trong trng hp ny kho ca nt c tnh da trn mt trng no , ta gi l
trng kho. Trng kho phi cha cc gi tr c th so snh c, tc l n phi ly
gi tr t mt tp hp c th t.
12
2. Ci t cy tm kim nh phn
Cy TKNP, trc ht, l mt cy nh phn. Do ta c th p dng cc cch ci t
nh trnh by trong phn cy nh phn. S khng c s khc bit no trong vic ci
t cu trc d liu cho cy TKNP so vi cy nh phn, nhng tt nhin, s c s khc
bit trong cc gii thut thao tc trn cy TKNP nh tm kim, thm hoc xo mt nt
trn cy TKNP lun m bo tnh cht cu cy TKNP.
Mt cch ci t cy TKNP thng gp l ci t bng con tr. Mi nt ca cy nh l
mt mu tin (record) c ba trng: mt trng cha kho, hai trng kia l hai con tr
tr n hai nt con (nu nt con vng mt ta gn con tr bng NULL)
Khai bo nh sau
typedef <kiu d liu ca kho> KeyType;
typedef struct BSNode
{
KeyType Key;
BSNode* Left,Right;
}
typedef BSNode* BSTree;
Khi to cy TKNP rng
13
else
{
tm tip trn cy bn tri
}
return Search(x,Root->left);
}
Thut ton tm kim dng lp, tr v con tr cha d liu cn tm v ng thi gi li
nt cha ca n nu tm thy, ngc li tr v rng.
BSTree SearchLap(BSTree Root, KeyType Item, BSTree &Parent)
{
BSTree LocPtr = Root;
Parent = NULL;
while (LocPtr != NULL)
{
if (Item==LocPtr->Key)
return (LocPtr);
else
{
Parent = LocPtr;
if (Item > LocPtr->Key)
LocPtr = LocPtr->RChild;
else LocPtr = LocPtr->LChild;
}
return(NULL);
}
}
Nhn xt: gii thut ny s rt hiu qu v mt thi gian nu cy TKNP c t chc
tt, ngha l cy tng i "cn bng".
Thm mt nt c kha cho trc vo cy TKNP
Theo nh ngha cy tm kim nh phn ta thy trn cy tm kim nh phn khng c
hai nt c cng mt kho. Do nu ta mun thm mt nt c kho x vo cy TKNP
th trc ht ta phi tm kim xc nh c nt no cha kho x cha. Nu c th gii
thut kt thc (khng lm g c!). Ngc li, s thm mt nt mi cha kho x ny.
15
Vic thm mt kho vo cy TKNP l vic tm kim v thm mt nt, tt nhin, phi
m bo cu trc cy TKNP khng b ph v. Gii thut c th nh sau:
Ta tin hnh t nt gc bng cch so snh kha cu nt gc vi kho x.
-
Root->Key = x;
Root->left = NULL;
Root->right = NULL;
}
else if (x < Root->Key) InsertNode(x,Root->left);
else if (x>Root->Key)InsertNode(x,Root->right);
}
Th tc lp thm mt nt vo cy
int InsertNodeLap(BSTree &Root, KeyType Item)
{
BSTree LocPtr, Parent;
if (SearchLap(Root, Item, Parent))
{
cout << \n c ptu <<Item<< trong cy ! ;
return -1;
}
else
{
If (LocPtr=CreateNode())==NULL)
return 0;
LocPtr->Key = Item;
LocPtr->LChild = NULL;
LocPtr->RChild = NULL;
if (Parent == NULL)
Root = LocPtr; // cy rng
else if (Item < Parent->Data)
Parent->LChild = LocPtr;
else Parent->RChild = LocPtr;
return 1;
}
}
Xa mt nt c kha cho trc ra khi cy TKNP
17
Hnh I.12
Nu N l l ta thay n bi NULL.
Hnh I.12
else if (Root->right==NULL)
Root = Root->left
else Root->Key = DeleteMin(Root->righ)
}
Th tc lp xa mt node ra khi cy
int DeleteNode (BSTree &Root, KeyType Item)
{
BSTree x, Parent, xSucc, SubTree;
if((x=SearchLap(Root,Item,Parent)) == NULL)
return 0; //khng thy Item
else
{
if((x->left!=NULL)&&(x->right != NULL))
// nt c hai con
{
xSucc = x->right;
Parent = x;
while (xSucc->left != NULL)
{
Parent = xSucc;
xSucc = xSucc->left;
}
x->Key = xSucc->Key;
x = xSucc;
}
// a nt 2 con v nt c ti a 1 con
SubTree = x->left;
if (SubTree == NULL)
SubTree = x->right;
if (Parent == NULL)
Root = SubTree; // xa nt gc
else if (Parent->left == x)
20
Parent->left = SubTree;
else Parent->right = SubTree;
delete x;
return 1;
}
}
V. Cy nh phn tm kim cn bng (Cy AVL)
1. Cy nh phn cn bng hon ton
nh ngha
Cy nh phn cn bng hon ton (CBHT) l cy nh phn m i vi mi nt ca n,
s nt ca cy con tri chnh lch khng qu 1 so vi s nt ca cy con phi.
V d:
Hnh I.13
2. Xy dng cy nh phn cn bng hon ton
Tree CreateTreeCBHT(int n)
{
Tree Root;
int nl, nr;
KeyType x;
if (n<=0) return NULL;
nl = n/2; nr = n-nl-1;
Input(x);//nhp phn t x
if ((Root =CreateNode()) == NULL)
return NULL;
Root->Key = x;
Root->left = CreateTreeCBHT(nl);
Root->right = CreateTreeCBHT(nr);
return Root;
}
21
Hnh I.14
CSCB(p) = RH
CSCB(p) = LH
{
ElementType Data;
int Balfactor; //Ch s cn bng
struct AVLTN * Lchild, *Rchild;
} AVLTreeNode;
typedef AVLTreeNode *AVLTree;
Vic thm hay hy mt nt trn cy AVL c th lm cy tng hay gim chiu
cao, khi ta cn phi cn bng li cy. gim ti a chi ph cn bng li cy, ta ch
cn bng li cy AVL phm vi cc b.
Cc trng hp mt cn bng
Ngoi cc thao tc thm v hy i vi cy cn bng, ta cn c thm thao tc c bn
l cn bng li cy AVL trong trng hp thm hoc hy mt nt ca n. Khi
lch gia chiu cao cy con phi v tri s l 2. Do trng hp cy lch tri v phi
tng ng l i xng nhau, nn ta ch xt trng hp cy AVL lch tri.
Trng hp a: cy con T1 lch tri
Hnh I.15
Hnh I.16
23
Hnh I.17
Hnh I.18
Cn bng li trng hp b:
Hnh I.19
Cn bng li bng php quay kp left-right, ta c kt qu nh sau:
24
Hnh I.20
Ci t
//Php quay n Left Left
void RotateLL(AVLTree &T)
{
AVLTree T1 = T->Lchild;
T->Lchild = T1->Rchild;
T1->Rchild = T;
switch (T1->Balfactor)
{
case LH: T->Balfactor = EH;
T1->Balfactor = EH; break;
case EH: T->Balfactor = LH;
T1->Balfactor = RH; break;
}
T = T1;
return ;
}
// Php quay n Right Right
void RotateRR (AVLTree &T)
{
AVLTree T1 = T->Rchild;
T->Rchild = T1->Lchild;
T1->Lchild = T;
switch (T1->Balfactor)
25
{
case RH: T->Balfactor = EH;
T1->Balfactor = EH; break;
case EH: T->Balfactor = RH;
T1->Balfactor = LH; break;
}
T = T1;
return ;
}
//Php quay kp Left Right
void RotateLR(AVLTree &T)
{
AVLTree T1 = T->Lchild, T2 = T1->Rchild;
T->Lchild = T2->Rchild; T2->Rchild = T;
T1->Rchild = T2->Lchild; T2->Lchild = T1;
switch (T2->Balfactor)
{
case LH: T->Balfactor = RH;
T1->Balfactor = EH; break;
case EH: T->Balfactor = EH;
T1->Balfactor = EH; break;
case RH: T->Balfactor = EH;
T1->Balfactor = LH; break;
}
T2->Balfactor = EH;
T = T2;
return ;
}
//Php quay kp Right-Left
void RotateRL(AVLTree &T)
{
AVLTree T1 = T->RLchild, T2 = T1->Lchild;
26
{
AVLTree T1 = T->Rchild;
switch (T1->Balfactor)
{
case LH : RotateRL(T);
return 2; //cy T khng lch
case EH : RotateRR(T);
return 1; //cy T lch tri
case RH : RotateRR(T); return 2;
}
return 0;
}
Chn mt phn t vo cy AVL
Vic chn mt phn t vo cy AVL xy ra tng t nh trn cy nh phn tm kim.
Tuy nhin sau khi chn xong, nu chiu cao ca cy thay i ti v tr thm vo, ta cn
phi ngc ln gc kim tra xem c nt no b mt cn bng hay khng. Nu c, ta
ch cn phi cn bng li nt ny.
AVLTree CreateAVL()
{
AVLTree Tam= new AVLTreeNode;
if (Tam == NULL)
cout << \nLi !;
return Tam;
}
int InsertNodeAVL( AVLTree &T, ElementType x)
{
int Kqua;
if (T)
{
if(T->Data==x)
return 0; // c nt trn cy
if (T-> Data > x)
{
28
T->Balfactor = EH;
T->Lchild = T->Rchild = NULL;
return 2;
}
}
Xa mt phn t ra khi cy AVL
Vic xa mt phn t ra khi cy AVL din ra tng t nh i vi cy nh phn tm
kim, ch khc l sau khi hy, nu cy AVL b mt cn bng, ta phi cn bng li cy.
Vic cn bng li cy c th xy ra phn ng dy chuyn.
int DeleteAVL(AVLTree &T, ElementType x)
{
int Kqua;
if (T== NULL) return 0; // khng c x trn cy
if (T-> Data > x)
{
Kqua = DeleteAVL(T->Lchild,x);// tm v xa x trn cy con tri ca T
if (Kqua < 2) return Kqua;
switch (T->Balfactor)
{
case LH : T->Balfactor = EH;
return 2; //trc khi xa T lch tri
case EH : T->Balfactor = RH;
return 1;//trc khi xa T khng lch
case RH : return RightBalance(T);
// trc khi xa T lch phi
}
}
else if (T-> Data < x)
{
Kqua = DeleteAVL(T->Rchild,x);// tm v xa x trn cy con tri ca T
if (Kqua < 2) return Kqua;
switch (T->Balfactor)
30
{
case LH : return LeftBalance(T);//trc khi xa T lch tri
case EH : T->Balfactor = LH;
return 1;
if (T->Rchild == NULL)
{
T = T->Lchild; Kqua = 2;
}
else // T c hai con
{
Kqua = TimPhanTuThayThe(p,T->Rchild);
//Tm phn t thay th P xa trn nhnh phi cu T
if (Kqua < 2) return Kqua;
switch (T->Balfactor)
{
case LH : return LeftBalnce(T);
case EH : T->Balfactor = LH;
return 2;
case RH : T->Balfactor = EH;
return 2;
}
}
31
delete p;
return Kqua;
}
}
// Tm phn t thay th
int TimPhanTuThayThe(AVLTree &p, AVLTree &q)
{
int Kqua;
if (q->Lchild)
{
Kqua = TimPhanTuThayThe(p, q->Lchild);
if (Kqua < 2) return Kqua;
switch (q->Balfactor)
{
case LH : q->Balfactor = EH;
return 2;
case EH : q->Balfactor = RH;
return 1;
case RH : return RightBalance(q);
}
}
Else
{
p->Data = q->Data;
p = q;
q = q->Rchild;
return 2;
}
}
Bi tp
1. Xut ra theo th t: gia, u, cui cc phn t trn cy nh phn sau:
32
A
P
E
M
T
D
a/(b*c)
5 + 4a3 3a2 + 7
(a + b) * (c - d)
Sa+b
1,2,3,4,5
5,4,3,2,1
8,9,11,15,19,20,21,7,3,2,1,5,6,4,13,10,12,17,16,18. Sau xa ln lt cc nt
sau: 2,10,19,8,20
Tng s nt ca cy.
S nt ca cy mc k.
S nt l.
34
Chng II
Th
Mc tiu
Sau khi hc xong chng ny, sinh vin nm vng v ci t c cc kiu d liu
tru tng th v vn dng gii nhng bi ton thc t.
Kin thc c bn cn thit
hc tt chng ny sinh vin cn phi nm vng k nng lp trnh c bn nh:
-
Ni dung
Trong chng ny chng ta s nghin cu mt s kiu d liu tru tng c bn nh
sau:
-
Cc khi nim c bn
Biu din th
Cc php duyt th
Mt s bi ton trn th
I. Cc nh ngha
Mt th G bao gm mt tp hp V cc nh v mt tp hp E cc cung tng ng,
k hiu G = (V, E). Cc nh cn c gi l nt (node) hay im (point). Cc cung
ni gia hai nh, hai nh ny c th trng nhau. Hai nh c cung ni nhau gi l hai
nh k (adjacency). Mt cung ni gia hai nh v, w c th coi nh l mt cp im
(v, w). Nu cp ny c th t th ta c cung c th t, ngc li th l cung khng c
th t. Nu cc cung trong th G c th t th G gi l th c hng (directed
graph). Nu cc cung trong th G khng c th t th th G gi l th v
hng (undirected graph). Trong cc phn sau ny ta dng t th ni n th
ni chung, khi no cn phn bit r ta s dng th c hng hay th v hng.
Hnh I.1a cho ta mt v d v th c hng, hnh I.1.b cho ta v d v th v
hng. Trong cc th ny th cc vng trn c nh s biu din cc nh, cn
cc cung c biu din bng on thng c hng (trong I.1a) hoc khng c hng
(trong I.1b).
35
V V v
36
37
Mng HEAD
Bi tp: vit th tc nhp d liu cho th biu din bng danh sch k.
IV. Cc php duyt th (traversals of Graph)
Trong khi gii nhiu bi ton c m hnh ha bng th, ta cn i qua cc nh v
cc cung ca th mt cch c h thng. Vic i qua cc nh ca th mt cch c
h thng nh vy gi l duyt th. C hai php duyt th ph bin l duyt
theo chiu su, v duyt theo chiu rng.
1. Duyt theo chiu su (Depth-first search)
Gi s ta c th G = (V, E) vi cc nh ban u c nh du l cha duyt
(unvisited). T mt nh v no ta bt u duyt nh sau: nh du v duyt, vi
mi nh w cha duyt k vi v, ta thc hin qui qu trnh trn cho w. S d cch
duyt ny c tn l duyt theo chiu su v n s duyt theo mt hng no su
nht c th c. Gii thut duyt theo chiu su mt th c th c trnh by nh
sau, trong ta dng mt mng mark c n phn t nh du cc nh ca th l
duyt hay cha.
38
Hnh I.3
Hnh I.4
{
mark[y-1] = visited; {duyt y}
ENQUEUE(y,Q);
}
}
}
}
V d duyt theo chiu rng th hnh I.3. Gi s bt u duyt t A. A ch c mt
nh k G, nn ta duyt G. K n duyt tt c cc nh k vi G, l B, C. Sau
duyt tt c cc nh k vi B, C theo th t . Cc nh k vi B, C c duyt,
nn ta tip tc duyt cc nh cha c duyt. Cc nh cha c duyt l D, E, F.
Duyt D, k n duyt E, cui cng duyt F. Vy th t cc nh c duyt l:
AGBCDFE.
V d duyt theo chiu rng th hnh I.4. Gi s bt u duyt t A. Duyt A, k
n duyt tt c cc nh k vi A, l B, C, D theo th t . K tip duyt cc nh
k ca B, C, D theo th t . Vy cc node c duyt tip theo l F, E, G. C th
minh ha hot ng ca hng i trong php duyt trn nh sau:
Duyt A c ngha l nh du visited v a n vo hng i:
41
42
Khi ng:
L(v) = , v s0; //nhn tm thi
S = Rng;
Bc 0
d(s0, s0) = L(s0) = 0;
S = {s0}; //s0 c nhn chnh thc
Bc 1
-
Tm s1 S v k vi s0 sao cho:
L(s1) = Min{L(v): v S}; // khi d(s0, s1) = L(s1)
Bc 2
-
Tm s2 S v k vi s1 sao cho:
L(s2) = Min{L(v): v S}; // khi d(s0, s2) = L(s2)
...
Bc i
-
}
if(L[i] < min) // chn nh k
{
min = L[i];
k = i;
}
}
//Ti mi bc lp h, tm c ng i ngn nht t s
//n k
Xuatddnn(v,k, ddnn);
cout<<\nTrong so: << L[k];
dht = k; // khi ng li dht
DX[dht] = 1; //a nt k vo tp nt xt
h++;
}
}
}
V d: p dng thut gii Dijkstra cho th hnh I.5
Hnh I.5
Kt qu khi p dng gii thut
Ln lp
L[2]
L[3]
L[4]
L[5]
Khi u
{1}
10
30
100
(1)
(1)
(1)
1
{1,2}
10
60
30
100
(1)
(2)
(1)
(1)
46
{1,2,4}
{1,2,3,4}
{1,2,3,4,5}
10
40
30
90
(1)
(4)
(1)
(4)
10
40
30
50
(1)
(4)
(1)
(3)
10
40
30
50
(1)
(4)
(1)
(3)
if(A[k][j])
A[i,j] = 1;
}
3. Bi ton tm cy bao trm ti thiu (minimum-cost spanning tree)
Gi s ta c mt th v hng G = (V, E). th G gi l lin thng nu tn ti
ng i gia hai nh bt k. Bi ton tm cy bao trm ti thiu (hoc cy ph ti
thiu) l tm mt tp hp T cha cc cnh ca mt th lin thng C sao cho V cng
vi tp cc cnh ny cng l mt th lin thng, tc l (V, T) l mt th lin
thng. Hn na tng di ca cc cnh trong T l nh nht. Mt th hin ca bi
ton ny trong thc t l bi ton thit lp mng truyn thng, cc nh l cc
thnh ph cn cc cnh ca cy bao trm l ng ni mng gia cc thnh ph.
Gi s G c n nh c nh s t 1..n. Gii thut Prim gii bi ton ny nh sau:
tng
-
M t thut ton
Input: G=(V,E)
Output: T = (V, ?) l nh nht.
Khi ng:
-
U V
U = {1};
Trong khi (U V)
Tm cnh (u,v) c trng s nh nht vi u U, v V. Thm nh v ny vo U,
thm (u,v) vo T
Ci t
tin hnh ci t thut ton, ta cn m t d liu. th c trng s c biu
din thnh mt ma trn k C[n,n].
Khi tm cnh c trng s nh nht ni mt nh trong U v mt nh ngoi U ti
mi bc, ta dng hai mng lu tr:
-
daxet[k] = DX;
//Khi ng li chosest[], lowcost[]
for(j=2; j<=n; j++)
if(c[k][j]<lowcost[j] && !daxet[j])
{
lowcost[j] = c[k][j];
closest[j] = k
}
}
}
V d: p dng gii thut Prim tm cy bao trm ti thiu ca th lin thng hnh
I.6
Ma trn k:
1
VC
VC
VC
VC
VC
VC
VC
VC
VC
VC
Khi to
Mng lowcost
2
VC
VC
Mng closest
50
Mng daxet
Mng closest
Mng daxet
Bc 2: tm c Min = 4, k = 6
Mng lowcost
2
Mng closest
Mng daxet
Bc 3: tm c Min = 2, k = 4
Mng lowcost
51
Mng closest
Mng daxet
Bc 4: tm c Min = 5, k = 2
Mng lowcost
2
Mng closest
Mng daxet
Bc 5: tm Min = 3, k = 5
Mng lowcost
2
Mng closest
Mng daxet
2
52
Bi tp
1. Vit biu din th I.7 bng:
-
Ma trn k.
Danh sch cc nh k.
Theo chiu su bt u t f
Ma trn k.
Danh sch cc nh k.
Theo chiu su bt u t B.
54
Chng III
Bng Bm
Mc tiu
Trong chng ny, chng ta s nghin cu bng bm. Bng bm l cu trc d liu
c s dng ci t KDL t in. Nh li rng, KDL t in l mt tp cc i
tng d liu c xem xt n ch vi ba php ton tm kim, xen vo v loi b.
ng nhin l chng ta c th ci t t in bi danh sch, hoc bi cy tm kim
nh phn. Tuy nhin bng bm l mt trong cc phng tin hiu qu nht ci t
t in.
Kin thc c bn cn thit
hc tt chng ny sinh vin cn phi nm vng k nng lp trnh c bn nh:
-
Ni dung
Trong chng ny, chng ta s cp ti cc vn sau y:
-
I. Phng php bm
Vn c t ra l, chng ta c mt tp d liu, chng ta cn a ra mt cu trc
d liu (CTDL) ci t tp d liu ny sao cho cc php ton tm kim, xen, loi c
thc hin hiu qu. Trong cc chng trc, chng ta trnh by cc phng php
ci t KDL tp ng (t in l trng hp ring ca tp ng khi m chng ta ch
quan tm ti ba php ton tm kim, xen, loi). Sau y chng ta trnh by mt k
thut mi lu gi mt tp d liu, l phng php bm.
Nu nh cc gi tr kho ca cc d liu l s nguyn khng m v nm trong khong
[0..SIZE-1], chng ta c th s dng mt mng data c c SIZE lu tp d liu .
D liu c kho l k s c lu trong thnh phn data[k] ca mng. Bi v mng cho
php ta truy cp trc tip ti tng thnh phn ca mng theo ch s, do cc php
ton tm kim, xen, loi c thc hin trong thi gian O(1). Song ng tic l, kho
c th khng phi l s nguyn, thng thng kho cn c th l s thc, l k t hoc
xu k t. Ngay c kho l s nguyn, th cc gi tr kho ni chung khng chy trong
khong [0..SIZE-1].
Trong trng hp tng qut, khi kho khng phi l cc s nguyn trong khong
[0..SIZE-1], chng ta cng mong mun lu tp d liu bi mng, li dng tnh u
vit cho php truy cp trc tip ca mng. Gi s chng ta mun lu tp d liu trong
mng T vi c l SIZE. lm c iu , vi mi d liu chng ta cn nh v
55
59
Hnh III.2. Bng bm sau khi xen vo cc d liu 38, 130, 13, 14 v 926
By gi chng ta xt xem, nu lu tp d liu trong mng bng phng php nh a
ch m th cc php ton tm kim, xen, loi c tin hnh nh th no. Cc k thut
tm kim, xen, loi c trnh by di y c th s dng cho bt k phng php
thm d no. Trc ht cn lu rng, tm, xen, loi chng ta phi s dng cng
mt phng php thm d, chng hn thm d tuyn tnh. Gi s chng ta cn tm d
liu vi kho l k. u tin cn bm kho k, gi s h(k)=i. Nu trong bng ta cha mt
ln no thc hin php ton loi, th chng ta xem xt cc d liu cha trong mng ti
v tr i v cc v tr tip theo trong dy thm d, chng ta s phthin ra d liu cn tm
ti mt v tr no trong dy thm d, hoc nu gp mt v tr trng trong dy thm
d th c th dng li v kt lun d liu cn tm khng c trong mng. Chng hn
chng ta mun tm xem mng trong Hnh III.2 c cha d liu vi kho l 47? Bi v
h(47) = 3, v d liu c lu theo phng php thm d tuyn tnh, nn chng ta ln
lt xem xt cc v tr 3, 4, 5. Cc v tr ny u cha d liu khc vi 47. n v tr 6,
mng trng. Vy ta kt lun 47 khng c trong mng.
loi d liu vi kho k, trc ht chng ta cn p dng th tc tm kim trnh
by trn nh v d liu trong mng. Gi s d liu c lu trong mng ti v
tr p. Loi d liu v tr p bng cch no? Nu t v tr p l v tr trng, th khi tm
kim nu thm d gp v tr trng ta khng th dng v a ra kt lun d liu khng
c trong mng. Chng hn, trong mng Hnh III.2, ta loi d liu 388 bng cch xem
v tr 3 l trng, sau ta tm d liu 926, v h (926) = 2 v T[2] khng cha 926,
tmn v tr 3 l trng, nhng ta khng th kt lun 926 khng c trong mng. Thc
t 926 v tr 5, v lc a 926 vo mng cc v tr 2, 3, 4 b chim. V vy m
bo th tc tm kim trnh by trn vn cn ng cho trng hp thc hin
php ton loi, khi loi d liu v tr p chng ta t v tr p l v tr loi b. Nh
vy, chng ta quan nim mi v tr i trong mng (0 <= i <= SIZE-1) c th l v tr
trng (EMPTY), v tr loi b (DELETED), hoc v tr cha d liu (ACTIVE).
ng nhin l khi xen vo d liu mi, chng ta c th t n vo v tr loi b.
Vic xen vo mng mt d liu mi c tin hnh bng cch ln lt xem xt cc v
tr trong dy thm d ng vi mi kho ca d liu, khi gp mt v tr trng hoc v tr
c loi b th t d liu vo .
Sau y l hm thm d tuyn tnh
int
// SIZE l c ca mng
// i l v tr ban u c xc nh bi bm kho k, i = h(k)
// hm tr v v tr thm d ln th m= 0, 1, 2,
{
60
Hm bm h2 xc nh bc thm d.
61
hin cc php ton tp ng khc, chng hn php ton Min (tm d liu c kho nh
nht), php ton DeleteMin (loi d liu c kho nh nht), hoc php duyt d liu.
Sau ny chng ta s gi bng bm vi gii quyt va chm bng phng php nh a
ch m l bng bm a ch m, cn bng bm gii quyt va chm bng cch to dy
chuyn l bng bm dy chuyn.
IV. Ci t bng bm a ch m
Trong mc ny chng ta s nghin cu s ci t KDL t in bi bng bm a ch
m. Chng ta s gi thit rng, cc d liu trong t in c kiu Item no , v chng
cha mt trng dng lm kho tm kim (trng key), cc gi tr kho c kiu int.
Ngoi ra n gin cho vit ta gi thit rng, c th truy cp trc tip trng key.
Nh tho lun trong mc III.1, trong bng bm T, mi thnh phn T[i], 0 <= i <=
SIZE -1, s cha hai bin: bin data lu d liu v bin state lu trng thi ca
v tr i, trng thi ca v tr i c th l rng (EMPTY), c th cha d liu (ACTIVE),
hoc c th loi b (DELETED). Chng ta s ci t KDL bi lp OpenHash ph
thuc tham bin kiu Item, lp ny s dng mt hm bm Hash v mt hm thm d
Probing c cung cp. Lp OpenHash c khai bo nh sau:
const int SIZE = 811;
enum stateType {ACTIVE, EMPTY, DELETED};
struct
Entry
{
int
data;
stateType state;
}
Entry T[SIZE];
OpenHash(); // khi to bng bm rng.
bool
void
void
Delete(int k);
// Loi khi bng bm d liu c kho k.
return false;
}
else if (T[n].state = = DELETED && T[index1].state!= DELETED)
index1 = n;
}
return false; // Dng thm d m vn khng tm ra d liu
// v cng khng pht hin ra v tr rng.
}
S dng hm Find, cc hm tm kim, xen, loi c ci t nh sau:
bool Search(int k)
{
int ind, ind1;
if (Find(k,ind,ind1))
{
return true;
}
else
{
return false;
}
}
void Insert(int & object, bool & Suc)
{
int ind, ind1;
if (!Find(object, ind, ind1))
if (T[ind1].state = = DELETED || T[ind1].state = = EMPTY)
{
T[ind1].data = object;
T[ind1].state = ACTIVE;
Suc = true;
}
else Suc = false;
65
}
void Delete(int k)
{
int ind, ind1;
if (Find(k, ind, ind1))
T[ind].state = DELETED;
}
Trn y chng ta ci t bng bm a ch m bi mng c c c nh. Hn ch
ca cch ny l, php ton Insert c th khng thc hin c do mng y hoc c
th mng khng y nhng thm d khng pht hin ra v tr rng hoc v tr loi
b t d liu vo. Cu hi t ra l, chng ta c th ci t bi mng ng nh
chng ta lm khi ci t KDL tp ng. Cu tr li l c, tuy nhin ci t bng
bm bi mng ng s phc tp hn, v cc l do sau:
-
V. Ci t bng bm dy chuyn
Trong mc ny chng ta s ci t KDL t in bi bng bm dy chuyn. Lp
ChainHash ph thuc tham bin kiu Item vi cc gi thit nh trong mc IV. Lp
ny c nh ngha nh sau:
struct
Cell
{
Item data;
Cell* next;
}; // Cu trc t bo trong dy chuyn.
Cell* T[SIZE];// Mng cc con tr tr u cc dy chuyn
// Cc php ton t in:
bool Search(int k, Item & I) const;
void Insert(const Item & object, bool & Suc);
void Delete(int k);
khi to ra bng bm rng, chng ta ch cn t cc thnh phn trong mng T l
con tr NULL.
Hm kin to mc nh nh sau:
66
int i = Hash(k);
Cell* P;
If (T[i] != NULL)
If (T[i]data.key = = k)
{
P = T[i];
T[i] = T[i]next;
delete P;
}
else
{
P = T[i];
Cell* Q = Pnext;
while (Q != NULL)
if (Qdata.key = = k)
{
Pnext = Qnext;
delete Q;
Q = NULL;
}
else
{
P = Q;
Q = Qnext;
}
}
}
u im ln nht ca bng bm dy chuyn l, php ton Insert lun lun c thc
hin, ch tr khi b nh cp pht ng cn kit. Ngoi ra, cc php ton tm
kim, xen, loi, trn bng bm dy chuyn cng rt n gin. Tuy nhin, phng php
ny tiu tn b nh ginh cho cc con tr trong cc dy chuyn.
68
69
Thi gian tm kim trung bnh trn bng bm a ch m s dng thm d bnh
phng (hoc bm kp). S trung bnh cc ln thm d cho tm kim c nh gi l
Tm kim thnh cng
Tm kim tht bi
Phng php thm d ny i hi s ln thm d t hn phng php thm d tuyn
tnh. Chng hn, gi s bng y ti 80%, tm kim thnh cng trung bnh ch i
hi xem xt 2 v tr mng,
Thi gian tm kim trung bnh trn bng bm dy chuyn. Trong bng bm dy
chuyn, xen vo mt d liu mi, ta ch cn t d liu vo u mt dy chuyn
c nh v bi hm bm. Do , thi gian xen vo l O(1).
tm kim (hay loi b) mt d liu, ta cn xem xt cc t bo trong mt dy
chuyn. ng nhin l dy chuyn cng ngn th tm kim cng nhanh. di trung
bnh ca mt dy chuyn l
Khi tm kim thnh cng, chng ta cn bit dy chuyn c rng khng, ri cn xem
xt trung bnh l mt na dy chuyn. Do , s trung bnh cc v tr cn xem xt khi
tm kim thnh cng l
Nu tm kim tht bi, c ngha l ta xem xt tt c cc t bo trong mt dy
chuyn nhng khng thy d liu cn tm, do s trung bnh cc v tr cn xem xt
khi tm kim tht bi l .
Tm li, hiu qu ca php ton tm kim trn bng bm dy chuyn l:
Tm kim thnh cng
Tm kim tht bi
70
71
72
Chng IV
Ni dung
Trong chng ny chng ta s nghin cu mt s phng php thit k gii thut c
bn nh sau:
-
If( nh)
Gii bi ton
Else
{
Chia thnh 1, .., m;
For(j=1; j<=m; j++)
D&C( j);
Tng hp kt qu;
}
}
Sau y l mt s v d minh ha cho phng php chia tr
2. Tm kim nh phn
Pht biu bi ton
Cho mng n phn t c sp xp tng dn v mt phn t x. Tm x c trong mng
hay khng? Nu c tr v kt qu l 1, ngc li tr v kt qu l 0.
tng
Chia i mng, mi ln so snh phn t gia vi x, nu phn t gia nh hn x th tm
x na bn phi, ngc li th tm x na bn phi.
M t thut ton
Input: a[1..n]
Output:
1: nu x thuc a
0: nu x khng thuc a
M t:
TKNP(a, x, u, cui)
If(u > cui)
Return 0;
Else
{
gia = (u + cui)/2;
If(x == a[gia])
Return 1;
Else if(x > a[gia])
74
a[j]
10
15
19
{
Min = a[l];
Max = a[l];
}
Else
{
MinMax(a,l,(l+r)/2,Min1,Max1)
MinMax(a,(l+r)/2,r,Min2,Max2)
If(Min1<Min2)
Min = Min1;
Else Min = Min2;
If(Max1<Max2)
Max = Max2;
Else Max = Max1;
}
phc tp thut ton
Gi T(n) l s php so snh cn thc hin. Khi ta c:
T (n / 2) + T (n / 2) + 2; n > 2
T(n) = 1; n = 2
0; n = 1
Vi n = 2k, th:
k 1
k 1
Vy T(n) O(n).
4. Thut ton QuickSort
Pht biu bi ton
Sp xp mt mng khng c th t thnh mt mng c th t xc nh,chng hn tng
hoc gim.
tng
Chn ngu nhin mt phn t x.
Duyt dy t bn tri (theo ch s i) trong khi ai < x.
76
ak
am
Tip tc phn hoch cho phn tri v phn phi cho n khi cc phn hoch ch cn li
mt phn t l sp xp xong.
M t thut ton:
Input: a[l..r]
Output: a[l..r] khng gim
QuickSort(a,l,r)
{
i=l;
j=r;
x= a[(l+r)/2];//chn phn t gia
do
{
While(a[i]<x) i++;
While(a[j]>x)j--;
If(i<=j)
{
i ch a[i] v a[j];
i++;
j--;
}
}while(i<=j)
If(l<=j) QuickSort(a,l,j);
If(i<=r) QuickSort(a,i,r);
77
}
phc tp thut gii
iu tt nht c th xy ra trong QuickSort mi giai on phn hoch chia mng thnh
hai na. iu ny khin cho s ln so snh cn thit ca QuickSort tha mn cng
thc sau y:
Tn = 2Tn/2 + n = nlgn.
2Tn/2: ph tn sp xp 2 mng con.
n: ph tn kim tra mi phn t
Trng hp xu nht ng cho vic chn phn t x li c gi tr ln nht hoc nh nht
trong dy. Gi s phn t ln nht c chn (x), khi mi bc chia s chia n phn
t thnh n-1 phn t tri v 1 phn t phi. Kt qu cn ti n php chia (thay cho nlgn)
v nh th phc tp s l T(n) = O(n2).
Trong trng hp ny dy c th t thun hay ngc, phn t ln nht c chn
s nm cc bin (tri hoc phi), nn thut ton khng c hiu qu.
Trng hp trung bnh, cng thc truy hi tnh s ln so snh m thut ton cn
hon v ngu nhin n phn t l:
1
(Tk-1 + Tn-k); vi n>=2; C0 = C1 = 1;
n 1<= k <= n
T(n) = (n+1) +
Gi tr n+1 bao hm chi ph so snh phn t phn hoch vi mi phn t cn li, tng
cn li mang ngha l mi phn t k c th l phn t phn hoch vi xc sut 1/k v
sau cn li cc mng con c kch thc k-1 v n-k.
Tn = n+1+
2 n
Tk-1
n k =1
Thc hin lin tip cc php ton sau cho c hai v: nhn n v tr cho (n-1)Cn-1:
nTn (n-1)Tn-1 = n(n-1) +
= n(n+1) +
2 n
Tk-1 (n-1)Tn-1
n k =1
2 n
2 n 1
Tk-1 (n-1)[n +
Tk-1]
n k =1
n 1 k =1
= n(n+1) n(n-1) + 2
k =1
n 1
Tk-1 - 2 Tk-1
k =1
78
k +1
k =2
= 1/2 + 2
n +1
k
k =3
Tn/(n+1) 2
n +1
1
1
2 dx = 2ln(n)
x
k =3 k
1
79
j = 1, n; bj =
0; Nu j s dng
Sau khi gn j cho ai, ta cn ghi nh bj (bj = 0) v phi tr li trng thi c cho bj (bj =1)
khi thc hin vic in xong mt hon v.
Ta cn ch rng dy cc bin bj s c khi ng bng 1.
Thut ton
Try(i)
{
For(j=1; j<=n; j++)
{
If(b[j])
{
a[i] = j;
b[j] = 0;
if(i<n)
Try(i+1);
Else Xut;
b[j] = 1;
}
}
4. Bi ton duyt th theo chiu su (DFS)
Pht biu bi ton
G = (V,U) l n th (c hng hoc v hng). V: tp cc nh ca th, U l
tp cc cung ca th. Vi s, t l hai nh ca th, tm tt c cc ng i t s n
t.
tng
Thut ton DFS tin hnh tm kim trong th theo chiu su. Thut ton thc hin
vic thm tt c cc nh c th t c cho ti nh t t nh s cho trc. nh c
81
Kt qu:
s=1, t=4
s=2, t = 5
14
234165
174
2365
24165
24365
82
84
Vmax: gi tr ln nht
M t
Knap_Greedy(w,v,Chon,n,m)
{
Khi ng b[i] = i, i = 1, n ; //Lu tr ch s lm cho mng gim dn
Khi ng Chon[i] = 0, i = 1, n ;//Mng nh du vt c chn
Khi ng Vmax=0;
Tnh n gi: di =
vi
, i = 1, n
wi
88
89