Tài liệu môn Cơ sở dữ liệu - Các khái niệm cơ bản
1. Tổng quan về cấu trúc dữ liệu 2. Tiêu chuẩn đánh giá thuật toán 3. Độ tăng của hàm 4. Độ phức tạp của thuật toán 5. Các phương pháp đánh giá độ phức tạp
Bạn đang xem trước 20 trang tài liệu Tài liệu môn Cơ sở dữ liệu - Các khái niệm cơ bản, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
G V : L Ê T H Ị N GỌC HẠN H
CÁC KHÁI NIỆM CƠ BẢN
8/21/2015 Data Structure & Algorithm
1
NỘI DUNG
1. Tổng quan về cấu trúc dữ liệu
2. Tiêu chuẩn đánh giá thuật toán
3. Độ tăng của hàm
4. Độ phức tạp của thuật toán
5. Các phương pháp đánh giá độ
phức tạp
8/21/2015 Data Structure & Algorithm 2
TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU
8/21/2015 Data Structure & Algorithm 3
Bài toán thực tế
Trừu tượng hóa
Đơn giản hóa
MÔ HÌNH DỮ LIỆU
Mô hình dữ liệu (data model) là các
trừu tượng dùng để mô tả bài toán,
thông thường là mô tả cách thức mà
dữ liệu (data) được biểu diễn
(represented) và truy xuất (accessed)
như thế nào.
8/21/2015 Data Structure & Algorithm 4
KIỂU DỮ LIỆU
Kiểu dữ liệu (của biến) là một khái
niệm trong lập trình, chỉ tập các giá
trị mà biến có thể chấp nhận.
Ví dụ:
• Kiểu dữ liệu kiểu số nguyên,
• Kiểu dữ liệu kiểu số thực,
• Kiểu dữ liệu chuỗi
8/21/2015 Data Structure & Algorithm 5
KIỂU DỮ LIỆU CƠ BẢN
Kiểu dữ liệu sơ cấp là kiểu dữ liệu mà giá trị của nó là
đơn nhất.
Ví dụ: Trong ngôn ngữ lập trình C chuẩn, kiểu int gọi
là kiểu sơ cấp vì kiểu này bao gồm các số nguyên từ
-32768 đến 32767 và các phép toán +, -, *, /, %
Mỗi ngôn ngữ đều có cung cấp sẵn các kiểu dữ liệu cơ
bản (basic data type), gọi là kiểu dữ liệu chuẩn.
Ví dụ, trong ngôn ngữ C thì các kiểu sau là kiểu dữ liệu
cơ bản: int, char, float
8/21/2015 Data Structure & Algorithm 6
KIỂU DỮ LIỆU CÓ CẤU TRÚC
Kiểu dữ liệu có cấu trúc (Structured Data
Type): là kiểu dữ liệu mà giá trị của nó là sự
kết hợp các giá trị khác.
Ví dụ:
• Kiểu dữ liệu mô tả lý lịch sinh viên.
• Kiểu dữ liệu mô tả các thuộc tính của con
người.
8/21/2015 Data Structure & Algorithm 7
CẤU TRÚC DỮ LIỆU
Cấu trúc dữ liệu (CTDL): là các đơn vị cấu
trúc của ngôn ngữ lập trình dùng để biểu diễn
các mô hình dữ liệu. Ví dụ như mảng (array),
tập tin (file), danh sách liên kết (linked list)
Các cấu trúc dữ liệu được chọn phải có khả
năng biểu diễn được tập input và output của
bài toán cần giải. Hơn nữa, phải phù hợp với
các thao tác của thuật toán và cài đặt được
bằng ngôn ngữ lập trình đã được lựa chọn.
8/21/2015 Data Structure & Algorithm 8
CHƯƠNG TRÌNH
8/21/2015 Data Structure & Algorithm 9
Cấu
trúc dữ
liệu
Giải
thuật
Chương
trình
TIÊU CHUẨN ĐÁNH GIÁ THUẬT TOÁN
Tốc độ thực thi.
Tính chính xác.
Đơn giản, dễ hiểu, dễ bảo trì.
Mức phổ dụng
8/21/2015 Data Structure & Algorithm 10
ĐÁNH GIÁ ĐỘ PHỨC TẠP
Độ phức tạp thuật toán được thể hiện qua
khối lượng thời gian và không gian để thực
hiện thuật toán.
• Không gian: yêu cầu bộ nhớ, thiết bị lưu trữ,
• Thời gian: tổng thời gian cần thiết để hoàn thành
thuật toán
8/21/2015 Data Structure & Algorithm 11
ĐỘ PHỨC TẠP THỜI GIAN
Được đánh giá dựa vào số lượng các thao tác
được sử dụng trong thuật toán trên bộ dữ liệu đầu
vào được gọi là độ phức tạp tính toán
Các thao tác được xem xét:
• Phép so sánh
• Phép gán
Đánh giá bằng cách tính số lượng các phép toán quan
trọng theo độ lớn của dữ liệu.
Từ đó, thời gian thực hiện của một thuật toán có thể
được đánh giá theo một hàm phụ thuộc vào độ lớn
đầu vào.
8/21/2015 Data Structure & Algorithm 12
PHÂN LOẠI ĐỘ PHỨC TẠP
Trường hợp tốt nhất: là thời gian nhỏ
nhất cần để thực hiện thuật toán ký
hiệu: T(n)
Trường hợp xấu nhất: là thời gian lớn
nhất cần để thực hiện Ký hiệu: t(n)
Trường hợp trung bình: tính cho
trường hợp tổng quát.
8/21/2015 Data Structure & Algorithm 13
VÍ DỤ
Bước 1. Gán tổng = 0. Gán i = 0.
Bước 2.
• Tăng i thêm 1 đơn vị.
• Gán Tổng = Tổng + i
Bước 3. So sánh i với 10
• Nếu i < 10, quay lại bước 2.
• Ngược lại, nếu i ≥ 10, dừng thuật toán.
Số phép gán của thuật toán là bao nhiêu? Số
phép so sánh là bao nhiêu?
8/21/2015 Data Structure & Algorithm 14
KÍ HIỆU O
Thông thường không quan tâm đến con số chính xác thời
gian thực hiện của thuật toán. Mà quan tâm đến khi tăng
kích cỡ của dữ liệu đầu vào thì thời gian thực hiện tăng
như thế nào?
Ví dụ: t(n) = 20n2+5n+1
T(n) = n2+10n+1
Định nghĩa:
Cho hai hàm số thực f và g có miền xác định trong tập N.
Ta viết: f(n) O(g(n))
và nói f(n) có cấp cao nhất là g(n) hay f(n) thuộc lớp
O(g(n)), khi đó có một hằng số C sao cho:
| f(n) | C. | g(n) |
8/21/2015 Data Structure & Algorithm 15
KÍ HIỆU O
Ví dụ:
t(n) = 20n2 + 5n+1 và T(n)=n2+10n+1
thì t(n) và T(n) có cấp cao nhất là n2
t(n) O(n2) và T(n) O(n2)
8/21/2015 Data Structure & Algorithm 16
ĐỘ TĂNG CỦA TỔ HỢP CÁC HÀM
Cho f1(x) là O(g1(x)) và f2(x) là O(g2(x)).
Khi đó:
Quy tắc tổng:
(f1+f2)(x) là O(max(|g1(x)|, |g2(x)|))
Quy tắc nhân:
(f1f2)(x) là O(g1(x)g2(x))
8/21/2015 Data Structure & Algorithm 17
ĐỘ PHỨC TẠP THUẬT TOÁN
8/21/2015 Data Structure & Algorithm 18
ĐỘ PHỨC TẠP CỐ ĐỊNH CỦA
THUẬT TOÁN
Thuật toán minh họa:
B1. Đặt giá trị cực đại tạm thời bằng số nguyên
đầu tiên trong dãy.
B2. So sánh số nguyên tiếp sau với giá trị cực đại
tạm thời. Nếu nó lớn hơn giá trị cực đại tạm thời
thì đặt cực đại tạm thời bằng số nguyên đó.
B3. Lặp lại B2 nếu còn các số nguyên trong dãy.
B4. Dừng khi không còn số nguyên nào nữa trong
dãy. Cực đại tạm thời chính là số nguyên lớn nhất
của dãy.
8/21/2015 Data Structure & Algorithm 19
Vì phép sơ cấp sử dụng trong thuật toán là phép so
sánh, nên phép so sánh được dùng làm thước đo độ
phức tạp.
Tại mỗi số hạng, ta thực hiện 2 phép so sánh, 1 phép
xem đã hết dãy hay chưa và 1 phép so với cực đại tạm
thời.
Vì hai phép so sánh được dùng từ số hạng thứ 2 đến n,
và thêm 1 phép so sánh nữa để ra khỏi vòng lặp, nên ta
có chính xác 2(n-1) + 1 = 2n – 1 phép so sánh.
Do vậy, độ phức tạp của thuật toán là O(n).
8/21/2015 Data Structure & Algorithm 20
ĐỘ PHỨC TẠP CỐ ĐỊNH CỦA
THUẬT TOÁN
TRƯỜNG HỢP XẤU NHẤT
Bước 1. Gán i = 1.
Bước 2. Trong khi i ≤ n và x ≠ ai thì
tăng i thêm 1.
Bước 3.
• Nếu i ≤ n, trả về giá trị là i.
• Ngược lại, i > n, trả về giá trị 0 cho
biết không tìm được x trong dãy a.
8/21/2015 Data Structure & Algorithm 21
Số phép so sánh dùng làm thước đo.
Ở mỗi bước của vòng lặp, thực hiện 2 phép so
sánh.
Cuối vòng lặp, thực hiện 1 phép so sánh.
Như vậy, nếu x = ai, số phép so sánh thực hiện là
(2i +1).
Trong trường hợp xấu nhất, không tìm được x thì
tổng số phép so sánh là 2n + 2.
Từ đó, thuật toán tìm kiếm tuần tự đòi hỏi tối đa
O(n) phép so sánh.
8/21/2015 Data Structure & Algorithm 22
TRƯỜNG HỢP XẤU NHẤT
TRƯỜNG HỢP TỐT NHẤT
Trong trường hợp tốt nhất, ta bắt gặp x
ngay phần tử đầu tiên nên chỉ cần tốn 3
phép so sánh.
Khi đó, ta nói thuật toán tìm kiếm tuần
tự đòi hỏi ít nhất O(1) phép so sánh.
8/21/2015 Data Structure & Algorithm 23
TRƯỜNG HỢP TRUNG BÌNH
Nếu x là số hạng thứ i, số phép so sánh
sử dụng để tìm ra x là 2i + 1.
Do đó, số phép so sánh trung bình ta
cần sử dụng là:
= n + 2
Như vậy độ phức tạp trung bình của
thuật toán tìm kiếm tuần tự là O(n)
8/21/2015 Data Structure & Algorithm 24
3 + 5 + 7 +⋯+ (2𝑛 + 1)
𝑛
SỰ PHÂN LỚP CÁC ĐỘ PHỨC TẠP
8/21/2015 Data Structure & Algorithm 25
BÀI TẬP
1. Mô tả thuật toán tìm số nhỏ nhất trong dãy hữu
hạn các số tự nhiên. Có bao nhiêu phép so sánh,
bao nhiêu phép gán trong thuật toán?
2. Cho biết số phép gán, số phép so sánh trong đoạn code
sau đây theo n:
sum = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &x);
sum = sum + x;
}
8/21/2015 Data Structure & Algorithm 26
BÀI TẬP
3. Cho biết số phép gán, số phép so sánh trong đoạn
code sau đây theo n:
for (i = 0; i < n ; i++)
for (j = 0; j < n; j++)
{
C[i][j] = 0;
for (k = 0; k < n; k++)
C[i][j] = C[i][j] +
A[i][k]*B[k][j];
}
8/21/2015 Data Structure & Algorithm 27
BÀI TẬP
4. Cho thuật toán với mã giả như sau:
void InsertionSort(int a[], int n){
for(int i=1;i<n;i++){
int x = a[i];
int j= i-1;
while(a[j]>x){a[j+1]=a[j];j--; if(j==-1)break;}
a[j+1]=x;
}
}
4.1. Ước lượng độ phức tạp trên trong trường hợp tốt nhất và xấu nhất.
4.2. Thêm vào các câu lệnh cho phép tính số phép gán, số phép so sánh,
và số thao tác. Thực nghiệm với n thay đổi và vẽ biểu đồ của số thao tác
theo n.
8/21/2015 Data Structure & Algorithm 28