You are on page 1of 129

A

CU TRC D LIU V
GII THUT (501040)

B
F
D
E

G
K
H

Gii thiu
Mn hc gii thiu:
Cc cu trc d liu c bn
Cc gii thut in hnh trn cc cu trc d liu

Dng phng php hng i tng.


Ngn ng lp trnh minh ho:
M gi (pseudocode)
C++ (khng c ging dy chnh thc trong mn
hc)

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

Ni dung
Chng 1. Tng quan
Chng 2. Stack
Chng 3. Queue
Chng 4. qui
Chng 5. List v String
Chng 6. Cy nh phn
Chng 7. Tm kim
Chng 8. Sp xp

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

Mt s thut ng cn bn
Mt chng trnh my tnh (computer program)
l tp cc cu lnh iu khin mt my tnh
sinh ra mt kt qu c th
Vit cc chng trnh my tnh gi l lp trnh
my tnh (computer programming)
Ngn ng to cc chng trnh my tnh gi
l ngn ng lp trnh
Software l mt chng trnh hay tp hp cc
chng trnh
Programming Fundamentals
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

4
Gii thiu mn hc

Ngn ng my
Cp thp nht. Cc chng trnh bao gm 0, 1.
Lp trnh bng ngn ng my c th iu khin
trc tip n phn cng my tnh
V d
00101010 000000000001 000000000010
10011001 000000000010 000000000011
Instruction part
address parts (a ch b nh
(opcode tc v
ca d liu
c thc hin)Programming Fundamentals
5

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

Assembly languages
Thc hin cng nhim v ngn ng my nhng
s dng tn tng trng cho opcode v cc
ton t thay v 1, 0
LOAD BASEPAY
ADD OVERPAY
STORE GROSSPAY
Chng trnh ngn ng assembly phi c
dch sang ngn ng my trc khi c th thc
thi bi my tnh
Programming Fundamentals
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

6
Gii thiu mn hc

Assembler

Assembly
language
program

Translation
program
(assembler)

Programming Fundamentals
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Machine
language
program

7
Gii thiu mn hc

Ngn ng lp trnh cp cao


S dng cc cu lnh d hiu hn.
Cc chng trnh s dng ngnn ng cp cao
phi c dch sang ngn ng cp thp bng
cch s dng mt chng trnh gi l compiler

Programming Fundamentals
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

8
Gii thiu mn hc

High-level Programming Languages


(cont.)
Cho php ngi lp trnh vit cc cu lnh nh
cu ting Anh v cc k hiu ton hc thng
dng
Mi dng trong chng trnh ngn ng mc
cao gi l cu lnh
Example:

Result = (First + Second)*Third

Programming Fundamentals
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

9
Gii thiu mn hc

Phn mm ng dng v phn


mm h thng
2 loi chng trnh my tnh
Application software bao gm nhng chng trnh
c vit thc thi cc nhim v c th c yu
cu bi user

System software l tp cc chg trnh phi lun


c sn sng n bt k h thng my tnh cho
n vn hnh (h iu hnh, b chuyn i ngn
ng)
Programming Fundamentals
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

10
Gii thiu mn hc

10

PROGRAMMING LANGUAGES
Mt s ngn ng thng dng
FORTRAN
COBOL
BASIC
PASCAL
C
C++
Java

1957
1960s
1960s
1971 Structure programming
Object-oriented programming

C php (syntax)
C php ca mt ngn ng lp trnh l tp cc lut vit cc cu
lnh chnh xc
Programming Fundamentals
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

11
Gii thiu mn hc

11

The C Programming Language


In the 1970s, at Bell Laboratories, Dennis Ritchie and Brian
Kernighan designed the C programming language.
C was used exclusively on UNIX and on mini-computers. During the
1980s, C compilers were written for other flatforms, including PCs.
To provide a level of standardization for C language, in 1989, ANSI
created a standard version of C, called ANSI C.
One main benefit of C : it is much closer to assembly language
other than other high-level programming languages.
The programs written in C often run faster and more efficiently than
programs written in other high-level programming language.

Programming Fundamentals
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

12
Gii thiu mn hc

12

The C++ Programming Language


In 1985, at Bell Laboratories, Bjarne Stroutrup created C++ based on
the C language. C++ is an extension of C that adds object-oriented
programming capabilities.
C++ is now the most popular programming language for writing
programs that run on Windows and Macintosh.
The standardized version of C++ is referred to as ANSI C++.

The ANSI standards also define run-time libraries, which contains


useful functions, variables, constants, and other programming items
that you can add to your programs.
The ANSI C++ run-time library is called Standard Template Library or
Standard C++ Library
Programming Fundamentals
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

13
Gii thiu mn hc

13

Gii thut
Dng C++ din t? c vn
C th din t gii thut bng cch s dng
flowchart
Flow chart th hin nt pht tho cu trc cn bn v
tnh logic ca chng trnh
Mt cch khc din t gii thut l s dng m
gi pseudocode
Gi lp, thng l d hiu, khng chi tit n cc k thut
lp trnh
cp ht sc tng qut: gn ngn ng t nhin
Hoc rt chi tit: nh dng ngn ng ta Pascal, ta C++
Programming Fundamentals
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

14
Gii thiu mn hc

14

Gii thut (Algorithm)


15

Cc tnh cht quan trng ca gii thut l:


Hu hn (finiteness): gii thut phi lun lun kt thc
sau mt s hu hn bc.
Xc nh (definiteness): mi bc ca gii thut phi
c xc nh r rng v phi c thc hin chnh
xc, nht qun.
Hiu qu (effectiveness): cc thao tc trong gii thut
phi c thc hin trong mt lng thi gian hu
hn.
Ngoi ra mt gii thut cn phi c u vo (input) v
u ra (output).

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

15

Flowchart symbols
Terminal
Input/output

Connector

Process

Flowlines

Predefined process

Decision

Programming Fundamentals
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

16
Gii thiu mn hc

16

Example
Start

Input Name,
Hours, Rate

Calculate
Pay Hours Rate

Note: Name, Hours


and Pay are variables
in the program.

Dislay
Name, Pay

End
Programming Fundamentals
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

17
Gii thiu mn hc

17

Algorithms in pseudo-code
S dng cc cm t nh ting Anh m t
pseudocode.
Example:
Input the three values into the variables Name,
Hours, Rate.
Calculate
Pay = Hours Rate.
Display Name and Pay.
Programming Fundamentals
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

18
Gii thiu mn hc

18

Loops

Note:
1.Loop is a very important
concept in programming.

Start

2.NUM NUM + 1 means

NUM 4
SQNUM NUM2

Print
NUM, SQNUM

old value of NUM + 1


becomes new value of NUM.
The algorithm can be described
in pseudocode as follows:
NUM 4

NUM NUM + 1

do
SQNUM NUM2

No
NUM> 9?
Yes

Print NUM, SQNUM


NUM NUM + 1
while (NUM <= 9)

STOP

Programming Fundamentals
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

19
Gii thiu mn hc

19

Gii thut bng m gi


V d: M gi ca bubble sort
Gii thut 1

Gii thut 2

Algorithm Bubble sort


Input: The list A of n elements is
given
Output: The list A is sorted

Algorithm Bubble sort


Input: The list A of n elements is
given
Output: The list A is sorted

1. loop for n time


1.1. for each pair in the list
1.1.1. if it is not in ordered
1.1.1.1. exchange them
End Bubble sort

1. for outter in 0..(n-2)


1.1. for inner in 0..(n-2- outter)
1.1.1. if Ainner+1 < Ainner
1.1.1.1. swap Ainner, Ainner+1
End Bubble sort

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

20

Gii thut bng ngn ng lp trnh


V d: Lp trnh c th Bubble sort
Gii thut 1: Pascal

Gii thut 2: C++

procedure BubbleSort(var A: list);


var i,j: int;
begin
for i := 1 to n-1 do
for j := 1 to (n-1-i) do
if A[j+1] < A[j] then
begin
tmp := A[j]; A[j] := A[j+1];
A[j+1] := tmp;
end;
end;

void BubbleSort(list A)
{
int i, j;
for (i=0; i < n-2; i++)
for (j=0; j<(n-2-i); j++)
if (A[j+1] < A[j]) {
tmp := A[j]; A[j] := A[j+1];
A[j+1] := tmp;
}
}

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

21

So snh m gi v NNLT
Nhn xt:
M gi 1: gn vi cch trao i ca con ngi nht
nhng kh lp trnh nht
M gi 2: d lp trnh hn

Phng php:
u tin: cch gii quyt vn bng my tnh s
(gii thut bng m gi)
Sau : ngn ng lp trnh c th

Hc:
Nh gii thut (m gi)
Dng NNLT c th minh chng
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

22

Gii bi ton bng phn mm


1. Xc nh bi ton
2. Thit k phn mm
3. Thit k d liu
4. Thit k v phn tch gii thut
5. Lp trnh v g ri
6. Kim tra phn mm
7. Bo tr

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

23

Lp trnh hng i tng (OOP)


Chng trnh = tp cc i tng tng tc nhau.
i tng (object) = thuc tnh + tc v
local data
of object
i tng
(object)
entry
local data
of operation
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

24

Kiu tru tng


Kiu tru tng (abstract type): nh ngha
interface (tp cc entry)
Entry
Tn method
Danh sch tham s hnh thc
c t chc nng

Cha c d liu bn trong, cha dng c


Ch dng thit k nim

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

25

Hin thc v s dng


Class: hin thc ca abstract type
nh ngha cc d liu
nh ngha cc phng thc + hm ph tr (ni b)
nh ngha cc phng phc constructor v
destructor nu cn

i tng = mt instance ca mt class


Thng ip (message):
dng tng tc ln nhau = li gi phng thc ca
cc i tng
Student aStudent;
aStudent.print();

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

26

Cu trc d liu
(1) L mt cch t chc v lu tr d liu hp l s dng
mt cch hiu qu,
(2) Tp cc thao tc truy cp cc thnh phn d liu.
V d:
Mng (Array)
Danh sch lin kt (Linked List)
Ngn xp (Stack)
Hng i (Queue)
Cy (Tree)

(1) the logical arrangement of data elements, combined with


(2) the set of operations we need to access the elements.

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

27

Mi quan h ca CTDL v thut ton


28

CTDL + Thut ton = Chng trnh

Cu trc d liu c th: chn gii thut


Gii thut c th: chn cu trc d liu
Khi c cu trc d liu tt v gii thut ph hp th xy
dng chng trnh ch ph thuc thi gian.
Mt chng trnh my tnh ch hon thin khi c y
cu trc d liu v gii thut.

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

28

Kiu d liu tru tng v cu


trc d liu
Abstract data type: ,t nh ngha mc cao cc
kiu d liu
Tp cc d liu
Tp cc thao tc trn d liu hoc tp con d liu
Khng th hin cch hin thc bn trong

Cu trc d liu: C th hn, mt k thut hay


chin slc hin thc abstract data type
V d: abstract stack (push, pop, isEmpty, size)
S dng array hay danh sch lin kt hin thc
lp stack (ArrayStack)
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

29

c im ca OOP
Tnh bao ng:
Che du cu trc d liu bn trong.
Che du cch thc hin thc i tng.

K tha:
nh ngha thm cc d liu v phng thc cn
thit t mt class c sn.
Cho php override/overload.
Cho php dng thay th v kh nng dynamic biding.

Bao gp:
Mt i tng cha nhiu i tng khc.
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

30

Cu trc ca i tng

Internal data
Internal function
method
Internal function

method

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

method

Gii thiu mn hc

31

Khai bo mt class trn C++


class Student {
private:
int StudentID;
string StudentName;
public:
Student();
Student(const Student &)
~Student()
void operator=(const Student &)
void print();
};
void main() {
Student aStudent;
sStudent.print();
}
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

khai bo mt lp mi
khai bo d liu bn trong
constructor
copy constructor
destructor
overload assignment operator
phng thc (hnh vi)

khai bo mt i tng
gi phng thc

Gii thiu mn hc

32

Dng ghi ch lm r ngha


1. Ghi ch vo u mi hm
(a) Ngi lp trnh, ngy, bn sao
(b) Mc ch ca hm
(c) Input, output
(d) Cc ch dn n cc ti liu khc (nu c)
C th dng dng: Precondition v Postcondition

2. Ghi ch vo mi bin, hng, kiu


3. Ghi ch vo mi phn ca chng trnh
4. Ghi ch mi khi dng cc k thut c bit
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

33

Dng ghi ch lm r ngha V d


void Life::update()
/* Pre: grid ang cha mt trng thi ca thc th sng
Post: grid s cha trng thi tin ha mi ca thc th sng ny */
{
int row, col;
int new_grid[maxrow + 2][maxcol + 2];
//Cha trng thi mi vo y
for (row = 1; row <= maxrow; row++)
for (col = 1; col <= maxcol; col++)
switch (neighbor_count(row, col)) {
case 2:
//Trng thi ca t bo khng i
new_grid[row][col] = grid[row][col]; break;
case 3:
//T bo s sng
new_grid[row][col] = 1; break;
default:
//T bo s cht
new_grid[row][col] = 0;
}
for (row = 1; row <= maxrow; row++)
for (col = 1; col <= maxcol; col++)
grid[row][col] = new_grid[row][col];
//Cp nht cc t bo cng lc
}
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

34

A
C

CU TRC D LIU V
GII THUT (501040)

B
F
D
E

Chng 2: Stack

G
K
H

M t stack
Mt stack l mt cu
trc d liu m vic
thm vo v loi b
c thc hin ti
mt u (gi l nh
top ca stack).
L mt dng vo sau
ra trc LIFO (Last
In First Out)

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

36

V d v stack
Stack rng:
y (push) Q vo:

y A vo:

Q
A

Ly (pop) ra mt => c A:

Ly ra mt => c Q v stack rng:

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

37

ng dng: o ngc danh sch


Yu cu: o ngc mt danh sch nhp vo
Gii thut:
1. Lp li n ln
1.1. Nhp vo mt gi tr
1.2. y n vo stack
2. Lp khi stack cha rng
2.1. Ly mt gi tr t stack
2.2. In ra

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

38

o ngc danh sch V d


Cn nhp 4 s vo
Nhp 1
Ban u

Nhp 5

5
1

1
Ly ra => 3

Ly ra => 7

3
7

5
1

5
1

H Bch Khoa Tp.HCM

Ly ra => 5

Khoa Cng ngh Thng tin

5
1

Nhp 7

Nhp 3

3
7

5
1

5
1

Ly ra => 1

Stack rng
Ngng

1
Gii thiu mn hc

39

o ngc danh sch M C++


#include <stack>
using namespace std;
int main( ) {
int n;
double item;
stack<double> numbers;
cout << "Bao nhieu so nhap vao? "
cin >> n;
for (int i = 0; i < n; i++) {
cin >> item;
numbers.push(item);
}
while (!numbers.empty( )) {
cout << numbers.top( ) << " ";
numbers.pop( );
}}
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

s dng STL
(Standard Template Library)
khai bo mt stack c kiu d liu
ca cc phn t bn trong l double

y mt s vo trong stack
kim tra xem stack c khc rng khng
ly gi tr trn nh ca stack ra,
stack khng i
ly gi tr trn nh ca stack ra khi stack,
nh ca stack by gi l gi tr k tip
Gii thiu mn hc

40

Kiu tru tng (abstract data type)


N1: Mt kiu (type)
mt tp hp
mi thnh phn ca tp hp ny l cc gi tr (value)
V d: int, float, char l cc kiu c bn

N2: Mt dy ca kiu T
c chiu di bng 0 l rng
c chiu di n (n>=1): b th t (Sn-1, t)
Sn-1: dy c chiu di n-1 thuc kiu T
t l mt gi tr thuc kiu T.

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

41

Stack tru tng


Mt stack kiu T:
Mt dy hu hn kiu T
Mt s tc v:
1. Khi to stack rng (create)
2. Kim tra rng (empty)
3. y mt gi tr vo trn nh ca stack (push)
4. B gi tr ang c trn nh ca stack (pop)
5. Ly gi tr trn nh ca stack, stack khng i (top)

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

42

Thit k stack
enum Error_code {fail, success, overflow, underflow};
template <class Entry>
class Stack {
public:
Stack();
//constructor
bool empty() const;
//kim tra rng
Error_code push(const Entry &item);
//y item vo
Error_code pop();
//b phn t trn nh
Error_code top(Entry &item);
//ly gi tr trn nh
//khai bo mt s phng thc cn thit khc
private:
//khai bo d liu v hm ph tr ch ny
};

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

43

Thit k cc phng thc


template <class Entry>
bool Stack<Entry>::empty() const;
Pre: Khng c
Post: Tr v gi tr true nu stack hin ti l rng, ngc li th tr v false
template <class Entry>
Error_code Stack<Entry>::push(const Entry &item);
Pre: Khng c
Post: Nu stack hin ti khng y, item s c thm vo nh ca stack.
Ngc li tr v gi tr overflow ca kiu Error_code v stack khng i.
template <class Entry>
Error_code Stack<Entry>::pop() const;
Pre: Khng c
Post: Nu stack hin ti khng rng, nh ca stack hin ti s b hy b.
Ngc li tr v gi tr underflow ca kiu Error_code v stack khng i.
template <class Entry>
Error_code Stack<Entry>::top(Entry &item) const;
Pre: Khng c
Post: Nu stack hin ti khng rng, nh ca stack hin ti s c chp vo tham
bin item. Ngc li tr v gi tr fail ca kiu Error_code.
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

44

Hin thc stack lin tc

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

45

Khai bo stack lin tc


const int maxstack = 10;

//small number for testing

template <class Entry>


class Stack {
public:
Stack( );
bool empty( ) const;
Error_code pop( );
Error_code top(Entry &item) const;
Error_code push(const Entry &item);
private:
int count;
Entry entry[maxstack];
};

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

46

y mt phn t vo stack
Gii thut:
1. Nu cn ch trng trong stack
1.1. Tng v tr nh ln 1
1.2. Cha gi tr vo v tr nh ca stack
1.3. Tng s phn t ln 1

7
top

5
1

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

count=3
count=2

Gii thiu mn hc

47

B phn t trn nh stack


Gii thut:
1. Nu cn phn t trong stack
1.1. Gim v tr nh i 1
1.2. Gim s phn t i 1

top

7
5
1

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

count=2
count=3

Gii thiu mn hc

48

Thm/B phn t - M C++


template <class Entry>
Error_code Stack<Entry>:: push(const Entry &item) {
if (count >= maxstack)
return overflow;
else
entry[count++] = item;
return success;
}
template <class Entry>
Error_code Stack<Entry>:: pop() {
if (count == 0)
return underflow;
else
count--;
return success;
}
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

49

Ly gi tr trn nh stack
Gii thut:
1. Nu cn phn t trong stack
1.1. Tr v gi tr ti v tr nh

M C++:
template <class Entry>
Error_code Stack<Entry>:: top(Entry &item) {
if (count == 0)
return underflow;
else
item = entry[count - 1];
return success;
}
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

50

Reverse Polish Calculator


M t bi ton:
Cc ton hng c c vo trc v y vo stack
Khi c vo ton t, ly hai ton hng ra t stack,
tnh ton vi ton t ny, ri y kt qu vo stack

Thit k phn mm:


Cn mt stack cha ton hng
Cn hm get_command nhn lnh t ngi dng
Cn hm do_command thc hin lnh

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

51

Reverse Polish Calculator


Thit k chc nng
Tp lnh:
?: c mt gi tr ri y vo stack
Ton t +, -, *, /: ly 2 gi tr trong stack, tnh
ton v y kt qu vo stack
Ton t =: in nh ca stack ra
q: kt thc chng trnh

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

52

Reverse Polish Calculator V d


Tnh ton biu thc: 3 5 + 2 * =
5
3
Ban u

2
8

Ton t ?
Ton t ?
Nhp vo 3 Nhp vo 5

Khoa Cng ngh Thng tin

Ton t +
Ly ra 5 v 3
Tnh 3 + 5 => 8

2
8

Ton t ? Ton t *
Nhp vo 2 Ly ra 2 v 8
Tnh 8 * 2 => 16
H Bch Khoa Tp.HCM

5
3

16
y vo 16

y 8 vo

16
Ton t =
In ra 16
Gii thiu mn hc

53

Reverse Polish Calculator


Hm get_command
char get command( ) {
char command;
bool waiting = true;
cout << "Select command and press < Enter > :";
while (waiting) {
cin >> command;
command = tolower(command);
if (command == ? || command == = || command == + ||
command == || command == * || command == / ||
command == q) waiting = false;
else {
cout << "Please enter a valid command:" << endl
<< "[?]push to stack [=]print top" <<endl
<< "[+] [] [*] [/] are arithmetic operations" << endl
<< "[Q]uit." << endl;
}
}
return command;
}
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

54

Reverse Polish Calculator


Gii thut tnh ton vi ton t
Algorithm Op_process
Input: ton t op, stack cha cc ton hng
Output: stack cha cc ton hng sau khi tnh xong ton t op
1. Nu stack khng rng
1.1. Ly nh stack ra thnh p
1.2. B phn t trn nh stack
1.3. Nu stack rng
1.3.1. y p ngc li
1.3.2. Bo li v thot
1.4. Ly nh stack ra thnh q
1.5. B phn t trn nh stack
1.6. Tnh ton (q op p)
1.7. y kt qu vo stack
End Op_process
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

55

Reverse Polish Calculator


M C++ cho ton t cng
if (numbers.top(p) == underflow)
cout << "Stack rng";
else {
numbers.pop( );
if (numbers.top(q) == underflow) {
cout << "Stack ch c 1 tr;
numbers.push(p);
}
else {
numbers.pop( );
if (numbers.push(q + p) == overflow)
cout << "Stack y;
}
}

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

56

Reverse Polish Calculator


Chng trnh chnh
#include "stack.cpp"
//prototype
void introduction( );
void instructions( );
char get_command( );
bool do_command(char command, Stack<double> &numbers);
int main( ) {
Stack<double> stored_numbers;
introduction( );
instructions( );
while (do_command(get_command( ), stored_numbers));
}
//implementation

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

57

Reverse Polish Calculator


Hm do_command
bool do_command(char command, Stack &numbers) {
double p, q;
switch (command) {
case '?:
cout << "Enter a real number: " << flush; cin >> p;
if (numbers.push(p) == overflow)
cout << "Warning: Stack full, lost number" << endl; break;
case '=:
if (numbers.top(p) == underflow) cout << "Stack empty" << endl;
else cout << p << endl; break;
// Add options for further user commands.
case q: cout << "Calculation finished.\n"; return false;
}
return true;
}
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

58

A
C

CU TRC D LIU V
GII THUT (501040)

B
F
D
E

Chng 3: Queue

G
K
H

M t queue
Mt queue l mt cu trc d liu m vic thm vo c thc
hin mt u (rear) v vic ly ra c thc hin u cn li
(front)
Phn t vo trc s ra trc FIFO (First In First Out)

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

60

Queue tru tng


Mt queue kiu T:
Mt dy hu hn kiu T
Mt s tc v:
1. Khi to queue rng (create)
2. Kim tra rng (empty)
3. Thm mt gi tr vo cui ca queue (append)
4. B gi tr ang c u ca queue (serve)
5. Ly gi tr u ca queue, queue khng i (retrieve)

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

61

Thit k queue
enum Error_code {fail, success, overflow, underflow};
template <class Entry>
class Queue {
public:
Queue();
//constructor
bool empty() const;
//kim tra rng
Error_code append(const Entry &item); //y item vo
Error_code serve();
//b 1 phn t u
Error_code retrieve(Entry &item);
//ly gi tr u
//khai bo mt s phng thc cn thit khc
private:
//khai bo d liu v hm ph tr ch ny
};

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

62

Thit k cc phng thc


template <class Entry>
bool Queue<Entry>::empty() const;
Pre: Khng c
Post: Tr v gi tr true nu queue hin ti l rng, ngc li th tr v false
template <class Entry>
Error_code Queue<Entry>::append(const Entry &item);
Pre: Khng c
Post: Nu queue hin ti khng y, item s c thm vo cui ca queue.
Ngc li tr v gi tr overflow ca kiu Error_code v queue khng i.
template <class Entry>
Error_code Queue<Entry>::serve() const;
Pre: Khng c
Post: Nu queue hin ti khng rng, u ca queue hin ti s b hy b.
Ngc li tr v gi tr underflow ca kiu Error_code v queue khng i.
template <class Entry>
Error_code Queue<Entry>::retrieve(Entry &item) const;
Pre: Khng c
Post: Nu queue hin ti khng rng, u ca queue hin ti s c chp vo tham
bin item. Ngc li tr v gi tr underflow ca kiu Error_code.
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

63

M rng queue
C thm cc tc v:
Kim tra y (full)
Tnh kch thc (size)
Gii phng queue (clear)
Ly gi tr u v b ra khi queue (serve_and_retrieve)

M C++:
template <class Entry>
class Extended_queue: public Queue<Entry> {
public:
C cc kh nng public,
bool full( ) const;
protected, private
int size( ) const;
void clear( );
Error_code serve_and_retrieve(Entry &item);
};
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

64

Tnh tha hng


Dng tnh tha hng:
Extended_queue c y cc thnh phn ca Queue
Thm vo cc thnh phn ring ca mnh

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

65

Queue lin tc
Dng mt array: C xu hng di v cui array
Hai cch hin thc u tin:
Khi ly mt phn t ra th ng thi di hng ln mt v tr.
A

Ban u

Ly ra 1 phn t:
di tt c v trc

Thm vo 1 phn t

Ch di hng v u khi cui hng khng cn ch


A

Ban u

H Bch Khoa Tp.HCM

Ly ra 1 phn t

Khoa Cng ngh Thng tin

Thm vo 1 phn t:
di tt c v trc
trng ch thm vo
Gii thiu mn hc

66

Queue l array vng (circular array)

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

67

Array vng vi ngn ng C++


Xem array nh l mt vng:
phn t cui ca array ni vi phn t u ca array

Tnh ton v tr k:
i = ((i + 1) == max) ? 0 : (i + 1);
if ((i + 1) == max) i = 0; else i = i + 1;
i = (i + 1)%max;

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

68

iu kin bin ca queue vng

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

69

Mt s cch hin thc queue lin tc


Mt array vi front l phn t u v tt c cc phn t
s c di ln khi ly ra mt phn t.
Mt array c hai ch mc lun tng ch n phn t u
v cui.
Mt array vng c ch mc front v rear v mt lun
trng.
Mt array vng c ch mc front v rear v mt c (flag)
cho bit queue l y (rng) cha.
Mt array vng vi ch mc front v rear c cc gi tr
c bit cho bit queue ang rng.
Mt array vng vi ch mc front v rear v mt s
cha s phn t ca queue.
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

70

Hin thc queue lin tc


const int maxqueue = 10; // small value for testing
template <class Entry>
class Queue {
public:
Queue( );
bool empty( ) const;
Error_code serve( );
Error_code append(const Entry &item);
Error_code retrieve(Entry &item) const;
protected:
int count;
int front, rear;
Entry entry[maxqueue];
};
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

71

Khi to v kim tra rng


Khi to:
template <class Entry>
Queue<Entry>::Queue( ) {
count = 0;
rear = maxqueue 1;
front = 0;
}

Kim tra rng:


template <class Entry>
bool Queue<Entry>::empty( ) const {
return count == 0;
}
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Dng bin count


bit s phn t
trong queue

Gii thiu mn hc

72

Thm mt gi tr vo queue
Gii thut:
1. Nu hng y
1.1. Bo li overflow
2. Tnh ton v tr cui mi theo array vng
3. Gn gi tr vo v tr cui mi ny
4. Tng s phn t ln 1
4. Bo success
front
A

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

rear
B

Gii thiu mn hc

73

Loi mt gi tr khi queue


Gii thut:
1. Nu hng rng
1.1. Bo li underflow
2. Tnh ton v tr u mi theo array vng
3. Gim s phn t i 1
3. Bo success

front
A

H Bch Khoa Tp.HCM

rear
B

Khoa Cng ngh Thng tin

Gii thiu mn hc

74

Thm/loi mt gi tr M C++
template <class Entry>
Error_code Queue<Entry>::append(const Entry &item) {
if (count >= maxqueue) return overflow;
count++;
rear = ((rear + 1) == maxqueue) ? 0 : (rear + 1);
entry[rear] = item;
return success;
}
template <class Entry>
Error_code Queue<Entry>::serve() {
if (count <= 0) return underflow;
count;
front = ((front + 1) == maxqueue) ? 0 : (front + 1);
return success;
}
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

75

ng dng: Gi lp phi trng


M t:
1. S dng hng i runway cho vic ct v h cnh.
2. Mt my bay c th ct hoc h cnh trong mt
n v thi gian.
3. Ti mt thi im, s my bay n l ngu nhin.
4. My bay h cnh c u tin trc my bay ct
cnh.
5. Cc my bay ch ct/h cnh c cha vo cc
hng i tng ng v vi s lng gii hn.

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

76

Gi lp phi trng Hng i


enum Runway_activity {idle, land, takeoff};
class Runway {
public:
Runway(int limit);
Error_code can_land(const Plane &current);
Error_code can_depart(const Plane &current);
Runway_activity activity(int time, Plane &moving);
void shut_down(int time) const;
private:
Extended queue landing;
Extended queue takeoff;
int queue_limit;

};

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

77

Gi lp phi trng H cnh


Error_code Runway :: can_land(const Plane &current) {
Error_code result;
if (landing.size( ) < queue_limit)
result = landing.append(current);
else
result = fail;
num_land_requests++;
if (result != success)
num_land_refused++;
else
num_land_accepted++;
return result;
}

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

78

Gi lp phi trng X l
Runway_activity Runway::activity(int time, Plane &moving) {
Runway_activity in_progress;
if (!landing.empty( )) {
landing.retrieve(moving);
in_progress = land;
landing.serve( );
} else if (!takeoff.empty( )) {
takeoff.retrieve(moving);
in_progress = takeoff;
takeoff.serve( );
} else
in_progress = idle;
return in_progress;
}

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

79

Gi lp phi trng Gi lp
for (int current_time = 0; current_time < end_time; current_time++) {
int number_arrivals = variable.poisson(arrival_rate);
for (int i = 0; i < number_arrivals; i++) {
Plane current_plane(flight_number++, current_time, arriving);
if (small_airport.can_land(current_plane) != success)
current_plane.refuse( );
}
int number_departures = variable.poisson(departure_rate);
for (int j = 0; j < number_departures; j++) {
Plane current_plane(flight_number++, current_time, departing);
if (small_airport.can_depart(current_plane) != success)
current_plane.refuse( );
}
Plane moving_plane;
switch (small_airport.activity(current_time, moving_plane)) {
case land: moving_plane.land(current_time); break;
case takeoff: moving_plane.fly(current_time); break;
case idle: run_idle(current_time);
}
}
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

80

A
C

CU TRC D LIU V
GII THUT (501040)

B
F
D
E

Chng 4: qui

G
K
H

Khi nim qui


Khi nim (nh ngha) qui c dng li chnh
n.
V d: giai tha ca n l 1 nu n l 0 hoc l n nhn
cho giai tha ca n-1 nu n > 0

Qu trnh qui gm 2 phn:


Trng hp c s (base case)
Trng hp qui: c gng tin v trng hp c
s

V d trn:
Giai tha ca n l 1 nu n l 0
Giai tha ca n l n * (giai tha ca n-1) nu n>0
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

82

Tnh giai tha


nh ngha khng qui:
n! = n * (n-1) * * 1

nh ngha qui:
n! =

1
n * (n-1)!

nu n=0
nu n>0

M C++:
int factorial(int n) {
if (n==0) return 1;
else
return (n * factorial(n - 1));
}
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

83

Thi hnh hm tnh giai tha


factorial (3)
n=3
factorial (2)

n=2
3*factorial(2)

6
2

factorial (1)
n=1

2*factorial(1)

factorial (0)

1*factorial(0)

n=0

return 1;

1
1

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

84

Trng thi h thng khi thi hnh hm


tnh giai tha
Stack h thng
factorial(0)
factorial(1) factorial(1) factorial(1)
factorial(2) factorial(2) factorial(2) factorial(2) factorial(2)
factorial(3) factorial(3) factorial(3) factorial(3) factorial(3) factorial(3) factorial(3)
t
Thi gian h thng

Gi hm
Gi hm
factorial(3) factorial(2)

Tr v t
Gi hm
Gi hm
hm
factorial(1) factorial(0) factorial(0
)

Tr v t
hm
factorial(1
)

Tr v t
hm
factorial(2
)

Tr v t
hm
factorial(3
)
t

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

85

Bi ton Thp H ni
Lut:
Di chuyn mi ln mt a
Khng c t a ln ln trn a nh

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

86

Bi ton Thp H ni Thit k hm


Hm qui:
Chuyn (count-1) a trn nh ca ct start sang ct
temp
Chuyn 1 a (cui cng) ca ct start sang ct finish
Chuyn count-1 a t ct temp sang ct finish

magic

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

87

Bi ton Thp H ni M C++


void move(int count, int start, int finish, int temp) {
if (count > 0) {
move(count 1, start, temp, finish);
cout << "Move disk " << count << " from " <<
start
<< " to " << finish << "." << endl;
move(count 1, temp, finish, start);
}
}

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

88

Bi ton Thp H ni Thi hnh

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

89

Bi ton Thp H ni Cy qui

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

90

Thit k cc gii thut qui


Tm bc chnh yu (bc qui)
Tm qui tc ngng
Phc tho gii thut
Dng cu lnh if la chn trng hp.

Kim tra iu kin ngng


m bo l gii thut lun dng li.

V cy qui
Chiu cao cy nh hng lng b nh cn thit.
S nt l s ln bc chnh yu c thi hnh.
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

91

qui ui (tail recursion)


nh ngha: cu lnh thc thi cui cng l li gi
qui n chnh n.
Kh: chuyn thnh vng lp.

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

92

Kh qui ui hm giai tha

Gii thut:
product=1
for (int count=1; count < n; count++)
product *= count;

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

93

Dy s Fibonacci
nh ngha:
F0 = 0
F1 = 1
Fn = Fn-1 + Fn-2 khi n>2

V d: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,


Hm qui:
int fibonacci (int n) {
if (n<=0) return 0;
if (n==1) return 1;
else return (fibonacci(n-1) + fibonacci(n-2));
}
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

94

Dy s Fibonacci Cy thi hnh


tnh ri

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

95

Dy s Fibonacci Kh qui
Nguyn tc:
Dng bin lu tr gi tr tnh ca Fn-2
Dng bin lu tr gi tr tnh ca Fn-1
Tnh Fn = Fn-1 + Fn-2 v lu li dng cho ln sau

Gii thut:
int Fn2=0, Fn1=1, Fn;
for (int i = 2; i <= n; i++) {
Fn = Fn1 + Fn2;
Fn2 = Fn1; Fn1 = Fn;
}
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

96

A
C

CU TRC D LIU V
GII THUT (501040)

B
F
D
E

Chng 5: Danh sch v chui

G
K
H

Danh sch tru tng


Mt danh sch (list) kiu T
Mt dy hu hn kiu T
Mt s tc v:
1. Khi to danh sch rng (create)
2. Kim tra rng (empty)
3. Kim tra y (full)
4. Tnh kch thc (size)
5. Xa rng danh sch (clear)
6. Thm mt gi tr vo danh sch ti mt v tr c th (insert)
7. Ly mt gi tr ti mt v tr c th ra khi danh sch (remove)
8. Nhn v gi tr ti mt v tr c th (retrieve)
9. Thay th mt gi tr ti mt v tr c th (replace)
10. Duyt danh sch v thi hnh mt tc v ti mi v tr (traverse)
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

98

Thit k cc phng thc

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

99

Ch s cc phn t
nh ch s mt danh sch c n phn t:
nh ch s t 0, 1, cc phn t
V d: a0, a1, a2, , an-1
Phn t aidx ng sau aidx-1 v trc aidx+1 (nu c)

Dng ch s:
Tm thy mt phn t, tr v v tr (ch s) ca n.
Thm vo mt phn t ti v tr idx th ch s cc
phn t c t idx tr v sau u tng ln 1.
Ch s ny c dng bt k danh sch c hin
thc th no cp vt l.
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

100

Phng thc insert v remove

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

101

Phng thc retrieve v replace

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

102

Phng thc traverse v tham s


hm

void print_int(int &x) { cout << x << ; }


void increase_int(int &x) { x++; }
void main() {
List<int> alist;

alist.traverse(print_int);

alist.traverse(increase_int);

}
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Khi gi tham s hm,


chng trnh dch phi
nhn thy hm c gi.
Ty theo mc ch m gi
cc hm khc nhau.

Gii thiu mn hc

103

Hin thc danh sch lin tc


template <class List_entry>
class List {
public:
// methods of the List ADT
List( );
int size( ) const;
bool full( ) const;
bool empty( ) const;
void clear( );
void traverse(void (*visit)(List_entry &));
Error_code retrieve(int position, List_entry &x) const;
Error_code replace(int position, const List_entry &x);
Error_code remove(int position, List_entry &x);
Error_code insert(int position, const List_entry &x);
protected:
// data members for a contiguous list implementation
int count;
List_entry entry[max_list];
};
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

104

Thm vo mt danh sch lin tc


z
0

count=9
count=8

insert(3, z)

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

105

Gii thut thm vo mt danh sch


lin tc
Algorithm Insert
Input: position l v tr cn thm vo, x l gi tr cn thm vo
Output: danh sch thm vo x
1. if list y
1.1. return overflow
2. if position nm ngoi khong [0..count]
2.1. return range_error
//Di tt c cc phn t t position v sau 1 v tr
3. for index = count-1 down to position
3.1. entry[index+1] = entry[index]
4. entry[position] = x
//Gn x vo v tr position
5. count++
//Tng s phn t ln 1
6. return success;
End Insert
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

106

M C++ thm vo mt danh sch lin


tc
template <class List_entry>
Error_code List<List_entry> :: insert(int position, const List_entry &x) {
if (full( ))
return overflow;
if (position < 0 || position > count)
return range_error;
for (int i = count 1; i >= position; i)
entry[i + 1] = entry[i];
entry[position] = x;
count++;
return success;
}

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

107

Xa t mt danh sch lin tc


x

count=7
count=8

remove(3, x)

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

108

Gii thut xa t mt danh sch lin


tc
Algorithm Remove
Input: position l v tr cn xa b, x l gi tr ly ra c
Output: danh sch xa b phn t ti position
1. if list rng
1.1. return underflow
2. if position nm ngoi khong [0..count-1]
2.1. return range_error
3. x = entry[position]
//Ly x ti v tr position ra
4. count-//Gim s phn t i 1
//Di tt c cc phn t t position v trc 1 v tr
5. for index = position to count-1
5.1. entry[index] = entry[index+1]
6. return success;
End Remove
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

109

Gii thut duyt mt danh sch lin


tc

Algorithm Traverse
Input: hm visit dng tc ng vo tng phn t
Output: danh sch c cp nht bng hm visit
//Qut qua tt c cc phn t trong list
1. for index = 0 to count-1
1.1. Thi hnh hm visit duyt phn t entry[index]
End Traverse

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

110

M C++ duyt mt danh sch lin tc

template <class List_entry>


void List<List_entry> :: traverse(void (*visit)(List_entry &))
/* Post: Tc v cho bi hm visit s c thi hnh ti mi
thnh phn ca list bt u t v tr 0 tr i. */
{
for (int i = 0; i < count; i++)
(*visit)(entry[i]);
}

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

111

Chui (string)
Chui l mt dy cc k t
V d:
This is a string l 1 chui c 16 k t
l mt chui rng (c 0 k t)

Chui tru tng:


C th xem l danh sch
C cc tc v thng dng:
Sao chp (strcpy)
Ni kt (strcat)
Tnh chiu di (strlen)
So snh 2 chui (strcmp)
Tm mt chui trong chui khc (strstr)
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

112

Cy nh phn
Cy nh phn
Cy rng
Hoc c mt node gi l gc (root) v 2 cy con gi
l cy con tri v cy con phi

V d:
Cy rng:
Cy c 1 node: l node gc
Cy c 2 node:

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

113

Cc nh ngha khc
Mc:
Node gc mc 0.
Node gc ca cc cy con ca mt node mc m l
m+1.

Chiu cao:
Cy rng l 0.
Chiu cao ln nht ca 2 cy con cng 1
(Hoc: mc ln nht ca cc node cng 1)

ng i (path)
Tn cc node ca qu trnh i t node gc theo cc
cy con n mt node no .
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

114

Cc nh ngha khc (tt.)


Node trc, sau, cha, con:
Node x l trc node y (node y l sau node x), nu
trn ng i n y c x.
Node x l cha node y (node y l con node x), nu
trn ng i n y node x nm ngay trc node y.

Node l, trung gian:


Node l l node khng c cy con no.
Node trung gian khng l node gc hay node l.

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

115

Cc tnh cht khc


Cy nh phn y , gn y :
y : cc node l lun nm mc cao nht v
cc nt khng l nt l c y 2 nhnh con.
Gn y : Ging nh trn nhng cc node l nm
mc cao nht (hoc trc mt mc) v lp y
t bn tri sang bn phi mc cao nht.

Chiu cao ca cy c n node:


Trung bnh h = [lg n] + 1
y h = lg (n + 1)
Suy bin h = n

S phn t ti mc i nhiu nht l 2i


H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

116

Php duyt cy
Duyt qua tng node ca cy (mi node 1 ln)
Cch duyt:
Chnh thc: NLR, LNR, LRN, NRL, RNL, RLN
Chun: NLR (preorder), LNR (inorder), LRN
(postorder)

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

117

V d v php duyt cy NLR


A
B

I
N

K
O

Kt qu: A B D H I N E J O K C F L P G M
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

118

V d v php duyt cy LNR


A
B

I
N

K
O

Kt qu: H D N I B J O E K A F P L C M G
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

119

V d v php duyt cy LRN


A
B

I
N

K
O

Kt qu: H N I D O J K E B P L F M G C A
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

120

Cy lin kt

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

121

Gii thut duyt cy inorder


Algorithm recursive_inorder
Input: subroot l con tr node gc v hm visit
Output: kt qu php duyt
1. if (cy con khng rng)
1.1. Call recursive_inorder vi nhnh tri ca subroot
1.2. Duyt node subroot bng hm visit
1.3. Call recursive_inorder vi nhnh phi ca subroot
End recursive_inorder

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

122

Cy nh phn tm kim Binary


search tree (BST)
Mt cy nh phn tm kim (BST) l mt cy nh
phn rng hoc mi node ca cy ny c cc
c tnh sau:
1. Kha ca node gc ln (hay nh) hn kha ca
tt c cc node ca cy con bn tri (hay bn phi)
2. Cc cy con (bn tri, phi) l BST

Tnh cht:
Ch cn c tnh 1 l
Duyt inorder s c danh sch c th t

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

123

V d BST
25
10

37

18

6
5

12

29
20

13

50
35

41

32

Duyt inorder: 1 3 5 6 10 12 13 18 20 25 29 32 35 37 41 50
H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

124

Cc tnh cht khc ca BST


Node cc tri (hay phi):
Xut pht t node gc
i sang tri (hay phi) n khi khng i c na

Kha ca node cc tri (hay phi) l nh nht


(hay ln nht) trong BST
BST l cy nh phn c tnh cht:
Kha ca node gc ln (hay nh) hn kha ca node
cc tri (hay cc phi)

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

125

Tm kim trn BST


Chn hng tm theo tnh cht ca BST:
So snh vi node gc, nu ng th tm thy
Tm bn nhnh tri (hay phi) nu kha cn tm nh
hn (hay ln hn) kha ca node gc

Ging phng php tm kim nh phn


Thi gian tm kim
Tt nht v trung bnh: O(lg n)
T nht: O(n)

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

126

Gii thut tm kim trn BST


Algorithm BST_search
Input: subroot l node gc v target l kha cn tm
Output: node tm thy
1. if (cy rng)
1.1. return not_found
2. if (target trng kha vi subroot)
2.1. return subroot
3. if (target c kha nh hn kha ca subroot)
3.1. Tm bn nhnh tri ca subroot
4. else
4.1. Tm bn nhnh phi ca subroot
End BST_search

H Bch Khoa Tp.HCM

Khoa Cng ngh Thng tin

Gii thiu mn hc

127

V d tm kim trn BST


25
10

37

18

6
5

12

29
20

13

50
35

41

32
Ging
Node
gc
nhau
nh hn
ln
hn
Khc nhau

Tm kim 13
H Bch Khoa Tp.HCM

Tm thy

Khoa Cng ngh Thng tin

S node duyt: 5
S ln so snh: 9
Gii thiu mn hc

128

V d tm kim trn BST


25
10

37

18

6
5

12

29
20

13

50
35

41

32
Khc nhau
Node
gc ln
nh hn
hn

Tm kim 14
H Bch Khoa Tp.HCM

Khng tm thy

Khoa Cng ngh Thng tin

S node duyt: 5
S ln so snh: 10
Gii thiu mn hc

129

You might also like