Cấu Trúc Dữ Liễu Và Giải Thuật Chapter1 Introduction . Tài Liệu Gồm 6 Chapter Mong các Bạn theo dõi để ôn tập đủ nha Để Cập Nhật Thêm Tìm Hiểu Hơn Nữa Về Tài Liệu IT Thì Các Bạn Có Thể Truy Cập : https:123doc.orgtrangcanhan4336953tailieuit.htm CẢM ƠN CÁC BẠN ĐÃ THEO DÕI
Trang 1Môn học
CTDL & GT
1
Trang 2Nội dung môn học
Những khái niệm cơ bản
Cấu trúc danh sách, ngăn xếp, hàng đợi
Cấu trúc cây
Đồ thị
Tập hợp
Các giải thuật tìm kiếm, sắp xếp
2
Trang 3Tài liệu tham khảo
CTDL>, Đinh Mạnh Tường, Đại học
Công nghệ, ĐHQG Hà Nội
Giải thuật và lập trình, Bài giảng chuyên đề, Lê Minh Hoàng, Đại học Sư phạm
CTDL>, Đỗ Xuân Lôi, Nhà xuất bản
ĐH Quốc Gia Hà Nội, 2010 (Tái bản)
3
Trang 4Tài liệu tham khảo
Slide bài giảng CTDL>, GS.TS Hồ Sỹ Đàm, ĐH Công nghệ
Slide bài giảng CTDL>, Mai Xuân
Hùng, ĐH CNTT
Một số tác giả khác
4
Trang 5Chương 1:
Những khái niệm cơ bản
5
Trang 6III Cấu trúc dữ liệu
Giải bài toán trên máy tính
Khái niệm mô hình dữ liệu
Cấu trúc dữ liệu
Các tiêu chuẩn của CTDL
Vai trò của CTDL
Bài toán và thuật toán
Độ phức tạp của thuật toán
6
Trang 71 Giải bài toán trên máy tính
Bước 1: Xác định bài toán: input, output
Bước 2: Thiết kế, mô tả thuật toán
Bước 3: Viết chương trình
Chọn CTDL, ngôn ngữ lập trình
Bước 4: Hiệu chỉnh
Xây dựng các bộ dữ liệu test đặc trưng
Chạy thử
Bước 5: Viết tài liệu
Hướng dẫn sử dụng
Thuật toán, CTDL
7
Trang 82 Mô hình dữ liệu
Là các trừu tượng :đồ thị, tập hợp, danh sách, cây
Hai khía cạnh:
Giá trị (kiểu dữ liệu)
Các phép toán ( operation)
Chương trình có thể truy xuất đến các
vùng lưu trữ
8
Trang 93 Cấu trúc dữ liệu
Là các đơn vị cấu trúc (construct) của NNLT dùng để biểu diễn các mô hình dữ liệu
Ví dụ: mảng, xâu, bản ghi, file
9
CTDL + Thuật giải = chương trình
Các tiêu chuẩn đánh giá CTDL
Phản ánh đúng thực tế
Phù hợp với các thao tác xử lý
Tiết kiệm tài nguyên hệ thống
Trang 104 Thuật toán/Giải thuật
10
Thuật toán để giải một bài toán là một dãy hữu hạn các thao tác đươc sắp xếp theo một trật tự xác định sao cho sau khi thực hiện dãy thao tác đó, từ Input của bài toán này, ta nhận được Output cần tìm
Trang 114.1 Sự cần thiết của thuật toán
Tại sao sử dụng máy tính để xử lý dữ
liệu?
Nhanh hơn
Nhiều hơn
Giải quyết những bài toán mà con người
không thể hoàn thành được
Là m sao đạt được những mục tiêu đó?
Nhờ vào sự tiến bộ của kỹ thuật: tăng cấu
hình máy chi phí cao
Nhờ vào các thuật toán hiệu quả: thông minh
và chi phí thấp
11
Trang 124.2 Các đặc trưng của thuật toán
ra các dữ liệu tương ứng với lời giải của bài toán
xác
hữu hạn bước với mọi đầu vào
Đơn trị: Các kết quả trung gian của từng bước thực
hiện thuật toán được xác định một cách đơn trị và chỉ phụ thuộc đầu vào và các kết quả của các bước trước
Tổng quát: Giải thuật có thể áp dụng để giải mọi bài
toán có dạng đã cho
12
Trang 134.3 Mô tả thuật toán
Dạng ngôn ngữ tự nhiên
Dạng lưu đồ (sơ đồ khối)
Dạng mã giả
Ngôn ngữ lập trình
13
Trang 144.3 Biểu diễn thuật toán
Ví dụ: Tìm giá trị lớn nhất của mảng a1,
• Khởi tạo Max = a1
• Với mỗi i, nếu ai > Max thì thay giá trị Max= ai
14
Trang 154.3 Biểu diễn thuật toán
Biểu diễn bằng ngôn ngữ tự nhiên:
NN tự nhiên thông qua các bước được tuần tự liệt
kê để biễu diễn thuật toán
15
B1 Nhập N và dãy a1, , aN
B2 Đặt Max = a1, i = 2
B3 Nếu i > N thì đến b 5
B4
4.1 N ếu ai > Max thì Max = ai
4.2 Đặt i=i+1 rồi quay b.3
B5 Đưa ra Max rồi kết thúc
Ưu điểm:
Đơn giản, không cần kiến thức về về cách biểu
diễn (mã giả, lưu đồ, )
Nhược điểm:
Dài dòng, không cấu trúc
Đôi lúc khó hiểu, không diễn đạt được thuật toán
Trang 164.3 Biểu diễn thuật toán
Biểu diễn ở dạng lưu đồ
Sử dụng hệ thống các nút, cung hình dạng khác nhau thể hiện các chức năng khác nhau
16
Trang 174.3 Biểu diễn thuật toán
17
Trang 184.3 Biểu diễn ở dạng mã giả
18
Ngôn ngữ tựa ngôn ngữ lập trình:
Dùng cấu trúc chuẩn hóa, chẳng hạn tựa
Trang 194.3 Biểu diễn ở dạng mã giả
Khai báo hàm (thuật toán)
Thuật toán <tên TT> (<tham số>)
Input: < dữ liệu vào>
Output: < dữ liệu ra>
<Các câu lệnh>
End
Trang 204.3 Biểu diễn ở dạng mã giả
Trả giá trị về: return [giá trị]
Lời gọi hàm: <Tên>(tham số)
Trang 214.3 Biểu diễn ở dạng mã giả
Trang 224.4 Biểu diễn bằng NNLT
22
Dùng ngôn ngữ máy tính (C, Pascal, ) để diễn tả thuật toán, CTDL thành câu lệnh
Kỹ năng lập trình đòi hỏi cần học tập và
thực hành (nhiều)
Dùng phương pháp tinh chế từng bước để chuyển hoá bài toán sang mã chương
trình cụ thể
Trang 235 Ước lượng thời gian thực hiện
23
Thời gian chạy của một chương trình phụ
thuộc các yếu tố:
Dữ liệu đầu vào
Chất lượng của mã máy được tạo ra bởi
chương trình dịch
Tốc độ thực thi của lệnh máy
Độ phức tạp về thời gian của thuật toán
Trang 245.1 Độ phức tạp thuật toán
24
Lựa chọn thuật toán
Dễ hiểu, dễ cài đặt và dễ ghi chép ?
Sử dụng các tài nguyên hiệu quả?
Tùy đặc tính của bài toán
Phân tích theo kinh nghiệm
Thực hiện và kết luận dễ mắc lỗi
Kích thước dữ liệu đầu vào là quan trọng: T(n)
Trang 255.1 Phương pháp thực nghiệm
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ả tập các dữ liệu vào của thuật toán khó khăn và tốn nhiều chi phí
Phụ thuộc vào phần cứng
Trang 265.1 Phương pháp xấp xỉ toán học
g(n) là giới hạn trên của T(n)
Ví dụ: nếu T(n) = n2 + 1 thì T(n) = O(n2)
Chọn c=2 và n0 =1, khi đó với mọi n>=1, ta
có T(n)= n2+1 <= 2n2 =2g(n)
Trang 275.1 Phương pháp xấp xỉ toán học
27
Các tính chất:
(i) Tính bắc cầu: nếu f(n)= O(g(n)) và g(n)= O(h(n)) thì f(n)= O(h(n))
(ii) Tính phản xạ: f(n)=O(f(n))
Trang 285.2 Phương pháp xấp xỉ toán học
28
Quy tắc hằng số:
Nếu P có T(n)= O(c1f(n)) P có độ phức tạp
O(f(n))
Quy tắc cộng:
Nếu P1 có T1 (n) = O( f(n) và P2 có T2(n)=
O(g(n)), khi đó: T1(n) +T2(n) = O(f(n) +g(n))
Quy tắc nhân
Nếu P có T(n)= O(f(n)) Khi đó nếu thực hiện
k(n) lần P với k(n)=O(g(n)) thì độ phức tạp la
O(f(n) g(n))
Trang 295.3 Áp dụng đánh giá chương trình
Trang 305.3 Áp dụng đánh giá chương trình
Trang 315.3 Áp dụng đánh giá chương trình
• h takes values 1, 2, 4, … until it exceeds n
• There are 1 + log 2 n iterations
• Complexity O(log n)
Trang 325.3 Áp dụng đánh giá chương trình
from the previous one where it changes by a factor
- O(log n)
Trang 335.3 Phân lớp độ phức tạp
Trang 355.4 Độ phức tạp tt và dữ liệu vào