GIỚI THIỆU
Giải thuật
Giới thiệu 1 / 55
Nội dung
1 Khái niệm cơ bản
Bài toán đến chương
trình Giải thuật, lưu đồ
Thuật toán, độ phức
tạp
2
3
4
Giới thiệu 2 / 55
Giới thiệu
Sử dụng máy tính để xử lý dữ liệu
Nhanh hơn, chính xác hơn
Giải quyết bài toán: phức tạp, khối
lượng dữ liệu lớn, khối lượng tính toán
lớn
Phương pháp sử dụng
Nhờ vào thuật toán hiệu quả, thông
minh →
chi phí thấp
Nhờ vào nâng cấp cấu hình máy → chi
phí cao
Giới thiệu 3 / 55
Dữ liệu
Dữ liệu (data): tập hợp số liệu, ký hiệu và
ký tự biểu diễn cho thông tin.
Dữ liệu là thông tin ở dạng có thể chuyển
hoặc xử lý hiệu quả; biểu diễn những thông
tin cần thiết cho bài toán.
Dữ liệu có thể được định nghĩa là giá trị
cơ bản hoặc tập các giá trị.
Giới thiệu 4 / 55
Cấu trúc dữ liệu (data
structure)
Biến (variable): dùng để lưu trữ một
giá trị dữ liệu bất kỳ trong một tập
hợp nào đó.
Kiểu dữ liệu (data types) trong
một ngôn ngữ lập trình: tập giá trị
và tập phép
toán trên các giá trị đó.
Kiểu dữ liệu hệ thống định nghĩa (kiểu
dữ liệu nguyên thủy)
Kiểu dữ liệu dẫn xuất
Giới thiệu 5 / 55
Cấu trúc dữ liệu (data
structure)
Cấu trúc dữ liệu (data structure):
kho lưu trữ được sử dụng để lưu trữ và
tổ chức dữ liệu.
cách sắp xếp dữ liệu trên máy tính để
người dùng có thể truy cập và cập
nhật một cách hiệu quả
Có 02 loại
Cấu trúc dữ liệu tuyến tính (linear
data structure)
Cấu trúc dữ liệu phi tuyến tính (non-linear
data structure)
Giới thiệu 6 / 55
Cấu trúc dữ liệu (data
structure)
Giới thiệu 7 / 55
Cấu trúc dữ liệu (data
structure)
Kiểu dữ liệu trừu tượng (Abstract Data
Types - ADTs) là
Một mô hình toán học cùng với một tập
các phép toán trừu tượng được định
nghĩa trên mô hình đó.
Kiểu do người lập trình tự định nghĩa ở
mức khái niệm và chưa được cài đặt sẵn
bằng ngôn ngữ lập trình.
Tổng quát hóa các kiểu dữ liệu nguyên
thủy.
Giới thiệu 8 / 55
Cấu trúc dữ liệu (data
structure)
Kiểu dữ liệu trừu tượng (Abstract
Data Types - ADTs): cách cài đặt
Cài đặt dữ liệu: bằng 01 cấu trúc dữ liệu
hoặc một ADT đã cài đặt trước.
Cài đặt phép toán
Giới thiệu 9 / 55
Cấu trúc dữ liệu (data
structure)
Các tiêu chuẩn:
Biểu diễn đầy đủ thông tin.
Phù hợp với các thao tác trên đó.
Phù hợp với điều kiện cho phép của ngôn ngữ
lập trình. Tiết kiệm tài nguyên hệ thống.
Vai trò:
CTDL đóng vai trò quan trọng trong việc kết hợp
và đưa ra cách giải quyết bài toán.
CTDL hỗ trợ cho các thuật toán thao tác trên đối
tượng được hiệu quả hơn.
Giới thiệu 10 /
Giải thuật (algorithm)
Giải thuật (algorithm) theo Knuth (1973):
Tập hữu hạn các thao tác (chỉ thị) có nghĩa rõ
ràng để giải một bài toán.
Tính chất của thuật toán
Rõ ràng (unambiguous)
Hữu hạn (finiteness)
Khả thi (feasibility)
Độc lập
(independent) Hiệu
quả (effectiveness)
Đầu vào (input)
Đầu ra (output)
Giới thiệu 11 /
Giải thuật (algorithm)
Ví dụ: tìm tổng tất cả các số nguyên
dương
nhỏ hơn n
Bước 1: S = 0, i = 1
Bước 2: Nếu i < n thì S = S +
1 Ngược lại: chuyển sang
bước 4
Bước 3: i = i + 1, quay lại bước
2 Bước 4: Tổng cần tìm là S
Giới thiệu 12 /
Mô hình hóa bài toán thực
tế Để giải bài toán trong thực tế bằng máy tính
→ xác định bài toán
Giảm bớt sự phức tạp của bài toán thực tế →
mô hình hóa bài toán (phát biểu bài toán
thành một bài toán hình thức hay còn gọi là
mô hình toán)
Ví dụ: bài toán tô màu bản đồ, đèn giao
thông có cùng một mô hình toán.
Giới thiệu 13 /
Mô hình hóa bài toán thực
tế Bài toán tô màu bản đồ: tô màu cho các
phần trên bản đồ sao cho chỉ những phần
liền kề nhau phải được tô bằng hai màu khác
nhau. Sử dụng số màu đã cho với số lượng ít
nhất để tô hết bảng đồ.
Giới thiệu 14 /
Mô hình hóa bài toán thực
tế Bài toán đèn giao thông: ngã 5 mô tả như
hình. C và E là đường 1 chiều, còn lại là hai
chiều. 2 lối đi cắt nhau sẽ xảy ra tai nạn. Đặt
đèn giao thông sao cho mỗi nhóm tạo thành
1 lối đi, có nhiều lối đi đồng thời nhất và các
lối đi này không cắt nhau.
Giới thiệu 15 /
Mô hình hóa bài toán thực tế
Các bài toán trên có thể được quy về bài toán
tô màu đồ thị với 2 đỉnh nối nhau không cùng
màu và số màu là ít nhất.
Giới thiệu 16 /
Mô hình hóa bài toán thực
tế Tìm kiếm cách giải quyết bài toán trong các
chương trình hoặc xây dựng giải thuật.
Giải thuật giải quyết xong công việc khi đưa
input vào.
Các cách biểu diễn thuật toán:
Ngôn ngữ tự nhiên
Lưu đồ (sơ đồ khối,
flowchart) Mã giả
(pseudocode)
Ngôn ngữ lập trình
Giới thiệu 17 /
Biểu diễn bằng ngôn ngữ tự
nhiên
Truyền tải các bước của một thuật
toán Ưu điểm: quen thuộc với
người dùng
Hạn chế: Mơ hồ vì không có cấu trúc; dài
dòng; hiếm khi được sử dụng cho các thuật
toán kỹ thuật, phức tạp.
Không có quy tắc cố định thể hiện giải thuật
→ sử dụng đánh số thứ tự phân cấp và
khoảng trống đầu dòng để việc trình bày rõ
ràng
Giới thiệu 18 /
Biểu diễn bằng ngôn ngữ tự
nhiên
Giới thiệu 19 /
Ví dụ: Tìm số lớn nhất trong danh sách số
nguyên.
Giả sử phần tử đầu tiên là phần tử lớn nhất. Xem
xét từng phần tử còn lại trong danh sách; nếu
phần tử đó lớn hơn phần tử lớn nhất, đánh dấu
lại. Khi tiến trình kết thúc thì phần tử cuối cùng
được đánh dấu là phần tử lớn nhất.
Biểu diễn bằng lưu đồ
Lưu đồ (flowchart) là biểu diễn đồ họa của một
giải thuật; các bước được thiết kế theo các hình
dạng và kích thước khác nhau. Các hộp có hình
dạng khác nhau được kết nối với nhau bằng các
mũi tên một cách hợp lý sẽ tạo ra một lưu đồ.
Ưu điểm:
Đơn giản hóa và làm cho quá trình suy luận
rõ ràng Phân tích hiệu quả
Lập trình và kiểm tra dễ dàng hơn
Hạn chế :
Khó khăn khi sử dụng chương
trình lớn Khó khăn khi sửa đổi
Giới thiệu 20 /
Biểu diễn bằng lưu đồ
Giới thiệu 21 /
Biểu diễn bằng lưu đồ
Điểm cuối (terminal)
cho biết phần bắt đầu và phần kết thúc
của một chương trình hoặc thuật toán.
biểu diễn bằng hình oval; bên trong ghi rõ
Bắt đầu
(Start) hoặc Kết thúc (End)
Giới thiệu 22 /
Biểu diễn bằng
lưu đồ
Thao tác chọn lựa (decision)
đánh giá một điều kiện hoặc một phát biểu;
các nhánh phụ thuộc vào đánh giá là Đúng
(True) hoặc Sai (False).
biểu diễn bằng hình thoi, bên trong chứa
biểu thức điều kiện.
Giới thiệu 23 /
Biểu diễn bằng lưu đồ
Thao tác xử lý (process)
trình bày một bước trong một quy trình,
bước hành động hoặc một hoạt động.
biểu diễn bằng hình chữ nhật, bên trong
chứa nội dung xử lý.
Giới thiệu 24 /
Biểu diễn bằng lưu đồ
Dữ liệu vào ra (Input/Output)
Thể hiện thông tin vào, ra hệ thống.
biểu diễn bằng hình bình hành, bên trong
chứa dữ liệu.
Giới thiệu 25 /
Biểu diễn bằng lưu đồ
Điểm nối (connector)
dùng để nối các phần khác nhau của lưu đồ
lại với nhau.
biểu diễn bằng hình tròn; bên trong ghi ký
hiệu chỉ sự liên hệ giữa các điểm nối.
Giới thiệu 26 /
Biểu diễn bằng lưu đồ
Điểm nối sang trang (off-page connector)
tương tự như điểm nối nhưng được dùng khi
lưu đồ quá lớn phải vẽ trên nhiều trang.
biểu diễn bằng hình ngũ giác; bên trong ghi
ký hiệu chỉ sự liên hệ giữa các điểm nối của
các trang.
Giới thiệu 27 /
Biểu diễn bằng lưu đồ
Đường đi (route)
Khi dùng ngôn ngữ tự
nhiên: quá trình thực
hiện lần lượt từng bước
nối tiếp theo cách diễn
giải.
Biểu diễn bằng lưu đồ:
các bước thể hiện bằng
hình vẽ, đặt hình vẽ bất
kỳ ⇒ phương pháp thể
hiện trình tự thực hiện
Giới thiệu 28 /
Sử dụng mã
giả
Mã giả (pseudocode)
thường được sử dụng trong lập trình và giải
thuật.
phương pháp luận cho phép người lập
trình biểu diễn việc thực hiện một giải
thuật.
việc triển khai giải thuật dưới dạng chú thích
và văn bản thông tin; không có cú pháp giống
ngôn ngữ lập trình nào vì vậy máy tính không
thể biên dịch hoặc thông dịch.
Giới thiệu 29 /
Sử dụng mã giả
“vay mượn” các cú pháp của một ngôn
ngữ lập trình để thể hiện giải thuật.
sử dụng các thuật ngữ if, then, while,
else, loop...
Lập trình viên hoặc chuyên viên CNTT sử
dụng mã giả:
mô tả cách giải thuật hoạt động.
giải thích quy trình thực hiện với những
người dùng thông thường.
thiết kế code cho nhóm làm việc.
Giới thiệu 30 /
Sử dụng mã giả
if ∆ > 0 then
x1 ←
( − b −
√
)
∆
;
x2 ←
2∗√
a
2∗
a
(−b+
)
∆
;
Hiển thị kết quả: phương trình có hai nghiệm là x1
và x2;
end
els
e
i
f
∆
=
0
∗
a
Hiển thị kết quả: phương trình có nghiệm kép
là 2
−b
;
end
else ∆ < 0
Hiển thị kết quả: phương trình vô
nghiệm;
end
end
Giới thiệu 31 /
Sử dụng mã giả
Một số thể hiện thường gặp
if <condition> then <instruction>
câu lệnh chỉ được thực thi nếu điều kiện là
đúng
instruction: một bước mà chương trình thực
hiện
condition: điều kiện mà dữ liệu phải thỏa để
chương trình thực hiện
if ∆ > 0 then
x1 ← ( − b −
√
)
∆
;
2∗
√a
x2 ← (−b+ )
∆
;
Hiển thị
2∗a
quả: phương trình có hai nghiệm là
và ;
kết
x1
x2
end
Giới thiệu 32 /
Sử dụng mã giả
while <condition> do <instruction>
câu lệnh chỉ được thực hiện lặp đi lặp lại cho
đến khi điều kiện không còn đúng.
while i < n do
i ← i + 1;
end
do <instruction> while <condition>
tương tự while do, nhưng thực hiện lệnh trước
khi kiểm tra điều kiện.
do
i < n
while i ← i + 1;
Giới thiệu 33 /
Sử dụng mã giả
repeat <instruction> until <condition>
thực hiện câu lệnh cho đến khi điều kiện
đúng.
repeat
i < n
until i ← i + 1;
for <condition> do <instruction>
câu lệnh được thực hiện lặp trong một số bước
hữu hạn.
for i ← 1 to n do
S ← S + i;
end
Giới thiệu 34 /
Sử dụng mã giả
function NAME (parameters): cấu trúc
thường sử dụng
Input: <dữ liệu đầu vào>
Output: <dữ liệu đầu ra>
function <tên thuật toán> (<các tham số>)
<Các câu lệnh>
end
Giới thiệu 35 /
Sử dụng mã giả
input : Số nguyên dương n
ouput: Tổng n số từ 1 đến n
function Tong_n_so_nguyen_duong(n):
S ← 0
for i ← 1 to n do
S ← S + i
end
return
S
Giới thiệu 36 /
Sử dụng mã giả
Ưu điểm:
cho phép người thiết kế tập trung vào
logic của chương trình, không bị chi phối
bởi cú pháp của ngôn ngữ lập trình.
có thể được chuyển đổi sang bất kỳ ngôn
ngữ lập trình nào.
cho phép người thiết kế diễn đạt logic
bằng ngôn ngữ tự nhiên đơn giản.
lập trình dễ dàng hơn bằng cách sử dụng
mã giả. dễ đọc và dễ sửa hơn.
Giới thiệu 37 /
Sử dụng mã giả
Hạn chế:
không có tiêu chuẩn, mỗi người thiết kế có
cách viết riêng.
không thể biên dịch và thực thi trực tiếp →
không thể xác minh tính đúng đắn bằng
máy tính.
Giới thiệu 38 /
Sử dụng ngôn ngữ lập trình
class Program {
public static void Main () { int
x1 , x2 ;
x1 = 10;
x2 = 200;
if ( x1 > x2 ) {
Console . Write (" x1 is the
largest
} else if ( x2 > x1 ) { Console .
Write (" x2 is the largest
number .");
number .");
} else {
Console . Write (" Two numbers are equal .");
}
}
}
Giới thiệu 39 /
Độ phức tạp của thuật
toán
Độ phức tạp của thuật toán (Algorithm
Complexity):
Một thuật toán hiệu quả: chi phí sử dụng tài
nguyên (bộ nhớ, thời gian sử dụng CPU,...)
thấp.
Phân tích giải thuật (Algorithm Analysis): là việc
xác định khối lượng tài nguyên và thời gian
cần thiết để thực thi thuật toán.
Mục đích của phân tích giải thuật: so sánh các
thuật toán về thời gian, bộ nhớ, ...
Giới thiệu 40 /
Độ phức tạp của thuật
toán
Phân tích thời gian thực hiện:
Thời gian thực hiện giải thuật được xác định
bằng cách đếm số thao tác cơ bản mà giải
thuật thực hiện
Thao tác cơ bản có thời gian thực hiện là hằng
(một lượng thời gian nhỏ không phụ thuộc vào
kích thước đầu vào n)
Mô tả bằng hàm T (n) phụ thuộc vào kích
thước n
của đầu vào (input).
Hai phương pháp đánh giá:
Phương pháp thực nghiệm.
Phương pháp xấp xỉ toán học.
Giới thiệu 41 /
Độ phức tạp của thuật
toán
Phương pháp thực nghiệm:
Cài đặt thuật toán, chọn các bộ dữ liệu thử
nghiệm.
Thống kê các thông số nhận được khi chạy
các bộ dữ liệu đã chọn
Ưu điểm: Dễ thực
hiện. Hạn chế:
Chịu sự hạn chế của ngôn ngữ lập
trình. Ảnh hưởng bởi trình độ của
người lập trình.
Chọn được các bộ dữ liệu thử đặc trưng cho tất
cả các dữ liệu đầu vào của giải thuật: khó khăn và
tốn nhiều chi phí.Giới thiệu 42 /
Độ phức tạp của thuật
toán
Phương pháp xấp xỉ:
Đánh giá thuật toán theo hướng xấp xỉ
tiệm cận qua các khái niệm O().
Ưu điểm: Ít phụ thuộc môi trường cũng
như phần cứng hơn phương pháp thực
nghiệm.
Hạn chế: Phức tạp
Các trường hợp độ phức tạp quan tâm
Trường hợp tốt nhất (phân tích chính xác)
Trường hợp xấu nhất (phân tích chính
xác) Trường hợp trung bình (mang
tính dự đoán) Giới thiệu 43 /
Độ phức tạp của thuật
toán
Độ phức tạp về thời gian của giải thuật:
Nếu thời gian thực hiện giải thuật là T(n) = cn2 với
c là hằng số
Độ phức tạp về thời gian: có cấp n2
Ký hiệu: T(n) = O(n2)
Tổng quát: f (n) = O(g(n)) có cấp g(n) nếu tồn
tại hằng số c và n0 sao cho
f (n) ≤ cg(n) khi n ≥ n0
Giới thiệu 44 /
Độ phức tạp của thuật toán
Giới thiệu 45 /
Độ phức tạp của thuật
toán
BigO: độ phức tạp tăng
dần Hằng số: O(1)
logN: O(log N ) N:
O(N )
NlogN: O(N log N )
N2
: O(N2
)
N3
: O(N3
)
2N : O(2N ) N!:
O(N!)
Giới thiệu 46 /
Độ phức tạp của thuật toán
Hai nguyên tắc đánh giá để tính số phép toán
thực hiện giải thuật:
Nguyên tắc cộng:
Nếu: chương trình P gồm 2 đoạn chương
trình P1 và P2 với O1(f (n)) và O2(g(n)) nối tiếp
nhau thì: độ phức tạp của P là O(h(n)) với
h(n) = max(f (n), g(n))
Giới thiệu 47 /
Độ phức tạp của thuật toán
Hai nguyên tắc đánh giá để tính số phép toán
thực hiện giải thuật:
Nguyên tắc nhân:
Nếu: chương trình P gồm 2 đoạn chương
trình P1 và P2 với O1(f (n)) và O2(g(n)) lồng
nhau
thì: độ phức tạp của P O(h(n))
với
h(n) = f (n) · g(n)
Giới thiệu 48 /
Độ phức tạp của thuật toán
Ví dụ:
1
2
3
4
5
for ( i = 0; i < n; i ++) { x = a[ i
]/2;
a[ i] = x + 1;
if ( a[ i] > 10) break ;
}
Thao tác cơ
bản: Độ phức
tạp:
Giới thiệu 49 /
Độ phức tạp của thuật toán
Ví dụ:
1
2
3
4
5
if ( x > 0) i =
0;
else
for ( j = 0; j < n; j ++) a[ j] =
i;
Thao tác cơ
bản: Độ phức
tạp:
Giới thiệu 50 /
Độ phức tạp của thuật toán
Ví dụ:
1
2
3
for ( i = 0; i < n; i ++) for ( j =
0; j < n; j ++)
x = x + 1;
Thao tác cơ
bản: Độ phức
tạp:
Giới thiệu 51 /
Mối liên hệ giữa CTDL và GT
Giải thuật = phép xử lý.
Đối tượng của giải thuật là dữ liệu được tổ
chức thành các cấu trúc
CTDL và GT gắn chặt với nhau. Niklaus Wirth
đã tổng kết:
Cấu trúc dữ liệu + Giải thuật = Chương
trình
Thay đổi cấu trúc dữ liệu thì giải thuật sẽ
thay đổi theo.
Giới thiệu 52 /

More Related Content

PDF
Gt ung dung tin hoc trong kinh doanh
PDF
Mapreduce simplified-data-processing
DOCX
Bài 6
PDF
Lap trinh c_tu_co_ban_den_nang_cao
PDF
Lap trinh c_tu_co_ban_den_nang_cao
PDF
Introduction to data statistics with r - Part I (in Vietnamese)
PDF
chương1.pdf
PDF
Bài giảng------------------ CTDLGT 1.pdf
Gt ung dung tin hoc trong kinh doanh
Mapreduce simplified-data-processing
Bài 6
Lap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_cao
Introduction to data statistics with r - Part I (in Vietnamese)
chương1.pdf
Bài giảng------------------ CTDLGT 1.pdf

Similar to giaithuatkhoa2024truongyeuquycuatoidoa11 (20)

PDF
Chuan viet code va thiet ke giao dien trong C#
PPTX
ky thuat lap tirnh giao tiep ky thuat lap tirnh giao tiep
PDF
BÀI 3: Các khái niệm cơ bản trong lập trình - Giáo trình FPT
PDF
Chuong 01 mo dau
PDF
Chuong 01
DOCX
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
PPT
Tin học lớp 8
PPT
Ctdl 01 t_quan
PPT
Bai 1 tong quan ve ctdl&amp;gt
PDF
Ctdlgt
PDF
PDF
CTDL&GT_01
DOC
Bồi dưỡng HSG Tin chuyên đề thuật toán
PPT
Chuong9 lop vadoituong
PPT
Chuong1 phan tichvathietkegiaithuat
PDF
Giáo trình vb.net
PDF
Lập trình C cho VĐK 8051
PDF
Giaotrinhbaitapkythuatlaptrinh
PDF
45128de03569526f74ab41afe7186aef
Chuan viet code va thiet ke giao dien trong C#
ky thuat lap tirnh giao tiep ky thuat lap tirnh giao tiep
BÀI 3: Các khái niệm cơ bản trong lập trình - Giáo trình FPT
Chuong 01 mo dau
Chuong 01
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
Tin học lớp 8
Ctdl 01 t_quan
Bai 1 tong quan ve ctdl&amp;gt
Ctdlgt
CTDL&GT_01
Bồi dưỡng HSG Tin chuyên đề thuật toán
Chuong9 lop vadoituong
Chuong1 phan tichvathietkegiaithuat
Giáo trình vb.net
Lập trình C cho VĐK 8051
Giaotrinhbaitapkythuatlaptrinh
45128de03569526f74ab41afe7186aef
Ad

Recently uploaded (8)

DOC
Mẫu giáo án giảng dạy dành cho cao đẳng, đại học
PDF
TÌM HIỂU VÀ ĐÁNH GIÁ VỀ BAO BÌ TỰ PHÂN HỦY.pdf
PPTX
thuyết trình về dậy sớm mà t làm từ năm lớp 11 (bị lỗi font r hihihi)
PPTX
hoooooooooooooooooooooooooooooooooooo.pptx
PPTX
20240310 - Ao Dai Viet Nam - Tuyetkypowerpoint (1).pptx
PPTX
Tinh than yeu nuoc cua nguoi Ha Noi.pptx
DOCX
TÀI LIỆU KỸ THUẬT IoMT GATEWAY GIÁM SÁT THIẾT BỊ Y TẾ.docx
PDF
đồ án thiết kế hệ thống dẫn động băng tải
Mẫu giáo án giảng dạy dành cho cao đẳng, đại học
TÌM HIỂU VÀ ĐÁNH GIÁ VỀ BAO BÌ TỰ PHÂN HỦY.pdf
thuyết trình về dậy sớm mà t làm từ năm lớp 11 (bị lỗi font r hihihi)
hoooooooooooooooooooooooooooooooooooo.pptx
20240310 - Ao Dai Viet Nam - Tuyetkypowerpoint (1).pptx
Tinh than yeu nuoc cua nguoi Ha Noi.pptx
TÀI LIỆU KỸ THUẬT IoMT GATEWAY GIÁM SÁT THIẾT BỊ Y TẾ.docx
đồ án thiết kế hệ thống dẫn động băng tải
Ad

giaithuatkhoa2024truongyeuquycuatoidoa11

  • 2. Nội dung 1 Khái niệm cơ bản Bài toán đến chương trình Giải thuật, lưu đồ Thuật toán, độ phức tạp 2 3 4 Giới thiệu 2 / 55
  • 3. Giới thiệu Sử dụng máy tính để xử lý dữ liệu Nhanh hơn, chính xác hơn Giải quyết bài toán: phức tạp, khối lượng dữ liệu lớn, khối lượng tính toán lớn Phương pháp sử dụng Nhờ vào thuật toán hiệu quả, thông minh → chi phí thấp Nhờ vào nâng cấp cấu hình máy → chi phí cao Giới thiệu 3 / 55
  • 4. Dữ liệu Dữ liệu (data): tập hợp số liệu, ký hiệu và ký tự biểu diễn cho thông tin. Dữ liệu là thông tin ở dạng có thể chuyển hoặc xử lý hiệu quả; biểu diễn những thông tin cần thiết cho bài toán. Dữ liệu có thể được định nghĩa là giá trị cơ bản hoặc tập các giá trị. Giới thiệu 4 / 55
  • 5. Cấu trúc dữ liệu (data structure) Biến (variable): dùng để lưu trữ một giá trị dữ liệu bất kỳ trong một tập hợp nào đó. Kiểu dữ liệu (data types) trong một ngôn ngữ lập trình: tập giá trị và tập phép toán trên các giá trị đó. Kiểu dữ liệu hệ thống định nghĩa (kiểu dữ liệu nguyên thủy) Kiểu dữ liệu dẫn xuất Giới thiệu 5 / 55
  • 6. Cấu trúc dữ liệu (data structure) Cấu trúc dữ liệu (data structure): kho lưu trữ được sử dụng để lưu trữ và tổ chức dữ liệu. cách sắp xếp dữ liệu trên máy tính để người dùng có thể truy cập và cập nhật một cách hiệu quả Có 02 loại Cấu trúc dữ liệu tuyến tính (linear data structure) Cấu trúc dữ liệu phi tuyến tính (non-linear data structure) Giới thiệu 6 / 55
  • 7. Cấu trúc dữ liệu (data structure) Giới thiệu 7 / 55
  • 8. Cấu trúc dữ liệu (data structure) Kiểu dữ liệu trừu tượng (Abstract Data Types - ADTs) là Một mô hình toán học cùng với một tập các phép toán trừu tượng được định nghĩa trên mô hình đó. Kiểu do người lập trình tự định nghĩa ở mức khái niệm và chưa được cài đặt sẵn bằng ngôn ngữ lập trình. Tổng quát hóa các kiểu dữ liệu nguyên thủy. Giới thiệu 8 / 55
  • 9. Cấu trúc dữ liệu (data structure) Kiểu dữ liệu trừu tượng (Abstract Data Types - ADTs): cách cài đặt Cài đặt dữ liệu: bằng 01 cấu trúc dữ liệu hoặc một ADT đã cài đặt trước. Cài đặt phép toán Giới thiệu 9 / 55
  • 10. Cấu trúc dữ liệu (data structure) Các tiêu chuẩn: Biểu diễn đầy đủ thông tin. Phù hợp với các thao tác trên đó. Phù hợp với điều kiện cho phép của ngôn ngữ lập trình. Tiết kiệm tài nguyên hệ thống. Vai trò: CTDL đóng vai trò quan trọng trong việc kết hợp và đưa ra cách giải quyết bài toán. CTDL hỗ trợ cho các thuật toán thao tác trên đối tượng được hiệu quả hơn. Giới thiệu 10 /
  • 11. Giải thuật (algorithm) Giải thuật (algorithm) theo Knuth (1973): Tập hữu hạn các thao tác (chỉ thị) có nghĩa rõ ràng để giải một bài toán. Tính chất của thuật toán Rõ ràng (unambiguous) Hữu hạn (finiteness) Khả thi (feasibility) Độc lập (independent) Hiệu quả (effectiveness) Đầu vào (input) Đầu ra (output) Giới thiệu 11 /
  • 12. Giải thuật (algorithm) Ví dụ: tìm tổng tất cả các số nguyên dương nhỏ hơn n Bước 1: S = 0, i = 1 Bước 2: Nếu i < n thì S = S + 1 Ngược lại: chuyển sang bước 4 Bước 3: i = i + 1, quay lại bước 2 Bước 4: Tổng cần tìm là S Giới thiệu 12 /
  • 13. Mô hình hóa bài toán thực tế Để giải bài toán trong thực tế bằng máy tính → xác định bài toán Giảm bớt sự phức tạp của bài toán thực tế → mô hình hóa bài toán (phát biểu bài toán thành một bài toán hình thức hay còn gọi là mô hình toán) Ví dụ: bài toán tô màu bản đồ, đèn giao thông có cùng một mô hình toán. Giới thiệu 13 /
  • 14. Mô hình hóa bài toán thực tế Bài toán tô màu bản đồ: tô màu cho các phần trên bản đồ sao cho chỉ những phần liền kề nhau phải được tô bằng hai màu khác nhau. Sử dụng số màu đã cho với số lượng ít nhất để tô hết bảng đồ. Giới thiệu 14 /
  • 15. Mô hình hóa bài toán thực tế Bài toán đèn giao thông: ngã 5 mô tả như hình. C và E là đường 1 chiều, còn lại là hai chiều. 2 lối đi cắt nhau sẽ xảy ra tai nạn. Đặt đèn giao thông sao cho mỗi nhóm tạo thành 1 lối đi, có nhiều lối đi đồng thời nhất và các lối đi này không cắt nhau. Giới thiệu 15 /
  • 16. Mô hình hóa bài toán thực tế Các bài toán trên có thể được quy về bài toán tô màu đồ thị với 2 đỉnh nối nhau không cùng màu và số màu là ít nhất. Giới thiệu 16 /
  • 17. Mô hình hóa bài toán thực tế Tìm kiếm cách giải quyết bài toán trong các chương trình hoặc xây dựng giải thuật. Giải thuật giải quyết xong công việc khi đưa input vào. Các cách biểu diễn thuật toán: Ngôn ngữ tự nhiên Lưu đồ (sơ đồ khối, flowchart) Mã giả (pseudocode) Ngôn ngữ lập trình Giới thiệu 17 /
  • 18. Biểu diễn bằng ngôn ngữ tự nhiên Truyền tải các bước của một thuật toán Ưu điểm: quen thuộc với người dùng Hạn chế: Mơ hồ vì không có cấu trúc; dài dòng; hiếm khi được sử dụng cho các thuật toán kỹ thuật, phức tạp. Không có quy tắc cố định thể hiện giải thuật → sử dụng đánh số thứ tự phân cấp và khoảng trống đầu dòng để việc trình bày rõ ràng Giới thiệu 18 /
  • 19. Biểu diễn bằng ngôn ngữ tự nhiên Giới thiệu 19 / Ví dụ: Tìm số lớn nhất trong danh sách số nguyên. Giả sử phần tử đầu tiên là phần tử lớn nhất. Xem xét từng phần tử còn lại trong danh sách; nếu phần tử đó lớn hơn phần tử lớn nhất, đánh dấu lại. Khi tiến trình kết thúc thì phần tử cuối cùng được đánh dấu là phần tử lớn nhất.
  • 20. Biểu diễn bằng lưu đồ Lưu đồ (flowchart) là biểu diễn đồ họa của một giải thuật; các bước được thiết kế theo các hình dạng và kích thước khác nhau. Các hộp có hình dạng khác nhau được kết nối với nhau bằng các mũi tên một cách hợp lý sẽ tạo ra một lưu đồ. Ưu điểm: Đơn giản hóa và làm cho quá trình suy luận rõ ràng Phân tích hiệu quả Lập trình và kiểm tra dễ dàng hơn Hạn chế : Khó khăn khi sử dụng chương trình lớn Khó khăn khi sửa đổi Giới thiệu 20 /
  • 21. Biểu diễn bằng lưu đồ Giới thiệu 21 /
  • 22. Biểu diễn bằng lưu đồ Điểm cuối (terminal) cho biết phần bắt đầu và phần kết thúc của một chương trình hoặc thuật toán. biểu diễn bằng hình oval; bên trong ghi rõ Bắt đầu (Start) hoặc Kết thúc (End) Giới thiệu 22 /
  • 23. Biểu diễn bằng lưu đồ Thao tác chọn lựa (decision) đánh giá một điều kiện hoặc một phát biểu; các nhánh phụ thuộc vào đánh giá là Đúng (True) hoặc Sai (False). biểu diễn bằng hình thoi, bên trong chứa biểu thức điều kiện. Giới thiệu 23 /
  • 24. Biểu diễn bằng lưu đồ Thao tác xử lý (process) trình bày một bước trong một quy trình, bước hành động hoặc một hoạt động. biểu diễn bằng hình chữ nhật, bên trong chứa nội dung xử lý. Giới thiệu 24 /
  • 25. Biểu diễn bằng lưu đồ Dữ liệu vào ra (Input/Output) Thể hiện thông tin vào, ra hệ thống. biểu diễn bằng hình bình hành, bên trong chứa dữ liệu. Giới thiệu 25 /
  • 26. Biểu diễn bằng lưu đồ Điểm nối (connector) dùng để nối các phần khác nhau của lưu đồ lại với nhau. biểu diễn bằng hình tròn; bên trong ghi ký hiệu chỉ sự liên hệ giữa các điểm nối. Giới thiệu 26 /
  • 27. Biểu diễn bằng lưu đồ Điểm nối sang trang (off-page connector) tương tự như điểm nối nhưng được dùng khi lưu đồ quá lớn phải vẽ trên nhiều trang. biểu diễn bằng hình ngũ giác; bên trong ghi ký hiệu chỉ sự liên hệ giữa các điểm nối của các trang. Giới thiệu 27 /
  • 28. Biểu diễn bằng lưu đồ Đường đi (route) Khi dùng ngôn ngữ tự nhiên: quá trình thực hiện lần lượt từng bước nối tiếp theo cách diễn giải. Biểu diễn bằng lưu đồ: các bước thể hiện bằng hình vẽ, đặt hình vẽ bất kỳ ⇒ phương pháp thể hiện trình tự thực hiện Giới thiệu 28 /
  • 29. Sử dụng mã giả Mã giả (pseudocode) thường được sử dụng trong lập trình và giải thuật. phương pháp luận cho phép người lập trình biểu diễn việc thực hiện một giải thuật. việc triển khai giải thuật dưới dạng chú thích và văn bản thông tin; không có cú pháp giống ngôn ngữ lập trình nào vì vậy máy tính không thể biên dịch hoặc thông dịch. Giới thiệu 29 /
  • 30. Sử dụng mã giả “vay mượn” các cú pháp của một ngôn ngữ lập trình để thể hiện giải thuật. sử dụng các thuật ngữ if, then, while, else, loop... Lập trình viên hoặc chuyên viên CNTT sử dụng mã giả: mô tả cách giải thuật hoạt động. giải thích quy trình thực hiện với những người dùng thông thường. thiết kế code cho nhóm làm việc. Giới thiệu 30 /
  • 31. Sử dụng mã giả if ∆ > 0 then x1 ← ( − b − √ ) ∆ ; x2 ← 2∗√ a 2∗ a (−b+ ) ∆ ; Hiển thị kết quả: phương trình có hai nghiệm là x1 và x2; end els e i f ∆ = 0 ∗ a Hiển thị kết quả: phương trình có nghiệm kép là 2 −b ; end else ∆ < 0 Hiển thị kết quả: phương trình vô nghiệm; end end Giới thiệu 31 /
  • 32. Sử dụng mã giả Một số thể hiện thường gặp if <condition> then <instruction> câu lệnh chỉ được thực thi nếu điều kiện là đúng instruction: một bước mà chương trình thực hiện condition: điều kiện mà dữ liệu phải thỏa để chương trình thực hiện if ∆ > 0 then x1 ← ( − b − √ ) ∆ ; 2∗ √a x2 ← (−b+ ) ∆ ; Hiển thị 2∗a quả: phương trình có hai nghiệm là và ; kết x1 x2 end Giới thiệu 32 /
  • 33. Sử dụng mã giả while <condition> do <instruction> câu lệnh chỉ được thực hiện lặp đi lặp lại cho đến khi điều kiện không còn đúng. while i < n do i ← i + 1; end do <instruction> while <condition> tương tự while do, nhưng thực hiện lệnh trước khi kiểm tra điều kiện. do i < n while i ← i + 1; Giới thiệu 33 /
  • 34. Sử dụng mã giả repeat <instruction> until <condition> thực hiện câu lệnh cho đến khi điều kiện đúng. repeat i < n until i ← i + 1; for <condition> do <instruction> câu lệnh được thực hiện lặp trong một số bước hữu hạn. for i ← 1 to n do S ← S + i; end Giới thiệu 34 /
  • 35. Sử dụng mã giả function NAME (parameters): cấu trúc thường sử dụng Input: <dữ liệu đầu vào> Output: <dữ liệu đầu ra> function <tên thuật toán> (<các tham số>) <Các câu lệnh> end Giới thiệu 35 /
  • 36. Sử dụng mã giả input : Số nguyên dương n ouput: Tổng n số từ 1 đến n function Tong_n_so_nguyen_duong(n): S ← 0 for i ← 1 to n do S ← S + i end return S Giới thiệu 36 /
  • 37. Sử dụng mã giả Ưu điểm: cho phép người thiết kế tập trung vào logic của chương trình, không bị chi phối bởi cú pháp của ngôn ngữ lập trình. có thể được chuyển đổi sang bất kỳ ngôn ngữ lập trình nào. cho phép người thiết kế diễn đạt logic bằng ngôn ngữ tự nhiên đơn giản. lập trình dễ dàng hơn bằng cách sử dụng mã giả. dễ đọc và dễ sửa hơn. Giới thiệu 37 /
  • 38. Sử dụng mã giả Hạn chế: không có tiêu chuẩn, mỗi người thiết kế có cách viết riêng. không thể biên dịch và thực thi trực tiếp → không thể xác minh tính đúng đắn bằng máy tính. Giới thiệu 38 /
  • 39. Sử dụng ngôn ngữ lập trình class Program { public static void Main () { int x1 , x2 ; x1 = 10; x2 = 200; if ( x1 > x2 ) { Console . Write (" x1 is the largest } else if ( x2 > x1 ) { Console . Write (" x2 is the largest number ."); number ."); } else { Console . Write (" Two numbers are equal ."); } } } Giới thiệu 39 /
  • 40. Độ phức tạp của thuật toán Độ phức tạp của thuật toán (Algorithm Complexity): Một thuật toán hiệu quả: chi phí sử dụng tài nguyên (bộ nhớ, thời gian sử dụng CPU,...) thấp. Phân tích giải thuật (Algorithm Analysis): là việc xác định khối lượng tài nguyên và thời gian cần thiết để thực thi thuật toán. Mục đích của phân tích giải thuật: so sánh các thuật toán về thời gian, bộ nhớ, ... Giới thiệu 40 /
  • 41. Độ phức tạp của thuật toán Phân tích thời gian thực hiện: Thời gian thực hiện giải thuật được xác định bằng cách đếm số thao tác cơ bản mà giải thuật thực hiện Thao tác cơ bản có thời gian thực hiện là hằng (một lượng thời gian nhỏ không phụ thuộc vào kích thước đầu vào n) Mô tả bằng hàm T (n) phụ thuộc vào kích thước n của đầu vào (input). Hai phương pháp đánh giá: Phương pháp thực nghiệm. Phương pháp xấp xỉ toán học. Giới thiệu 41 /
  • 42. Độ phức tạp của thuật toán Phương pháp thực nghiệm: Cài đặt thuật toán, chọn các bộ dữ liệu thử nghiệm. Thống kê các thông số nhận được khi chạy các bộ dữ liệu đã chọn Ưu điểm: Dễ thực hiện. Hạn chế: Chịu sự hạn chế của ngôn ngữ lập trình. Ảnh hưởng bởi trình độ của người lập trình. Chọn được các bộ dữ liệu thử đặc trưng cho tất cả các dữ liệu đầu vào của giải thuật: khó khăn và tốn nhiều chi phí.Giới thiệu 42 /
  • 43. Độ phức tạp của thuật toán Phương pháp xấp xỉ: Đánh giá thuật toán theo hướng xấp xỉ tiệm cận qua các khái niệm O(). Ưu điểm: Ít phụ thuộc môi trường cũng như phần cứng hơn phương pháp thực nghiệm. Hạn chế: Phức tạp Các trường hợp độ phức tạp quan tâm Trường hợp tốt nhất (phân tích chính xác) Trường hợp xấu nhất (phân tích chính xác) Trường hợp trung bình (mang tính dự đoán) Giới thiệu 43 /
  • 44. Độ phức tạp của thuật toán Độ phức tạp về thời gian của giải thuật: Nếu thời gian thực hiện giải thuật là T(n) = cn2 với c là hằng số Độ phức tạp về thời gian: có cấp n2 Ký hiệu: T(n) = O(n2) Tổng quát: f (n) = O(g(n)) có cấp g(n) nếu tồn tại hằng số c và n0 sao cho f (n) ≤ cg(n) khi n ≥ n0 Giới thiệu 44 /
  • 45. Độ phức tạp của thuật toán Giới thiệu 45 /
  • 46. Độ phức tạp của thuật toán BigO: độ phức tạp tăng dần Hằng số: O(1) logN: O(log N ) N: O(N ) NlogN: O(N log N ) N2 : O(N2 ) N3 : O(N3 ) 2N : O(2N ) N!: O(N!) Giới thiệu 46 /
  • 47. Độ phức tạp của thuật toán Hai nguyên tắc đánh giá để tính số phép toán thực hiện giải thuật: Nguyên tắc cộng: Nếu: chương trình P gồm 2 đoạn chương trình P1 và P2 với O1(f (n)) và O2(g(n)) nối tiếp nhau thì: độ phức tạp của P là O(h(n)) với h(n) = max(f (n), g(n)) Giới thiệu 47 /
  • 48. Độ phức tạp của thuật toán Hai nguyên tắc đánh giá để tính số phép toán thực hiện giải thuật: Nguyên tắc nhân: Nếu: chương trình P gồm 2 đoạn chương trình P1 và P2 với O1(f (n)) và O2(g(n)) lồng nhau thì: độ phức tạp của P O(h(n)) với h(n) = f (n) · g(n) Giới thiệu 48 /
  • 49. Độ phức tạp của thuật toán Ví dụ: 1 2 3 4 5 for ( i = 0; i < n; i ++) { x = a[ i ]/2; a[ i] = x + 1; if ( a[ i] > 10) break ; } Thao tác cơ bản: Độ phức tạp: Giới thiệu 49 /
  • 50. Độ phức tạp của thuật toán Ví dụ: 1 2 3 4 5 if ( x > 0) i = 0; else for ( j = 0; j < n; j ++) a[ j] = i; Thao tác cơ bản: Độ phức tạp: Giới thiệu 50 /
  • 51. Độ phức tạp của thuật toán Ví dụ: 1 2 3 for ( i = 0; i < n; i ++) for ( j = 0; j < n; j ++) x = x + 1; Thao tác cơ bản: Độ phức tạp: Giới thiệu 51 /
  • 52. Mối liên hệ giữa CTDL và GT Giải thuật = phép xử lý. Đối tượng của giải thuật là dữ liệu được tổ chức thành các cấu trúc CTDL và GT gắn chặt với nhau. Niklaus Wirth đã tổng kết: Cấu trúc dữ liệu + Giải thuật = Chương trình Thay đổi cấu trúc dữ liệu thì giải thuật sẽ thay đổi theo. Giới thiệu 52 /