1
CấU TRÚC Dữ LIệU VÀ
GIảI THUẬT
DATA STRUCTURE AND
ALGORITHMS
Nội dung môn học
2
Chương 0: Giới thiệu chung về CTDL và GT
Chương 1: Ôn tập C/C++
Chương 2: Đệ quy (Recursion)
Chương 3: Tìm kiếm (Searching)
Chương 4: Sắp xếp (Sorting)
Chương 5: Ngăn xếp - Hàng đợi (Stacks Queues)
Chương 6: Danh sách liên kết (Linked List)
Chương 7: Cây (Tree)
Chương 1: Ôn tập
Đánh giá kết quả
3
Kiểm tra giữa kỳ: thực hành
1.
Điểm Kiểm tra giữa kỳ < 4 không được thi kết thúc môn
học lại
2.
Kiểm tra cuối kỳ: thực hành
Điểm Kiểm tra cuối kỳ < 5 không được thi kết thúc môn
học lại
3.
Bài tập lớn: làm các bài tập trong module
4.
5.
Điểm Đề tài < 5 không được thi kết thúc môn học lại
Thi kết thúc môn: trắc nghiệm
Kiểm tra thường kỳ
Chương 1: Ôn tập
Tài liệu học tập
4
Giáo trình:
Tham khảo:
C & Data Structures, P. S. Deshpande, O. G. Kakde CHARLES RIVER MEDIA, INC. Hingham, Massachusetts.
Giáo trình Cấu trúc dữ liệu 1, Trần Hạnh Nhi – Dương Anh
Đức, Trường ĐHKHTN – ĐHQG TP.HCM.
Phần mềm lập trình:
C-Free
Borland C++
…
Chương 1: Ơn tập
Nhắc nhở một số quy định
Đi học đúng giờ
Đeo thẻ SV
Không để chuông điện thoại reo trong giờ học
Không nghe điện thoại, nhắn tin trong giờ học
Khơng nói chuyện riêng, làm ồn khi nghe giảng
Mang đầy đủ tài liệu học tập của mơn học (khi
học LT và TH): giáo trình, bài tập, tập chép bài
(hoặc slide bài giảng), usb để lưu bài tập
Phải làm bài tập ở nhà
Nếu vi phạm: Nhắc nhở chung Bị mời ra khỏi
lớp Xóa tên khỏi mơn học
5
Chương 1: Ơn tập
6
Chương 0: Giới thiệu
chung
Nội dung
7
Cấu trúc dữ liệu
Thuật toán
Độ phức tạp của thuật tốn
Chương 1: Ơn tập
Cấu trúc dữ liệu
8
(1) Sự tổ chức hợp lý của các thành phần dữ liệu,
(2) Tập các thao tác để truy cập các thành phần dữ liệu.
Ví dụ:
Mảng (Array)
Danh sách liên kết (Linked List)
Ngăn xếp (Stack)
Hàng đợi (Queue)
Cây (Tree)
…
(1) the logical arrangement of data elements, combined with
(2) the set of operations we need to access the elements.
Chương 1: Ôn tập
Nội dung
9
Cấu trúc dữ liệu
Thuật toán
Độ phức tạp của thuật tốn
Chương 1: Ơn tập
Thuật tốn
10
Tập các bước có thể tính tốn được để đạt
được kết quả mong muốn (A computable set of
steps to achieve a desired result)
Ví dụ: Tính tổng các số nguyên lẻ từ 1 n
B1: S=0
B2: i=1
B3: Nếu i>n thì sang B7, ngược lại sang B4
B4: S=S+i
B5: i=i+2
B6: Quay lại B3
B7: Tổng cần tìm là S
Chương 1: Ơn tập
Mối quan hệ của CTDL và thuật toán
11
CTDL + Thuật tốn = Chương
trình
Chương 1: Ơn tập
Nội dung
12
Cấu trúc dữ liệu
Thuật toán
Độ phức tạp của thuật tốn (algorithm
complexity)
Chương 1: Ơn tập
Thời gian thực hiện thuật toán
13
Thời gian giải quyết một bài toán phụ thuộc
vào nhiều yếu tố
Tài nguyên (bộ nhớ,…)
Tốc độ thực thi của máy tính (CPU,…)
Thuật tốn
Làm thế nào đánh giá?
Chương 1: Ôn tập
Độ phức tạp thuật toán
14
Để đánh giá hiệu quả của một thuật tốn, có thể
tính số lượng các phép tính phải thực hiện của
thuật tốn này:
Phép so sánh
Phép gán
Thơng thường số các phép tính được thực hiện phụ
thuộc vào cỡ của bài tốn, tức là độ lớn của đầu vào
Vì thế độ phức tạp thuật toán là một hàm phụ thuộc
đầu vào
Tuy nhiên, khơng cần biết chính xác hàm này mà chỉ
cần biết một ước lượng đủ tốt của chúng
Để ước lượng độ phức tạp của một thuật toán ta
thường dùng khái niệm Big-O
Chương 1: Ôn tập
Ví dụ
15
Bước 1. Gán Tổng = 0. Gán i = 0.
Bước 2.
int tong=0, i=0;
– Tăng i thêm 1 đơn vị.
do{
– Gán Tổng = Tổng + i
i++;
Bước 3. So sánh i với n
tong+=i;
– Nếu i < n, quay lại bước 2.
}while (i
– Ngược lại, dừng thuật tốn.
• Số phép gán của thuật tốn là bao nhiêu?
• Số phép so sánh là bao nhiêu?
Gán: f(2n + 2), So sánh: f(n)
Độ phức tạp: O(n)
Chương 1: Ôn tập
Các độ phức tạp thường gặp (GT.53)
16
Độ phức tạp hằng số: O(1) – thời gian chạy
không phụ thuộc vào độ lớn đầu vào
Độ phức tạp tuyến tính: O(n) – thời gian
chạy tỉ lệ thuận với độ lớn đầu vào
Độ phức tạp logarit: O(logn)
Độ phức tạp đa thức: O(P(n)), với P là đa thức có
bậc từ 2 trở lên
Độ phức tạp hàm mũ: O(2n)
Chương 1: Ôn tập
Bảng so sánh các độ phức tạp của
thuật toán
17
Một số lớp thuật tốn
Chương 1: Ơn tập
Thứ tự độ phức tạp của thuật toán
18
O(2 n )
n!
độ phức tạp cao khó chấp nhận
Chng 1: ễn tập
19
Chương 1: Ơn tập C/C++
(Tham khảo tài liệu mơn Phương Pháp Lập Trình)
Chương 1: Ơn tập C/C++
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Cấu trúc chương trình C/C++
Các cú pháp cơ bản
Địa chỉ (Address)
Con trỏ (Pointer)
Mảng (Array)
Mảng con trỏ (Pointer array)
Mảng hai chiều (Two-dimensional array)
Cấu trúc (Structure)
Con trỏ cấu trúc (Structure pointer)
Chuỗi (String)
Tập tin (File)
Hàm (Function)
20
1. Cấu trúc chương trình C/C++
21
Cấu trúc chương trình C
#include "stdio.h"
#include "conio.h"
void main() /*ham chinh*/
{
int a=7;
printf( “%d”, a );
getch();
}
Chương 1: Ôn tập
1. Cấu trúc chương trình C/C++
22
Cấu trúc chương trình C++
#include "iostream.h"
#include "conio.h"
void main() /*ham chinh*/
{
int a=7;
cout<< a ;
getch();
}
Chương 1: Ôn tập
1. Cấu trúc chương trình C/C++
23
Qui cách viết chương trình
Các dòng trong cùng một khối thẳng cột
Khối con của một khối lùi vào ít nhất một TAB
Ghi chú thích ở những chỗ cần thiết
Chương 1: Ôn tập
Chương 1: Ơn tập C/C++
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Cấu trúc chương trình C/C++
Các cú pháp cơ bản
Địa chỉ (Address)
Con trỏ (Pointer)
Mảng (Array)
Mảng con trỏ (Pointer array)
Mảng hai chiều (Two-dimensional array)
Cấu trúc (Structure)
Con trỏ cấu trúc (Structure pointer)
Chuỗi (String)
Tập tin (File)
Hàm (Function)
24
2. Các cú pháp cơ bản
25
Khai báo biến:
Kiểu_dữ_liệu tên_biến;
Khai báo và khởi tạo biến:
Kiểu_dữ_liệu tên_biến = giá trị;
Khai báo hằng số:
const Kiểu_dữ_liệu tên_biến =
giá trị;
Chương 1: Ôn tập