Tải bản đầy đủ (.pdf) (65 trang)

Bài giảng cấu trúc dữ liệu và giải thuật chương 1 ths nguyễn thị khiêm hòa

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (814.59 KB, 65 trang )

Chương 1: Tổng quan

Giảng viên: Ths. Nguyễn Thị Khiêm Hòa
Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM


Nội dung






Cấu trúc dữ liệu và thuật toán
 Thuật toán và các đặc trưng của thuật toán
 Diễn đạt thuật toán
 Kiểu dữ liệu, ADT, cấu trúc dữ liệu
Phân tích và thiết kế thuật toán
 Thiết kế thuật toán
 Phân tích thuật toán
Một số lớp các thuật toán

Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
2


Mục tiêu


Tìm hiểu các nội dung:



Thiết kế và phân tích được thuật toán.



Hiểu rõ về kiểu dữ liệu, kiểu dữ liệu trừu
tượng, cấu trúc dữ liệu.



Đánh giá độ phức tạp của thuật toán.

Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
3


Giải bài toán bằng máy tính


Giải quyết một bài toán:





Mục tiêu
Phương pháp

Giải quyết bài toán tin học cần phải:




Tổ chức biểu diễn các đối tượng thực tế
Xây dựng trình tự các thao tác xử lý trên các
đối tượng dữ liệu đó

Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
4


Giải bài toán bằng máy tính

Cấu trúc dữ liệu
+ Thuật toán
Chương trình
Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
5


Kiểu dữ liệu trừu tượng _ADT
 Kiểu

dữ liệu

 Kiểu

dữ liệu trừu tượng




ADT - abstract data type



Kiểu dữ liệu trừu tượng: T = <V, O>
 V:

Values - miền giá trị

 O:

Operators – các thao tác

Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
6


Cấu trúc dữ liệu


Cấu trúc dữ liệu (Data structure): Cách tổ
chức dữ liệu cho bài toán



Có một số cấu trúc dữ liệu riêng của ngôn
ngữ lập trình được gọi là CTDL tiền định.

Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
7



Đánh giá cấu trúc dữ liệu


Phản ánh đúng thực tế



Phù hợp với thao tác



Tiết kiệm tài nguyên hệ thống

Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
8


Cấu trúc lưu trữ (trong/ngoài)




Cách biểu diễn tối ưu của cấu trúc dữ liệu
trên bộ nhớ (trong/ngoài) của máy tính được
gọi là cấu trúc lưu trữ.
Có nhiều cấu trúc lưu trữ khác nhau cho cùng
một cấu trúc dữ liệu


Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
9


Thuật toán
Định nghĩa
 Lý thuyết thuật toán quan tâm đến những
vấn đề sau:







Giải được bằng thuật toán
Tối ưu hóa thuật toán
Triển khai thuật toán

Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
10


Thuật toán
 Đặc

trưng của thuật toán

Tính
 Tính

 Tính
 Tính
 Tính


xác định
hữu hạn (Tính dừng)
đúng đắn
phổ dụng
khả thi

Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
11


Diễn đạt thuật toán


Dạng lưu đồ (sơ đồ khối)



Dạng ngôn ngữ tự nhiên (Ngôn ngữ liệt
kê từng bước)



Ngôn ngữ lập trình




Dạng mã giả

Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
12


Diễn đạt thuật toán
Các ký hiệu biểu diễn thuật toán bằng sơ đồ
khối
Nút thao tác
Nút điều khiển: trong đó ghi điều
kiện cần kiểm tra trong quá trình tính
toán.
Nút khởi đầu ,kết thúc
Cung
Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
13


Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
14


Diễn đạt thuật toán
Ví dụ 1: Thuật toán xác định n là số nguyên tố


Bước 1: Nhập n




Bước 2: Nếu n ≤ 1  n ko nguyên tố  dừng



Bước 3: Nếu n ≥ 2, gán i  2



Bước 4: Nếu i ≥ √n hay n chia hết cho i  bước 6



Bước 5: Gán i  i+1, trở lại bước 4



Bước 6:


Nếu i > √n  n nguyên tố  dừng



Ngược lại, n không là nguyên tố  dừng
Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
15



Diễn đạt thuật toán
Ví dụ 2: Thuật toán tìm phần tử thứ n
của dãy số Fibonacci


Bước 1: Nhập n



Bước 2: Nếu n=1 hay n=2  fn=1  dừng



Bước 3: Nếu n > 2, gán a1, b1, i1



Bước 4: Gán ca+b, ab, bc



Bước 5:
 Nếu

i = n - 2  fn=c  dừng

 Ngược

lại i  i+1, quay lại bước 4


Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
16


Diễn đạt thuật toán
Ví dụ 3: Tìm phần tử lớn nhất trong mảng A


Thuật toán Tim_max(A, n)
Input: Mảng A, gồm n số nguyên
Output: Giá trị lớn nhất của A
Max  A[0]
for i  1 to n  1 do
if A[i]  Max then
Max  A[i]
return Max

Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
17


Mối quan hệ giữa
Cấu trúc dữ liệu và thuật toán


Đối tượng xử lý của thuật toán chính là
dữ liệu




Với một cấu trúc dữ liệu, sẽ có những
thuật toán tương ứng.



Thuật toán thường thay đổi khi cấu trúc
dữ liệu thay đổi.

Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
18


Thiết kế thuật toán


Từ bài toán đến chương trình
Lập trình

Thiết kế

Bài toán
thực tế

Giải thuật
Kỹ thuật thiết kế giải
thuật: Chia để trị, quy
hoạch
động,
back
tracking v.v…


#include


Chương trình

•Ngôn ngữ lập
trình:
•PASCAL, C/C++,
JAVA, …

Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
19


Thiết kế thuật toán
 Module

hoá và việc giải quyết bài

toán


Chiến thuật chia để trị (divide-conquer):



Để thực hiện chiến thuật này, thường có
hai cách thiết kế:
 Từ


trên xuống (Top-Down Design).

 Tinh

chỉnh từng bước
Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
20


Thiết kế thuật toán


Tinh chỉnh từng bước:


Biểu diễn ý tưởng bằng ngôn ngữ tự nhiên



Chi tiết hóa các công việc nhỏ hơn dùng mã
giả rồi đến ngôn ngữ lập trình

Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
21


Thiết kế thuật toán



Ví dụ: Bài toán sắp xếp một dãy n số, theo thứ tự
tăng dần


Chọn số bé nhất trong n số để vào vị trí thứ 1



Chọn số bé nhất trong n-1 số còn lại để vào vị
trí thứ 2



…………………



Chọn số bé nhất trong 2 số còn lại để vào vị trí
thứ n-1

Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
22


Thiết kế thuật toán
Tinh chế 1:
For (i= 1, i <= n-1, i++)

{ - Chọn số bé nhất trong các số xi, xi+1, …, xn
- Đổi chỗ cho xi

}

Tinh chế 2:
For (i= 1, i <= n-1, i++)
{ - min = x[i]

- So sánh min với các số từ xi+1 -> xn .
Nếu x[j] > min thì min = x[j] với j [i+1,n]

- đổi chổ x[i] và min
}

Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
23


Thiết kế thuật toán
for (i= 1; i <= n-1; i++)
{ min =x[i]; vt =i;
for(j = i+1; j <=n; j++)
if (x[j] < min)
{
min = x[j] ;
vt =j;
}
if (vt!=i)
{
x[vt] = x[i];
x[i] = min
}

}
Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
24


Phân tích thuật toán


Khi xây dựng thuật toán cần đặt ra các yêu cầu:


Tính đúng đắn



Tính đơn giản



Không gian



Thời gian

Khoa Công Nghệ Thông Tin - Trường Đại học Ngân hàng TP.HCM
25



×