0
K
K
THU
THU
T L
T L
P TRÌNH
P TRÌNH
THUT TOÁN
CU TRÚC DLIU
1
N
N
I DUNG
I DUNG
Thut toán
Kiudliuvàcutrúcdliu
Mi liên hgiathuttoánvàcutrúcdliu
Kiu con trtrong C
Sdng kiuarray trongC
Kiu xâu kí ttrong C
Sdng struct trong C
2
KH
KHÁ
ÁI NI
I NI
M THU
M THU
T TO
T TOÁ
ÁN
N
Thut toán (giithut) là mt quy tcđể vinhng d
liu ban đầuđã cho, tìm đượcligiisaumtkhong
thigianhuhn
Bài toán
Thut toán
Máy tính
D liu vào Kết qu ra
3
Tính kết thúc (tính dng)
Tính xác định
Tính phdng
Tính hiuqu
Thchin nhanh
Tiêu phí ít tài nguyên máy tính (bnh)
C
CÁ
ÁC Đ
C Đ
C TRƯNG C
C TRƯNG C
A THU
A THU
T TO
T TOÁ
ÁN
N
4
C
CÁ
ÁC Đ
C Đ
C TRƯNG C
C TRƯNG C
A THU
A THU
T TO
T TOÁ
ÁN
N
Thut toán tìm UCLN ca hai snguyên dương
1. Nhpvàohaisnguyên dương a, b
2. So sánh hai s, chnsnhnhtgn cho UCLN
3. Nếumt trong hai sa, b không chia hếtchoUCLN thìthc
hinbước4, ngượclithìthchinbước5
4. GimUCLN mtđơnv quay libước3
5. In UCLN. Kếtthúc
?Các đặctrưng cathuttoántrên
5
TIÊU CHU
TIÊU CHU
N Đ
N ĐÁ
ÁNH GI
NH GIÁ
ÁTHU
THU
T TO
T TOÁ
ÁN
N
Lachnthut toán nào cho bài toán?
Tiêu chun1: Thut toán đơngin, dhiu, dcài đặt
Tiêu chun2: Thuttoánsdng tiếtkim tài nguyên
máy tính (dung lượng không gian nh, thi gian)
6
NGÔN NG
NGÔN NG
THU
THU
T TO
T TOÁ
ÁN
N
Ngôn ngdùng để tthut toán
?Ti sao phi dùng ngôn ngdinđạtthut toán
?Đặcđimca ngôn ngdinđạtthut toán
Ngôn nglitkêtng bước(Ngônngtnhiên)
Sơđkhi
Ngôn ng“gicode”: TaPascal, taC,
Các bước trong chương trình nên đượcđánh stht
thbqua phn khai báo dliu, thay vào đólàđặctcutrúcdliu
trướckhiviếtgiithut
tthut toán
Thut toán: <Tên thut toán>
Vào (Input): <Dliuvàocathut toán, mô t kiudliu>
Ra (Output): <Các dliura-Kếtqu>
7
NGÔN NG
NGÔN NG
THU
THU
T TO
T TOÁ
ÁN
N
Ngôn nglitkêtng bước
Thut toán: Euclid
Vào: m,n nguyên dương (m > n)
Ra: gcd ước chung lnnhtca m và n
r: snguyên dương
Bước1. Nhpvàom, n
Bước2. Nếu m, n >0 thì chuyn sang bước3, ngượcli thì thông báo
“Dliu vào không hpl”vàkết thúc thuttoán
Bước3. Nếu m > n thì chuyn sang bước4. Ngượcli, hoán chuyn
giá trcam, n
Bước4. Nếu n = 0 thì gcd = m, in giá trca gcd kếtthúc. Ngượcli,
chuyn sang bước5.
Bước 5. Tính r là phndưcaphépchiam chon
Bước 6. Gán giá trca n cho m và car chon. Quay libước4.
8
NGÔN NG
NGÔN NG
THU
THU
T TO
T TOÁ
ÁN
N
Sơđkhi
Đi
Đi
u
uki
ki
n
n
L
L
nh
nh N
Nú
út
tthao
thao t
tá
ác
c
Ch
Ch
hư
hư
ng
ng truy
truy
n
nthông
thông tin
tin
N
Nú
út
tđi
đi
u
uki
ki
n
n
N
Nú
út
tb
b
t
tđ
đ
u
u,
, n
nú
út
tk
kế
ết
tth
thú
úc
c
9
NGÔN NG
NGÔN NG
THU
THU
T TO
T TOÁ
ÁN
N
Thut toán Euclid
Sai
Sai
Đúng
Đúng
Bt đầu
Nhp m, n
m, n >0
m >= n
n = 0
gcd = m
In gcd
r = m mod n
m = n
n = r
r = m
m = n
n = r
Kết thúc
Thông báo
D liu vào
không hp l
Sai Đúng
10
NGÔN NG
NGÔN NG
THU
THU
T TO
T TOÁ
ÁN
N
Ngôn ngTa Pascal
Khai báo: Program < Tên chương trình>
Begin …….
End.
Chú thích {….}
Phép toán shc: +, - *, /, (lutha)
Phép toán so sánh: >, >=, <, <=, =,
Giá trlogic: true, false
Phép toán logic: and, or, not
11
NGÔN NG
NGÔN NG
THU
THU
T TO
T TOÁ
ÁN
N
Các câu lnh
Câu lnh gán V := E;
V: biến, E: biuthc
Phép gán chung: V1 := V2 := E;
Câu lnh điukin if B then S1 [else S2];
Câu lnh tuyn Case
B1: S1;
B2: S2;
….
Bn: Sn;
else Sn+1
end case;
12
NGÔN NG
NGÔN NG
THU
THU
T TO
T TOÁ
ÁN
N
Câu lnh lp
Slnlpbiếttrước for i := m to n do ….
for i := n down to m do….
Slnlp không biếttrước while B do S;
repeat S until B;
(B: biuthc logic; S: dãy lnh)
Câu lnh chuyn
go to n; (n:shiucamtbướctrongchương trình)
Câu lnh vào ra
read(<danh sách biến>);
write(<danh sách biuthc>)
13
NGÔN NG
NGÔN NG
THU
THU
T TO
T TOÁ
ÁN
N
Chương trình con
Hàm
function <tên hàm>(<danh sách tham s>): <kiudliu>
S
return <biuthc>
Thtc Procedure: không kếtqura
Sdng Var đặttrướcthamscngilisthay đổigiátrsau
khi kếtthúcthchin hàm/thtc
Ligi Hàm Tên_hàm(<danh sách tham sthcs>)
Ligithtc Call <Tên thtc>(<danh sách tham sthcs>)
14
Đ
Đ
PH
PH
C T
C T
P THU
P THU
T TO
T TOÁ
ÁN
N
Giithut nào hiuqunhtchomt bài toán?
Độ phctpthigian
Độ phctp không gian
?Đánh giá giithutkhichychương trình ???
Các yếutốảnh hưởng đếnthigianthchinthut toán
Môi trường phncng: tcđộ xlý, bnh,…
Môi trường phnmm: kiulnh, ngôn ng, trình biên dch
Kích thướcdliuvào
Đánh giá độ phctpthigianT(n) bng tng sphép
tính cnphithchin.
15
Độ tăng cahàm
Cho hai hàm f(x), g(x) xác định ttpcácsnguyên dương hoctp
sthcvàotpsthc. Ta nói f(x) là O(g(x)) nếutnti hai hng s
C và k sao cho: |f(x)| C.|g(x)|, vimix > k.
d1
f(x) = anxn+…. +a0, via
i các sthc. Khi đóf(x) = O(x
n).
vi x > 1 ta
ĐặtC = |a
n| + |an1| + … + |a0| và k = 1, suy ra f(x) = O(xn).
d2.
f(x) = 1+ 2+ 3 + … + n = n(n+1)/2 nên O(n2).
Đ
Đ
PH
PH
C T
C T
P THU
P THU
T TO
T TOÁ
ÁN
N
)....(
...(
...)(
01
01
0
1
1
aaax
x
a
x
a
ax
axaxaxf
nn
n
n
n
n
n
n
n
n
n
+++
+++
+++
16
Đ
Đ
PH
PH
C T
C T
P THU
P THU
T TO
T TOÁ
ÁN
N
Các thutngthường dùng
Độ phctpO(1) gilàđộ phctphng s
Độ phctp O(log(n)) gilàđộ phctp logarit
Độ phctpO(n) gilàđộ phctptuyến tính
Độ phctp O(nlogn) gilàđộ phctpnlogn
Độ phctpO(n
k) gilàđộ phctpđathc
Độ phctpO(b
n) , b>1, gilàđộ phctp hàm mũ
Độ phctpO(n!) gilàđộ phctpgiaitha
17
Đ
Đ
PH
PH
C T
C T
P THU
P THU
T TO
T TOÁ
ÁN
N
d1
K:=0;
For i:=1 to n do
Begin
K:=K+i;
End;
d2
K:=0;
For i:=1 to n do
For j:= 1 to n do
Begin
K := K + i * j ;
End;
18
Đ
Đ
PH
PH
C T
C T
P THU
P THU
T TO
T TOÁ
ÁN
N
d3
i :=1; K:=0;
while i <= n do
begin
K:= K+ i*i;
i := i * 2;
end;
Sphép toán cnthchin:
(1 so sánh + 2 nhân + 1 cng) * (1 + |log2n|) = 4 + 4 |log2n| là
O(log2n).
19
d4
Searching(A[]: array of integer, n: integer, integer K): Boolean
Begin
i := 1; found := false;
while (i <=n and !found) do
begin
if A[i] = K then found:=true;
else i := i+1;
end;
return found;
end;
Đ
Đ
PH
PH
C T
C T
P THU
P THU
T TO
T TOÁ
ÁN
N