Академический Документы
Профессиональный Документы
Культура Документы
GIO TRNH
Lt 2010
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
Gio trnh 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 gio trnh nhm
gip cc bn sinh vin chuyn ngnh c mt ti liu c ng dng lm ti liu hc tp.
Ni dung gio trnh gm 4 chng sau:
Chng 1: trnh by cu trc d liu cy, trong nhn mnh v cu trc d liu cy
nh phn tm kim BST v cy nh phn tm kim cn bng AVL cng cc php ton trn
n.
Chng 2: trnh by v th, cc cu trc d liu dng biu din th v mt s bi
ton trn th.
Chng 3: trnh by cu trc d liu bng bm, cc hm bm, cch t d liu trn
bng bm nhm phc v cho bi ton tm kim c hiu qu.
Chng 4: gii thiu v mt s phng php thit k gii thut c bn gip sinh vin
bc u lm quen vi mt s phng php thit k gii thut.
Mc d rt c gng nhiu trong qu trnh bin son gio trnh, xong 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 08 nm 2010
Mc lc
Chng I: Cy ............................................................................................................................... 5
I. Cc thut ng c bn trn cy ................................................................................................ 5
1. nh ngha ......................................................................................................................... 5
2. Th t cc nt trong cy.................................................................................................... 6
3. Cc th t duyt cy quan trng........................................................................................ 7
4. Cy c nhn v cy biu thc ............................................................................................ 7
II. Cy nh phn (Binary Trees)................................................................................................... 9
1. nh ngha ......................................................................................................................... 9
2. Vi tnh cht ca cy nh phn......................................................................................... 10
3. Biu din cy nh phn .................................................................................................... 10
4. Duyt cy nh phn .......................................................................................................... 10
5. Ci t cy nh phn ........................................................................................................ 11
IV. Cy tm kim nh phn (Binary Search Trees) .................................................................... 13
1. nh ngha ........................................................................................................................ 13
2. Ci t cy tm kim nh phn .......................................................................................... 14
V. Cy nh phn tm kim cn bng (Cy AVL) ....................................................................... 22
1. Cy nh phn cn bng hon ton..................................................................................... 22
2. Xy dng cy nh phn cn bng hon ton ..................................................................... 22
3. Cy tm kim nh phn cn bng (cy AVL).................................................................... 23
Bi tp........................................................................................................................................ 33
Chng II: Th....................................................................................................................... 36
I. Cc nh ngha ................................................................................................................... 36
III. Biu din th.................................................................................................................... 38
1. Biu din th bng ma trn k...................................................................................... 38
2. Biu din th bng danh sch cc nh k.................................................................... 40
IV. Cc php duyt th (traversals of Graph)........................................................................ 40
1. Duyt theo chiu su (Depth-first search) ........................................................................ 40
2. Duyt theo chiu rng (breadth-first search).................................................................... 41
V. Mt s bi ton trn th................................................................................................... 44
1. Bi ton tm ng i ngn nht t mt nh ca th .................................................. 44
2. Bi ton tm bao ng chuyn tip. .................................................................................. 48
3. Bi ton tm cy bao trm ti thiu (minimum-cost spanning tree)................................. 49
Bi tp........................................................................................................................................ 54
Chng III: Bng Bm ............................................................................................................... 56
I. Phng php bm................................................................................................................. 56
II. Cc hm bm ..................................................................................................................... 58
1. Phng php chia ............................................................................................................. 58
2. Phng php nhn ............................................................................................................ 58
3. Hm bm cho cc gi tr kho l xu k t ...................................................................... 59
III. Cc phng php gii quyt va chm.................................................................................. 60
1. Phng php nh a ch m........................................................................................... 60
2. Phng php to dy chuyn............................................................................................ 63
IV. Ci t bng bm a ch m............................................................................................... 64
V. Ci t bng bm dy chuyn.............................................................................................. 67
VI. Hiu qu ca cc phng php bm.................................................................................... 70
3
Bi tp........................................................................................................................................ 72
Chng IV: Mt s phng php thit k thut gii............................................................... 74
I. Phng php chia tr........................................................................................................ 74
1. M u.............................................................................................................................. 74
2. Tm kim nh phn............................................................................................................ 75
3. Bi ton Min-Max ............................................................................................................ 76
4. Thut ton QuickSort........................................................................................................ 77
II. Phng php quay lui ........................................................................................................... 80
1. M u.............................................................................................................................. 80
2. Bi ton lit k dy nh phn di n .............................................................................. 81
3. Bi ton lit k cc hon v............................................................................................... 81
4. Bi ton duyt th theo chiu su (DFS)...................................................................... 82
III. Phng php tham lam ........................................................................................................ 84
1. M u.............................................................................................................................. 84
2. Bi ton ngi du lch ...................................................................................................... 85
3. Thut ton Prim - Tm cy bao trm nh nht ................................................................. 87
4. Bi ton chic ti sch ...................................................................................................... 87
Bi tp........................................................................................................................................ 88
Ti liu tham kho....................................................................................................................... 90
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
5
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
10
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)
11
{
(*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)
{
12
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.
13
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
14
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.
16
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
18
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)
21
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;
}
22
Hnh I.14
CSCB(p) = RH
CSCB(p) = LH
typedef
{
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
24
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:
25
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)
26
{
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;
27
{
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)
{
29
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)
31
{
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;
}
}
32
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:
33
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.
35
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 = (V, E) l mt tp hp khng rng V cha cc nh v mt tp hp
khng rng E cha cc cnh (cung) tng ng. Cc nh cn c gi l nt hay
im. Cc cung ni gia hai nh, hai nh ny c th trng nhau. S nh v cung k
hiu tng ng l |V| v |E|.
Hai nh c cung ni nhau gi l hai nh k. 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 (tc cung (v, w)
khc cung (w, v)) th G gi l th c hng. Nu cc cung trong th G khng c
th t (tc cung (v, w) = (w, v)) th th G gi l th v hng. Mt th c
gi l a th nu gia hai nh c th ni vi nhau bi nhiu hn mt cung, ngc
li th th l n th. Hnh I.1a: th c hng, hnh I.1.b: th v hng,
hnh I.1.c: a th. Trong cc th ny th cc vng trn c nh s biu din cc
nh, cn cc cung c biu din bng on ni hai nh c hng (trong I.1a) hoc
khng c hng (trong I.1b).
36
Hnh I.2
V V v
37
True
True
True
True
True False
True
True False
False False
True
True
True
True
False True
True
True
38
10
VC
30
100
VC
50
VC
VC
VC
VC
VC
10
VC
VC
10
60
VC
VC
VC
VC
Bi tp: Hy vit th tc nhp liu mt ma trn k biu din cho mt th. D liu
u vo l s nh V, s cnh E v cc cnh ni hai nh.
Cch biu din th bng ma trn k cho php kim tra mt cch trc tip hai nh
no c th k nhau khng. Nhng n phi mt thi gian duyt qua ton b mng
xc nh tt c cc cnh trn th. Thi gian ny c lp vi s cnh v s nh ca
th. Ngay c khi s cnh ca th rt nh th ta vn phi dng mt ma trn nxn
lu tr. Do vy, nu ta cn lm vic thng xuyn vi cc cnh ca th th ta c th
phi dng cch biu din khc cho ph hp hn.
2. Biu din th bng danh sch cc nh k.
Trong cch biu din ny, ta s lu tr cc nh k vi mt nh i trong mt danh sch
lin kt theo mt th t no . Nh vy ta cn mt mng LIST mt chiu c n phn
t biu din cho th c n nh. LIST[i] l con tr tr ti danh sch cc nh k
vi nh i. V d th hnh I.1a c th biu din nh sau:
4
5
*
1
Mng LIST
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
(mng nh du mang gi tr 0). 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 DX c n phn t nh du cc
nh ca th l duyt hay cha.
40
Hnh I.3
43
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
-
while(h<SoDinh-1)
{
min = CV;
for(int i=1; i<=SoDinh; i++)
{
if(DX[i] == 0)
{
if(L[dht] + C[dht][i] < L[i]) //tnh li nhn
{
L[i] = L[dht] + C[dht][i];
dnnn[i] = dht; // gn nh hin ti bng nh
trc i trn l trnh
}
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
47
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}
{1,2,4}
{1,2,3,4}
{1,2,3,4,5}
10
60
30
100
(1)
(2)
(1)
(1)
10
40
30
90
(1)
(4)
(1)
(4)
10
40
30
50
(1)
(4)
(1)
(3)
10
40
30
50
(1)
(4)
(1)
(3)
A[i,j] khng cho khong cch ngn nht gia i, j m n cho bit l c ng i t i
n j hay khng. A gi l bao ng chuyn tip trong th G c biu din ma trn k
l C. Gii thut tm bao ng chuyn tip hay cn gi gii thut Warshall.
int A[n,n], C[n,n]; //A l bao ng chuyn tip, C l ma trn k
void Warshall()
{
int i,j,k;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
A[i-1,j-1] = C[i-1,j-1];
for (k=1; k<=n; k++)
for (i=1; i<=n; i++)
if(A[i,k] != 0)
for (j=1; j<=n; j++)
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.
49
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:
-
}
for(i=2; i<=n; i++)
{
Min = lowcost[2];
k = 2;
for(j=3; j<=n; j++)
{
if(!daxet[j] && lowcost[j] < Min)
{
Min = lowcost[j];
k = j;
}
}
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:
51
VC
VC
VC
VC
VC
VC
VC
VC
VC
VC
Khi to
Mng lowcost
2
VC
VC
Mng closest
Mng daxet
Mng closest
Mng daxet
Bc 2: tm c Min = 4, k = 6
52
Mng lowcost
2
Mng closest
Mng daxet
Bc 3: tm c Min = 2, k = 4
Mng lowcost
2
Mng closest
Mng daxet
Bc 4: tm c Min = 5, k = 2
Mng lowcost
2
Mng closest
Mng daxet
53
Bc 5: tm Min = 3, k = 5
Mng lowcost
2
Mng closest
Mng daxet
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
54
Ma trn k.
Danh sch cc nh k.
Theo chiu su bt u t B.
55
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
56
60
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,
{
61
Hm bm h2 xc nh bc thm d.
62
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];
void
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;
66
}
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:
67
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.
69
70
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
71
72
73
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])
75
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.
77
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);
78
}
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
79
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
80
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
82
Kt qu:
s=1, t=4
s=2, t = 5
14
234165
174
2365
24165
24365
83
85
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
89
90