You are on page 1of 20

Chương 1

Các khái niệm cơ bản

(Buổi 1)
Cấu trúc dữ liệu
™ Cấu trúc dữ liệu (data structure) được phân
thành hai loại:
f Cấu trúc dữ liệu tuyến tính (linear data structure):
các phần tử tạo thành một dãy (sequence) nối
tiếp nhau và tác vụ duyệt (traversal) là tuyến tính
(tuần tự). Mỗi phần tử có nhiều nhất một phần tử
kề (adjacent element) đi sau nó.
f Cấu trúc dữ liệu phi tuyến tính (non-linear data
structure): các phần tử không tạo thành một dãy
nối tiếp nhau và tác vụ duyệt không là tuyến tính
(không tuần tự). Mỗi phần tử có thể có nhiều
phần tử kề đi sau nó.
Cấu trúc dữ liệu và Giải thuật
Chương 1: Các khái niệm cơ bản
2
Cấu trúc dữ liệu

Cấu trúc dữ liệu

Cấu trúc dữ liệu Cấu trúc dữ liệu


tuyến tính phi tuyến tính

Mảng Danh sách liên kết Cây Đồ thị


(array) (linked list) (tree) (graph)

Hình 1.1. Phân loại các cấu trúc dữ liệu


Cấu trúc dữ liệu và Giải thuật
Chương 1: Các khái niệm cơ bản
3
Cấu trúc dữ liệu
™ Môn học Cấu trúc dữ liệu và Giải thuật trình
bày các cấu trúc dữ liệu mảng, danh sách liên
kết, cây, đồ thị và các giải thuật trên các cấu
trúc dữ liệu này.

Cấu trúc dữ liệu và Giải thuật


Chương 1: Các khái niệm cơ bản
4
Thời gian của giải thuật
™ Bài toán: Tính tổng số S = 1 + 2 + … + n

int s = 0;
for (int i = 1; i <= n; i++)
s = s + i;

f Số lần lặp: n lần


f Thời gian: T(n) = n × t

Cấu trúc dữ liệu và Giải thuật


Chương 1: Các khái niệm cơ bản
5
Thời gian của giải thuật
™ Bài toán: Tính tổng số S = + 2 0 2 1 +…+ 2 k với
2 vừa nhỏ hơn hoặc bằng n.
k

int s = 0;
int i = 1;
while (i <= n)
{
s = s + i;
i = i * 2;
}

f Số lần lặp: k lần với k = log2n


f Thời gian: T(n) = (log2n) × t

Cấu trúc dữ liệu và Giải thuật


Chương 1: Các khái niệm cơ bản
6
Thời gian của giải thuật
™ Bài toán: Tính tổng số S của các số hạng của
một ma trận vuông a[n, n].
int s = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
s = s + a[i,j];

f Số lần lặp for (j): n lần


f Số lần lặp for (i): n lần
f Số lần lặp: n × n lần
f Thời gian: T(n) = (n ) × t
2

Cấu trúc dữ liệu và Giải thuật


Chương 1: Các khái niệm cơ bản
7
Thời gian của giải thuật
™ Bài toán: Tính tổng số S của các số hạng của
tam giác dưới của một ma trận vuông a[n, n].
int s = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j <= i; j++)
s = s + a[i,j];

f Số lần lặp: 1 + 2 + … + n = n×(n+1) / 2 lần


f Thời gian: T(n) = (n×(n+1) / 2) × t

Cấu trúc dữ liệu và Giải thuật


Chương 1: Các khái niệm cơ bản
8
Ký hiệu Big-Oh
™ Xét hàm f(n) không âm với mọi số nguyên n ≥
0. Chúng ta nói rằng "f(n) là big-oh g(n)", viết là
f(n) = O(g(n)), nếu tồn tại một số nguyên n0 và
một hằng c > 0 sao cho với mọi số nguyên n ≥
n0 thì f(n) ≤ cg(n).
™ T(n) = n × t ⇒ T(n) = O(n)
™ T(n) = (log2n) × t ⇒ T(n) = O(log2n)
™ T(n) = (n ) × t
2 ⇒ T(n) = O(n )
2

™ T(n) = (n×(n+1) / 2) × t ⇒ T(n) = O(n )


2

Cấu trúc dữ liệu và Giải thuật


Chương 1: Các khái niệm cơ bản
9
Ký hiệu Big-Oh
™ Nếu f1(n) = O(g1(n)) và f2(n) = O(g2(n)) thì:
f1(n) + f2(n) = O(max(g1(n), g2(n)))
™ Nếu f1(n) = O(g1(n)) và f2(n) = O(g2(n)) thì:
f1(n) × f2(n) = O(g1(n) × g2(n))
™ Nếu f(n) = O(g(n)) và g(n) = O(h(n)) thì:
f(n) = O(h(n))

Cấu trúc dữ liệu và Giải thuật


Chương 1: Các khái niệm cơ bản
10
Trường hợp tốt nhất, xấu nhất và trung bình
™ Trường hợp tốt nhất, xấu nhất hoặc trung bình
của một giải thuật là trường hợp mà tài nguyên
(thường là thời gian và vùng nhớ) dùng để
thực hiện giải thuật này là ít nhất, nhiều nhất
hoặc trung bình.

Cấu trúc dữ liệu và Giải thuật


Chương 1: Các khái niệm cơ bản
11
Trường hợp tốt nhất, xấu nhất và trung bình
™ Thời gian thực hiện giải thuật
f Thời gian so sánh
f Thời gian di chuyển: đọc, ghi, gán
f Thời gian tính toán

™ Vùng nhớ dùng cho giải thuật


f Vùng nhớ của bộ nhớ chính
f Vùng nhớ của bộ nhớ ngoài

Cấu trúc dữ liệu và Giải thuật


Chương 1: Các khái niệm cơ bản
12
Đệ qui (recursion)
™ Một lớp các đối tượng hoặc các phương thức
có tính đệ qui khi trong định nghĩa của chúng
có sử dụng các đối tượng hoặc các phương
thức này.
™ Định nghĩa đệ qui có hai thành phần
f Thành phần kết thúc: không chứa đối tượng hoặc
phương thức được định nghĩa.
f Thành phần đệ qui: có chứa đối tượng hoặc
phương thức được định nghĩa.
™ Định nghĩa đệ qui đúng đắn
f Thành phần đệ qui phải được chấm dứt bởi thành
phần kết thúc.
Cấu trúc dữ liệu và Giải thuật
Chương 1: Các khái niệm cơ bản
13
Đệ qui (recursion)
™ Ví dụ: Định nghĩa của một tháp nhiều tầng
(tầng nhỏ nằm trên tầng lớn) là định nghĩa đệ
qui.
f Thành phần kết thúc: tháp một tầng (tầng nhỏ
nhất)
f Thành phần đệ qui: tháp n tầng gồm tháp (n-1)
tầng nằm trên tầng lớn.
f Tính đúng đắn: n ≥ 1

Tháp (n-1) tầng Hình 1.2. Cấu trúc


tháp có tính đệ
Tháp một tầng qui
Tháp một tầng Tháp n tầng
Cấu trúc dữ liệu và Giải thuật
Chương 1: Các khái niệm cơ bản
14
Đệ qui (recursion)
™ Ví dụ: Định nghĩa của phép toán giai thừa là
định nghĩa đệ qui.
f Thành phần kết thúc: 0! = 1
f Thành phần đệ qui: n! = n × (n – 1)!
f Tính đúng đắn: n≥0

Cấu trúc dữ liệu và Giải thuật


Chương 1: Các khái niệm cơ bản
15
Đệ qui (recursion)
™ Các trường hợp sử dụng đệ qui
f Cấu trúc dữ liệu có tính đệ qui.
f Cách giải quyết vấn đề có tính đệ qui.

Cấu trúc dữ liệu và Giải thuật


Chương 1: Các khái niệm cơ bản
16
Đệ qui (recursion) Hình 1.3. Di chuyển tháp n tầng

(n - 1)
(1)

(a) (b) (c)

Cấu trúc dữ liệu và Giải thuật


Chương 1: Các khái niệm cơ bản
17
Đệ qui (recursion)
™ Cấu trúc dữ liệu có tính đệ qui

public void DiChuyen(int n, int a, int b, int c)


{
if (n == 1)
Console.WriteLine("{0} -> {1}", a, c);
else
{
DiChuyen(n-1, a, c, b);
DiChuyen(1, a, b, c);
DiChuyen(n-1, b, a, c);
}
}

Cấu trúc dữ liệu và Giải thuật


Chương 1: Các khái niệm cơ bản
18
Đệ qui (recursion)
™ Cách giải quyết vấn đề có tính đệ qui

public int GiaiThua(int n)


{
if (n == 0)
return 1;
else
return n * GiaiThua(n-1);
}

Cấu trúc dữ liệu và Giải thuật


Chương 1: Các khái niệm cơ bản
19
Tổng kết
™ Phân loại các cấu trúc dữ liệu: cấu trúc tuyến
tính (mảng, danh sách liên kết) và cấu trúc phi
tuyến (cây, đồ thị).
™ Đánh giá giải thuật: thời gian và vùng nhớ.
™ Đánh giá thời gian của giải thuật dùng ký hiệu
Big-Oh: T(n) = O(g(n))
™ Đệ qui: cấu trúc dữ liệu và cách giải quyết có
tính đệ qui.

Cấu trúc dữ liệu và Giải thuật


Chương 1: Các khái niệm cơ bản
20

You might also like