Professional Documents
Culture Documents
BG CTDLGT
BG CTDLGT
NI DUNG MN HC
Cc khi nim c bn v cu trc d liu
Cc thut ton sp xp v tm kim Danh sch lin kt
Ngn xp
Hng i Cy v cy nh phn
chuyn mt bi ton thc t thnh mt bi ton gii quyt c bng my tnh => Xy dng mt bi ton cn m t:
i
Ph hp vi cc thao tc x l
Tit kim ti nguyn h thng
=> m t cc loi d liu my hiu phi a ra khi nim v mt hnh thc lu tr v c gi l Kiu d liu
<V,O> vi: V: l tp cc gi tr hp l i tng kiu T c th lu tr O: l tp cc thao tc x l c th thc hin trn cc i tng kiu T V d Kiu s nguyn SN=<Vi,Oi> vi Vi = {-3276832767} Oi = {+, -, *, , mod, div}
2. Cc yu t xc nh kiu d liu
Tn kiu d liu
Min gi tr
Kch thc lu tr Tp cc ton t(thao tc) thc hin trn kiu
DL
3. Cc kiu d liu c bn
l cc kiu nh sn v c
sn trong mi trng Cc kiu d liu c bn trong C: char - long - float int - double unsign int
nhau bng cch kt hp theo nguyn tc no n struct. C php khai bo struct struct tn_cu_trc { //m t cc thnh phn }; struct date { int ngay; int thang; int nam; };
IV: nh gi phc tp
phc tp thut ton c th hin
qua khi lng thi gian v khng gian thc hin thut ton.
Khng gian: yu cu b nh, thit b lu tr, Thi gian: tng thi gian cn thit hon thnh thut ton
thao tc c s dng trong thut ton trn b d liu u vo c gi l phc tp tnh ton Cc thao tc c xem xt: so snh hai i lng cng, tr, nhn, chia
nht cn thc hin thut ton k hiu: T(n) Trng hp xu nht: l thi gian ln nht cn thc hin K hiu: t(n) Trng hp trung bnh: tnh cho trng hp tng qut
*K hiu O
Thng thng khng quan tm n con s chnh xc
thi gian thc hin ca thut ton. M quan tm n khi tng kch c ca d liu u vo th thi gian thc hin tng nh th no? V d: t(n) = 20n2+5n+1 T(n) = n2+10n+1 nh ngha Cho hai hm s thc f v g c min xc nh trong tp N. Ta vit f(n) O(g(n)) v ni f(n) c cp cao nht l g(n) hay f(n) thuc lp O(g(n)), khi c mt hng s C sao cho: | f(n) | C. | g(n) |
V d: t(n) = 20n2 + 5n+1 v T(n)=n2+10n+1 th t(n) v T(n) c cp cao nht l n2 t(n) O(n2) v T(n) O(n2)
*Cc lp phc tp c bn
phc tp hng: O(1) phc tp logarit: O(log2 n) phc tp tuyn tnh: O(n) phc tp nlogn: O(n log2 n) phc tp a thc: O(nb) phc tp ly tha: O(bn) phc tp giai tha: O(n!)
phn t th nht, th hai, th ba, ca dy s cho n khi hoc tm thy phn t x hoc so snh n phn t cui cng ca dy m k tm thy
b.Thut ton
u vo:
x l ga tr cn tm n s phn t mng a mng cha cc phn t u ra: v tr cha phn t x (nu c) Bc 1: i = 0 Bc 2: so snh a[i] vi x, c 2 kh nng; nu a[i]=x => tm thy x v dng nu a[i]x => chuyn sang bc 3 Bc 3: i = i+1 //xt phn t k tip C 2 kh nng: i>=n: ht mng, ko tm thy => Dng i<n: chuyn sang bc 2
c. Ci t
Kt qu hm tr li v tr u tin tm thy
int LineSearch(int a[ ], int n, int x) { int i=0; while((i<n)&&(a[i]!=x) i++; if (i==n) return 1; else return i; }
e. V d minh ha
Cho dy s a:
i=0
x=2
4
i=1
3
x=2
4
i=2
2
x=2
4
=> Dng
b.Thut ton
u vo:
x l ga tr cn tm n s phn t mng a mng cha cc phn t c sp xp tng dn left, right l ch s u v cui ca mng thc hin tm middle ch s phn t gia ca an cn tm u ra: v tr cha phn t x (nu c)
Bc 1: Khi u tm kim trn tt c cc phn t ca dy left = 0 v right = n - 1 Bc 2: Tnh middle = (left + right)/2. So snh a[middle] vi x. C 3 kh nng: a[middle] = x Tm thy => Dng a[middle] > x tip tc tm x trong dy con mi vi right = middle - 1 a[middle] < x tip tc tm x trong dy con mi vi left = middle + 1 Bc 3: Nu left right dy cn phn t tip tc quay li bc 2 tm kim tip Ngc li Dy hin hnh ht phn t v dng thut ton
c. Ci t
int BinarySearch(int a[ ], int n, int x) { int left=0, right=n-1; int middle; do { middle=(left+right)/2; if (x==a[middle]) break; else if (x<a[middle]) right=middle-1; else left=middle+1; } while (left<=right); if (left<=right) return middle; else return 1; //ko tm thy phn t x }
S ln so snh
1
Gii thch
phn t gia ca mng vi phn t x Phn t cn tm nm cui mng hoc khng tm thy Xc xut cc phn t trong a nhn gi tr x l nh nhau
log2n
log2(n/2)
e. V d minh ha
Cho dy s a:
x=8
8
x=8
2. Thut ton
u vo:
n s phn t mng a mng cha cc phn t bt k u ra: a- mng c sp xp tng dn Bc 1: i = 0 Bc 2: tm phn t a[min] nh nht trong dy hin hnh t a[i] n a[n-1] Bc 3: Hon v a[i] vi a[min] Bc 4: nu i<n-1 th i = i+1 v lp li bc 2 ngc li th n-1 phn t c sp xp => Dng thut ton
3. Ci t
void SelectionSort(int a[ ], int n) { int vtmin, i, j, tg; for(i=0;i<n-1;i++) { vtmin=i; for(j=i+1; j<n; j++) if (a[j]<a[vtmin]) vtmin=j; if(vtmin!=i) //Hon i phn t a[vtmin] vi a[i] { tg=a[vtmin]; a[vtmin]=a[i]; a[i]=tg; } } }
4. nh gi thut ton
Trng hp Tt nht Xu nht Trung bnh S ln so snh n(n-1)/2 n(n-1)/2 n(n-1)/2 S ln hon v 0 n(n-1)/2 n(n-1)/4
5. V d minh ha
Cho dy s a:
a=1
12
15
Gi s c dy a0, a1,,ai-1 c sp xp. tng ca thut ton l chn thm phn t mi ai vo v tr thch hp ca on a1ai-1 sao cho c dy mi a1ai c sp xp
Nguyn tc sp xp nh sau: on gm phn t a0 c sp xp, thm a1 vo c a0,a1 c sp xp, tip tc thm a2 vo c a0, a1, a2 sp xptip tc thm an vo c a0,a1,,an sp xp.
2.Thut ton
u vo: n s phn t mng u ra:
Bc 1: i=1 //gi s a[0] c sp xp Bc 2: tm v tr pos thch hp trong on t a[0] n a[i-1] chn a[i] vo Bc 3: i ch cc phn t t a[pos] n a[i-1] sang phi mt v tr c v tr chn a[i] vo Bc 4: chn a[i] vo v tr pos tm c bng cch gn a[pos]=a[i] Bc 5: i=i+1 Nu i<n => lp li bc 2 Ngc li => Dng thut ton
void InsertionSort(int a[ ], int n) { int pos,i,x; for(i=1;i<n;i++) { x=a[i]; pos=i-1; while((pos>=0)&&(a[pos]>x)) //tm v tr chn a[i] { a[pos+1]=a[pos]; pos--; } a[pos+1]=x; //chn x vo dy } }
3. Ci t
4. nh gi thut ton
Trng hp
Tt nht Xu nht
S ln so snh
S ln hon v
n-1 n2 + n 2
2(n-1) n2 + n 4 2 n2 +9n 10 4
-1
Trung bnh
n2 + n - 2 4
5. V d minh ha
Cho dy s a:
V. Sp xp ni bt
1. tng
Xut pht t u dy hay cui dy v tin hnh i ch cp phn t k cn nhau a phn t nh hn hoc ln hn v v tr cao nht hay thp nht trong dy. Sau khi chuyn v tr ny khng xt na => Lp li qu trnh ny khi dy ko cn phn t no na
2. Thut ton
Bc 1: i = 0 Bc 2: j = n-1 //duyt t cui n pt th i Trong khi j>i thc hin nu a[j] < a[j-1] th hon i hai phn t j=j-1 Bc 3: i=i+1 Nu i>=n-1 => Ht dy v dng thut ton Ngc li lp li bc 2
3. Ci t
void BubbleSort(int a[ ], int n) { int i,j,tg; for(i=0;i<n-1;i++) for(j=n-1;j>i;j--) if ( a[ j ] < a[ j-1] ) { tg = a[ j ]; a[ j ] = a[ j-1]; a[ j-1 ] = tg; }
4. nh gi thut ton
Trng hp S ln so snh n(n-1) S ln hon v
Tt nht Xu nht
0
n(n-1) 2
2
n(n-1) 2
5. V d minh ha
Cho dy s a:
a=2 12 8 5 15 Sp xp dy tng dn
2 i=0
12 j=6
i=0
j=4
i=0
j=3
i=0
j=2
i=0
j=1
i=1
j=5
i=1
j=4
i=1
j=3
i=2
j=5
i=2
j=4
i=3
j=6
i=3
j=5
i=4
j=6
i=5
VI. Sp xp vi di bc gim dn
1. tng
2. Gii thut 3. Ci t
4. V d
5. Nhn xt
VI. Sp xp vi di bc gim dn
1. tng: Da trn tng sp xp theo PP
chn
Phn chia dy ban u thnh nhng dy con cc phn t cch nhau h v tr Dy ban u : a1 a2 an c xem nh s xen k cc dy con sau :
Dy con th nht : a1 ah+1 a2h+1 Dy con th hai : a2 ah+2 a2h+2 . Dy con th h : ah a2h a3h
VI. Sp xp vi di bc gim dn
2. Gii thut:
Bc 1 : Chn k khong cch h[1], h[2],,h[k] v i=1. Bc 2 : Phn chia dy ban u thnh cc dy con cch nhau h[i] khong cch. Sp xp tng dy con bng phng php chn trc tip. Bc 3 : i=i+1; Nu i>k : dng. Nu i<=k : lp li bc 2.
VI. Sp xp vi di bc gim dn
3. Ci t: Gi s chn c dy di h[1], h[2],,h[k], void ShellSort (int a[], int N, int h[], int k) { int step,i,j; int x,len; for (step=0;step<k, step++) { len=h[step]; for (i=len;i<N; i++) { x=a[i]; j=i-len; while (x<a[j])&&(j>-1) { a[j+len]=a[j]; j=j-len; } a[j+len]=x; } } }
4. V d minh ha
Cho dy s a:
1 8 3 2 7 6 5 Cng vic sp xp dy trn bng thut ton shell sort vi di bc l 5, 3, 1 c tin hnh nh sau:
5. Nhn xt
Hiu qu ca thut ton con ph thuc vo
dy cc di c chn. Trong trng hp chn dy di theo cng thc hi = ( hi-1 -1)/2 v hk =1, k= log2n -1 Th gii thut c phc tp n1,2 << n2.
2. Gii thut
3. Ci t 4. V d 5. Nhn xt
1. tng
Phn hoch dy a1 a2 an thnh 3 thnh phn :
- Dy con 1 : Gm cc phn t a1 ai c gi tr khng ln hn x.(<x) - Dy con 2 : Gm cc phn t aj an c gi tr khng nh hn x.(>x) -day con thu 3: ai,..aj=x Vi x l gi tr ca mt phn t tu trong dy ban u. Sau khi phn hoch, dy ban u c chia lm 3 phn : ak < x, vI k=1..i ak = x, vI k=i..j ak > x, vI k=j..N
2. Gii thut
Gii thut sp xp mt dy alar
dy con :
Bc 2 :
2. Gii thut
Gii thut phn hoch mt dy alar thnh 2
dy con: Bc 1 : Chn tu a[k] lm gi tr mc l<=k<=r X = a[k]; i=l, j=r Bc 2 : Pht hin v hiu chnh cp phn t a[i], a[j] nm sai ch: Bc 2a : Trong khi a[i] <x i++; Bc 2b : Trong khi a[j]>x j--; Bc 2c : Nu i<j Hon v (a[i],a[j]) Bc 3 : Nu i<j : Lp li bc 2. Nu i>=j : dng.
3. Ci t
4. V d
void QuickSort (int a[], int l, int r) Cho dy s a: { int i,j,x; 4 9 3 7 5 3 8 x=a[(l+r)/2]; i=l; j=r; j i ji i j do 4 9 3 7 5 3 8 { while (a[i]<x) i++; while (a[j]>x) j--; x r if (i<=j) l { HoanVi(a[i],a[j]); on l = 0, r =3, x = a[1] = 3 i++; 4 3 3 5 j--; on l = 4, r =6, x = a[5] = 9 } } while (i<j); 7 9 8 if (l<j) QuickSort(a,l,j); Kt qu if (i<r) QuickSort(a,i,r); 3 3 4 5 7 8 9 }
5. Nhn xt
Hiu qu ca gii thut Quick Sort ph thuc
Xu nht
n2
2. Gii thut
3. Ci t 4. V d 5. Nhn xt
ngha l mt dy cc phn t a1, a2, ..., an tha cc quan h : ai <= a2i. ai <= a2i+1 {(ai, a2i), (ai, a2i+1) l cc cp phn t lin i} V c cc tnh cht sau : Tnh cht 1: Phn t a1 (u Heap) lun l phn t nh nht trong Heap Tnh cht 2: Ct b mt s phn t v pha phi ca Heap th dy con cn li vn l mt Heap.
V d Heap:
A[7]=(2,3,5,6,4,1,7) A[7]=(1,3,2,6,4,5,7)
Khng l Heap
L Heap
Bc 1: a phn t nh nht v v tr ng cui dy. Hon v(a1,aN); Bc 2:Loi b phn t nh nht ra khi dy: N = N-1; Hiu chnh phn cn li ca dy t a1, a2,, an thnh mt heap. Bc 3: Nu N > 1 (heap cn phn t ): lp li bc 1. Ngc li: Dng
V d: A[7]=(2,3,5,6,4,1,7)
Giai on 1:Hiu chnh dy s ban u thnh heap;
A[7]=(1,3,2,6,4,5,7)
3 6 4
1 2 5 7
2
2 5
4 5
V d: A[7]=(2,3,5,6,4,1,7)
Bc 3: N=6 > 1 (heap cn phn t ): lp li bc 1. 2 7
V d: A[7]=(2,3,5,6,4,1,7)
Bc 3: N=4 > 1 (heap cn phn t ): lp li bc 1. 4 6 7 5 6 5 7
V d: A[7]=(2,3,5,6,4,1,7)
Bc 3: N=2 > 1 (heap cn phn t ): lp li bc 1. 6 7 7
A[7]=(7,6,5,4,3,2,1)
3. Ci t
Hiu chnh dy a1,..., aN thnh heap:
Th tc h tr
void Shift(int a [ ],int l, int r) { int x, i, j, cont; i = l; j = 2*i+1; cont = 1; //(ai,aj),(ai,aj+1)l cc phn t lin i x = a[i ]; while ((j<=r) and (cont)) { if (j <r) //nu c 2 phn t lin i if (a[j]>a[j+1) //xc nh phn t lin i nh nht a[j] j=j+1; //tha quan h lin i ,dng hiu chnh if (a[j]>x) cont = 0; else { honv(a[i],a[j]); i = j; //xt tip kh nng hiu chnh lan truyn j=2*i+1; } } }
4. V d
Chy chng trnh minh ho
5. Nhn xt
Vic nh gi gii thut Heapsort rt phc
tp. Nhng chng minh c trong trng hp xu nht phc tp gn bng nlog2n.
I. Gii thiu
Cc i tng d liu khng thay i c kch
thc, cu trc trong qu trnh sng c gi l cc kiu d liu tnh. T chc kt hp d liu vi nhng kch thc linh ng hn, c th thay i kch thc, cu trc trong sut thi gian sng c gi l cu trc d liu ng.
Kiu con tr
Cho trc kiu T=<V,O>. Kiu con tr, k
VP = {{ cc a ch c th lu tr nhng i tng c kiu T},NULL} (vi NULL l mt gi tr c bit tng trng cho mt gi tr khng bit hoc khng quan tm ). OP = {cc thao tc nh a ch ca mt i tng thuc kiu T khi bit con tr ch n i tng }.
kiu danh sch TX gm cc phn t thuc kiu T c nh ngha l: TX = < VX , OX > Trong :
VX = { tp hp c th t gm mt s bin ng cc phn t kiu T }. OX = { to danh sch; tm 1 phn t trong danh sch; chn 1 phn t vo danh sch; hu 1 phn t khi danh sch; lit k danh sch, sp xp danh sch.}.
1. Danh sch n
1.1T chc danh sch n Mi phn t ca danh sch n l mt cu trc cha 2 thnh phn chnh: - Info: lu tr cc thng tin v bn thn phn t. - Next: lu tr a ch ca phn t k tip trong danh sch, hoc lu tr gi tr NULL nu l phn t cui danh sch. Ta c nh ngha tng qut : typedef struct NODE { Data Info; //Data l kiu c nh ngha struct NODE *Next;//Con tr ch n NODE }node;
phn t u ds, nn ta gi Head l u xu(ds). Ta c th khai bo : node *Head; Con tr Tail gi a ch phn t cui xu. Ta khai bo nh sau : node *Tail; Lc ny ta c xu n :
Head
Tail
void InsertFirst(LIST &Head, LIST &Tail, node *new_element) { if (head==NULL) { head=new_element; Tail=Head; } else { new_element->Next=Head; Head=new_element; } }
Tail
void InsertEnd(LIST &Head, LIST &Tail, node *new_element) { if (head==NULL) { Head=new_element; Tail=new_element; } else { Tail->Next=new_element; Tail=new_element; } }
void InsertAfter(LIST &Head, LIST &Tail, node *q, node *new_element) { if (q!=NULL) { new_element->Next=q->Next; q->Next=new_element; if (q==Tail) Tail=new_element; } }
void DeleteAfter(LIST &Head, LIST &Tail, node *q) { node *p; if (q!=NULL) { p=q->Next; if (p!=NULL) { if (p==Tail) Tail=q; q->Next=p->Next; free(p); } } }
Hu mt phn t c kho k
B1: p=Search(Head,k); // p l phn t c kho
B2.1.1: Head=p->Next; B2.1.2: free(p); B2.2.1: q=SearchPre(Head,p) //tm phn t q ng trc p trong xu. B2.2.2 DeleteAfter(Head, Tail, q);
Tm mt phn t trc pt p
node *SearchPre(LIST &Head,node *p)
{
node *q; q=Head; while(q->next!=p) q=q->next; return q; }
c thc hin khi x l cc phn t ca danh sch theo cng mt cch thc. Duyt danh sch (v x l tng phn t) thc hin nh sau : void ProcessList(LIST &Head) node *p; p=Head; //p ch vo u danh sch while (p!=NULL) //trong khi cha ht danh sch { ProcessNode(p); //x l c th tu yu cu ca bi ton (in ra , kim tra, tnh ton,...) p=p->Next; //i n phn t tip theo }
g. Sp xp danh sch
Phng n 1 :
Hon v ni dung cc phn t trong danh sch ( thao tc trn vng Info ). Phng n 2 : Thay i cc mi kin kt ( thao tc trn vng Next).
Phng n 1 : Hon v ni dung cc phn t trong danh sch ( thao tc trn vng Info ).
C th chn mt trong nhng thut ton sp xp bit
B1: Khi to danh sch mi Result l rng; B2: Tm trong danh sch c Head phn t min l phn t nh nht; B3: Tch min khi danh sch Head; B4: Chn min vo cui danh sch Result; B5: Lp li bc 2 khi cha ht danh sch Head;
nt q
hm tr v NULL nu khng tm thy node* Search(node *Head, Data x) { node *p; p = Head; //i t u danh sch do { if (p->Info==x) return p; p=p->Next; } while (p!=Head); //trong khi cha ht danh sch return NULL; //khng tm thy x }
3. Danh sch kp
3.1. T chc lu tr Danh sch kp l danh sch m mi phn t trong danh sch c th kt ni vi 1 phn t ng trc v 1 phn t ng sau n. nh ngha: typedef struct NODE { Data Info; struct NODE *Pre; //Pre lin kt vi phn t ng struct NODE *Next; //Next lin kt vi phn t ng sau } node;
void InsertRight(node *&q, node *newelement) { if (q==NULL) q=newelement; else { newelement->Next=q->Next; if (q->Next!=NULL) q->Next->Pre=newelement; q->Next = newelement; newelement->Pre=q; } }
void Delete_p (node *&Head, node *p) { if (p->Pre==NULL) Head=p->Next; else { if (p->Next==NULL) p->Pre->Next=NULL; else { p->pre->Next=p->Next; p->Next->Pre=p->Pre; } } free(p); }
III. Stack
1. nh ngha Stack l mt danh sch m 2 php thm v loi b u c thc hin trn mt u. Phn t no thm vo sau s b loi b trc, nn Stack cn c gi l danh sch LIFO (Last In First Our list) hoc Pushdown list.
1 2 3 4
3 2 1
stack
* Khi to stack
Khi khi to, stack l rng, v ch s ca cc phn t t 0 -> MAX -1 nn ta cho sp = -1. Ci t void Initialize(Stack &S) { S.sp = -1; }
dung NewInfo vo Stack Thc hin: xy dng hm Push, hm tr v gi tr -1 nu Stack y v tr v gi tr ca v tr phn t mi thm vo.
Ci t
int push(Stack &S, Data NewInfo) { if (S.sp < (MAX 1)) //Ngn xp cha y { S.sp++; S.item[S.sp] = NewInfo; return S.sp; } return -1; //Ngn xp y }
Stack ra Thc hin: gim ch s con tr sp ca Stack i mt n v Xy dng hm Pop tr li gi tr -1 nu Stack rng hoc tr li gi tr 1 cng thng tin ca phn t trong Stack
Ci t :
int pop(Stack &S, Data >) { if (S.sp >= 0) //ngn xp khng rng { gt = S.item[S.sp];//ly phn t trn cng S.sp--; //gim ch s phn t trn cng return 1; } return -1; //ngn xp rng }
a. T chc d liu
Stack l mt danh sch lin
kt c khai bo nh sau:
typedef struct ITEM { Data Info; struct ITEM *Next; }A; typedef A *Stack; Stack S;
* Khi to stack
Khi khi to, stack l rng, ta cho S = NULL.
Ci t
IV. Queue_Hng i
1. nh ngha
vo c thc hin u ny v loi b c thc hin u kia. Nh vy, phn t no vo trc s c loI b trc, phn t no vo sau s c loi b sau, nn hng i cn c gi l danh sch FIFO (First In First Out list).
a. T chc d liu
#define MAX 30 typedef struct tagQueue { Data item[MAX]; int head; }queue; queue Q;
0
...........
head
MAX -1
b. Khi to hng i
Khi khi to, hng i l rng, ta cho head bng -1. Ci t void Initialize(queue &Q) { Q.head = -1; }
a. T chc d liu
typedef struct ITEM { Data Info; struct ITEM *Next; }item; item *head, *tail;
head tail
b. Khi to hng i
Khi khi to, hng i l rng, ta cho head v tail c gi tr NULL. Ci t void Initialize(item &head, item &tail) { head = NULL; tail = NULL; }
head
tail
tail
Ci t
int Insert(item &head, item &tail, Data NewInfo) { item *i; i = (item*)malloc(sizeof(item)); if (i == NULL) return 1; iInfo = NewInfo; if (tail == NULL) //hang doi chua co phan tu nao { iNext = NULL; tail = i; head = i; } else //Hang doi da co phan tu { tailNext = i; tail = i; i->Next=NULL; } return 1; }
int remove(item *&head, item *&tail, Data &x) { item* i; if (head == NULL) return 1; x = headInfo;//Luu lai dia chi phan tu da lay de xoa di i = head; //Di chuyen contro head ve phan tu ngay phia sau head = iNext; free(i); //Huy phan tu da lay ra return 1; }
head head tail
CHNG V
CY_TREE
I. Cy
1. nh ngha Cy l mt tp hp T cc phn t (gi l nt ca cy) trong c mt nt c bit gi l gc, cc nt cn li c chia thnh nhng tp ri nhau T1, T2,, Tn theo quan h phn cp trong Ti cng l cy.
2. Mt s khi nim c bn
Bc ca mt nt : l s con ca nt . Bc ca mt cy : l bc ln nht ca cc nt
l gc.
2. Mt s khi nim c bn
Mc ca mt nt :
Mc (gc(T))=1.
Gi T1,T2,T3,.,Tn l cy con ca T0.
Mc
(T1)=Mc(T2)=Mc(T3)==Mc(Tn)=Mc(T0)+1
- di ng i t gc n nt x l s nhnh
cn i qua k t gc n x.
Rng cy: l tp hp nhiu cy trong th t
cc cy l quan trng.
II. Cy nh phn
1. nh ngha Cy nh phn l cy m mi nt c ti a 2 cy con. 2. Biu din cy nh phn Thng tin lu ti nt : Info. a ch nt gc ca cy con tri trong b nh : L. a ch nt gc ca cy con phi trong b nh : R.
struct
tagNODE
Duyt theo th t trc ( Node-Left-Right) Duyt theo th t gia ( Left-Node-Right) Duyt theo th t sau ( Left-Right-Node)
Tm mt phn t x trong cy
Thm mt phn t x vo cy Hu mt phn t c kho x
tri sau thm n cy con phi ri cui cng mithm nt gc. Th tc duyt c th trnh by n gin nh sau: void LRN(TREE Root) { if (root!=NULL) { LRN(RootLeft); LRN(RootRight); <X l Root>; //Xl tng ng theo nhu cu } }
d. Tm mt phn t x trong cy
tm mt phn t x trong cy ta ch n thun
duyt qua cc phn t cho n khi tm thy x. NODE *SearchTree(TREE Root, DATA x) { NODE *p=Root; while (p!=NULL) { if (x = =pInfo) return p; else if (x<pInfo) p=pLeft; else p=pRight; } return NULL; }
e. Thm mt phn t x vo cy
void AddTree(TREE &Root, DATA x) { if (Root!=NULL) { if (x==RootInfo) //Bo X b trng"; else if (x<RootInfo) AddTree(RootLeft,x); else AddTRee(RootRight,x); } else { Root = (NODE*)malloc(sizeof(NODE)); RootInfo = x; RootLeft = NULL; RootRight = NULL; } }
f. Hu mt phn t c kho x
Bc 1 : Tm phn t p c kho x.
Bc 2 : C 3 trng hp :
p l nt l : hu p. p c 1 con : to lin kt t phn t cha ca p n con ca p
ri hu p.
p c 2 con : tm phn t th mng cho p theo nguyn tc: "Phn t th mng phi nht ca cy con tri ca p (phn
Ci t
void DelNode(TREE &Root, DATA x) { NODE *q; If (Root==NULL) Bo cy rng; else { if (x<RootInfo) DelNode(RootLeft,x); else if (x>RootInfo) DelNode(RootRight,x); else { q=Root; if (qRight==NULL) Root=qLeft; else if (qLeft==NULL) Root-qRight; else SearchStandFor(RootLeft,q); free(q); } }
IV. Cy cn bng
nh ngha Cy nh phn tm kim cn bng l cy m ti mi nt ca n cao ca cy con tri v ca cy con phi chnh lch khng qu mt.
THE END.
V d: A[7]=(2,3,5,6,4,1,7)// slile 21
Bc 3: N=6 > 1 (heap cn phn t ): lp li bc 1. 2 7 3 7
3 3
7 4 3
6 6
4 4
7 2
4 7