5
5/12/2018 ctdl-slidepdf.com http://slidepdf.com/reader/full/ctdl 1/5 Cấu trúc dữ liệu và giải thuật – Thầy Nguyễn Đức Nghĩa . I.Tài liệu học tập trên lớp. Bài giảng môn Cấu trúc dữ liệu và giải thuật. (giống hoàn toàn với slide của thầy). II.Danh sách các tài liệu tham khảo . Tham khảo thêm cuốn :Cấu trúc dữ liệu và giải thuật – Đỗ Xuân Lôi.Còn mình nghĩ cuốn bài giảng của thầy cũng khá cơ bản,đầy đủ và chi tiết rồi. III.Nội dung ôn tập. 0. Tổng quan về môn học. Mục đích môn học nhằm giúp sinh viên nắm bắt được phương pháp tổ chức lưu trữ thông tin máy tính. Từ đó biết lựa chọn cấu trúc dữ liệu để giải quyết các bài toán. Nội dung môn học bao gồm hai phần: Những vấn đề cơ bản và mối quan hệ giữa cấu trúc dữ liệu và giải thuật, phân tích thiết kế thuật toán, giải thuật đệ qui; Giới thiệu một số cấu trúc dữ liệu (mảng, danh sách, cây, đồ thị...), thuật toán sắp xếp, tìm kiếm. 1.Chương 1. Các khái niệm cơ bản. 1.1. Thuật toán và độ phức tạp. 1.2. Phân biện các kí hiệu tiệm cận: Θ(tiệm cận đúng),O (tiệm cận trên), (tiệm cận dưới). Cách nói về thời gian tính: - O(f(n)) : được hiểu là đánh giá thời gian tính trong tình huống tồi nhất. - (f(n)): được hiểu là đánh giá thời gian tính trong tình huống tốt nhất. - Θ(f(n)): được hiểu là thời gian tính trong một tình huống cụ thể nào đó. 1.3. Giả ngôn ngữ. 1.4. Một số kĩ thuật phân tích thuật toán. 1.4.1.Phân tích vòng lặp for, while, repeat. for i = 1 to m do P(i); Giả sử thời gian thực hiện P(i) là t(i).Khi đó thời gian thực hiện vòng lặp for sẽ là = m i i 1 ) ( . Phân tích vòng lặp while,for xem trong giáo trình nhé.Có cả ví dụ minh họa. 1.4.2.Câu lệnh đặc trưng. 2.Chương 2 : Thuật toán đệ quy. 2.1. Khái niệm đệ quy. 2.2. Thuật toán đệ quy. - Cấu trúc của thuật toán đệ quy. - Thuật toán chia để trị. - Một số ví dụ. 2.3. Phân tích thuật toán đệ quy. - Phân tích thời gian của thuật toán chia để trị.(Quan trọng) . - Định lý thợ rút gọn. (Sử dụng mà không cần phải chứng minh). 2.4. Đệ quy có nhớ.

ctdl

Embed Size (px)

Citation preview

5/12/2018 ctdl - slidepdf.com

http://slidepdf.com/reader/full/ctdl 1/5

Cấu trúc dữ liệu và giải thuật – Thầy Nguyễn Đức Nghĩa.

I.Tài liệu học tập trên lớp.Bài giảng môn Cấu trúc dữ liệu và giải thuật. (giống hoàn toàn với slide của thầy).

II.Danh sách các tài liệu tham khảo.Tham khảo thêm cuốn :Cấu trúc dữ liệu và giải thuật – Đỗ Xuân Lôi.Còn mình nghĩ cuốn bài giảng của thầy cũng khá cơ bản,đầy đủ và chi tiết rồi.

III.Nội dung ôn tập.

0. Tổng quan về môn học.Mục đích môn học nhằm giúp sinh viên nắm bắt được phương pháp tổ chức lưu trữ

thông tin máy tính. Từ đó biết lựa chọn cấu trúc dữ liệu để giải quyết các bài toán. Nộidung môn học bao gồm hai phần: Những vấn đề cơ bản và mối quan hệ giữa cấu trúc dữliệu và giải thuật, phân tích thiết kế thuật toán, giải thuật đệ qui; Giới thiệu một số cấu

trúc dữ liệu (mảng, danh sách, cây, đồ thị...), thuật toán sắp xếp, tìm kiếm.1.Chương 1. Các khái niệm cơ bản.

1.1. Thuật toán và độ phức tạp.1.2. Phân biện các kí hiệu tiệm cận:Θ(tiệm cận đúng),O (tiệm cận trên),Ω(tiệm cận dưới).

Cách nói về thời gian tính:- O(f(n)) : được hiểu là đánh giá thời gian tính trong tình huống tồi nhất.- Ω(f(n)): được hiểu là đánh giá thời gian tính trong tình huống tốt nhất.- Θ(f(n)): được hiểu là thời gian tính trong một tình huống cụ thể nào đó.

1.3. Giả ngôn ngữ.1.4. Một số kĩ thuật phân tích thuật toán.

1.4.1.Phân tích vòng lặp for, while, repeat.for i = 1 to m do P(i);Giả sử thời gian thực hiện P(i) là t(i).Khi đó thời gian thực hiện vòng lặp for sẽ là

∑=

m

i

it

1

)( .

Phân tích vòng lặp while,for xem trong giáo trình nhé.Có cả ví dụ minh họa.1.4.2.Câu lệnh đặc trưng.

2.Chương 2 : Thuật toán đệ quy.2.1. Khái niệm đệ quy.2.2. Thuật toán đệ quy.

- Cấu trúc của thuật toán đệ quy.- Thuật toán chia để trị.- Một số ví dụ.

2.3. Phân tích thuật toán đệ quy.- Phân tích thời gian của thuật toán chia để trị.(Quan trọng).- Định lý thợ rút gọn. (Sử dụng mà không cần phải chứng minh).

2.4. Đệ quy có nhớ.

5/12/2018 ctdl - slidepdf.com

http://slidepdf.com/reader/full/ctdl 2/5

- Dùng để tăng hiệu quả của thuật toán đệ quy đối với những bài toán có số lượng bàitoán con trùng lặp là lớn.

2.5.Chứng minh tính đúng đắn của thuật toán đệ quy.(Sử dụng quy nạp toán học).2.6.Thuật toán quay lui.

3.Chương 3. Các cấu trúc dữ liệu cơ bản.3.1.Các khái niệm.- Kiểu dữ liệu, kiểu dữ liệu trừu tượng,cấu trúc dữ liệu.

3.2.Mảng.- Phân bổ bộ nhớ cho mảng.- Các thao tác với mảng : chèn , xóa.

3.3.Danh sách.- Định nghĩa.- Các phép toán cơ bản : Creat, Insert, Locate, Retrieve, Delete, Next, Prev…- Các cách cài đặt danh sách tuyến tính.

+ Biểu diễn dưới dạng mạng.

+ Danh sách móc nối : nối đơn, nối đôi.- Các ví dụ ứng dụng: bài toán Josephus, biểu diễn đa thức…3.4.Ngăn xếp.

- Định nghĩa.- Cài đặt: dùng mảng (khi biết trước được số phần tử của ngăn xếp), dùng danh sách

móc nối khi không biết trước số phần tử.Có 2 thao tác chính là: Push (đẩy 1 phần tử vàongăn xếp), Pop (lấy 1 phần tử ra ngăn xếp).

- Các ứng dụng.+ Ngoặc hợp cách.+ Sánh đôi thẻ trong HTML.+ Bài toán đổi cơ số.

+ Tính giá trị biểu thức (Quan trọng).o Cần nắm rõ các cách chuyển từ trung tố về hậu tố.o Nắm rõ các ngăn xếp giữ phép toán.o Nắm rõ thuật toán tính giá trị biểu thức hậu tố sử dụng ngăn xếp, trìnhbày từng bước cụ thể, vẽ ngăn xếp tại từng bước…

+ Khử đệ quy.3.5.Hàng đợi.

- Định nghĩa.- Cài đặt: dùng mảng, danh sách móc nối.- Các ứng dụng.

Chú ý : với mỗi cấu trúc dữ liệu cần hiểu rõ các thao tác với chúng vì có thể ta sẽ

phải trình bày cụ thể các thao tác đó.4.Chương 4. Cây.

4.1. Định nghĩa và các khái niệm.- Các thuật ngữ chính: nút, gốc, lá, con, cha, tổ tiên, hậu duệ, anh em, chiều cao,

chiều sâu.- Cây có thứ tự: Thứ tự trước, sau, giữa.(Quan trọng): cầm nắm rõ cách duyệt

theo các thứ tự này.

5/12/2018 ctdl - slidepdf.com

http://slidepdf.com/reader/full/ctdl 3/5

- Cây có nhãn.- ADT Cây: Biểu diễn cây dùng danh sách các con, dùng mảng con trỏ cha.

4.2.Cây nhị phân.- Định nghĩa và tính chất: Cây hoàn chỉnh, cây đầy đủ, câu cân đối.- Biểu diễn cậy nhị phân, các thao tác tương ứng:

- Duyệt cây nhị phân: thứ tự trước, giữa, sau. (Quan trọng).- Các ví dụ ứng dụng: cây biểu thức, cây quyết định, mã Huffman.

5.Chương 5. Các thuật toán sắp xếp.5.1. Bài toán sắp xếp.

- Yêu cầu nắm được khái niệm: tính ổn định, tại chỗ…5.2.Ba thuật toán sắp xếp cơ bản: nổi bọt, chèn, chọn.5.3.Sắp xếp trộn.5.4.Sắp xếp nhanh.5.5.Sắp xếp vun đống.

- Nắm được khái niệm đống, hàng đợi có ưu tiên.

- Nắm được các hoạt động của đống Max-heap, Min-heap.5.6.Độ phức tạp tính toán của bài toán sắp xếp.5.7.Các phương pháp sắp xếp đặc biệt: đếm, sắp xếp theo cơ số, đóng gói.

6.Chương 6. Tìm kiếm.6.1.Tìm kiếm tuần tự và tìm kiếm nhị phân.6.2.Cây nhị phân tìm kiếm.

- Định nghĩa.- Biểu diễn.- Cài đặt các phép toán: makeTreeNode, insert, search, delete.

6.3.Cây nhị phân tìm kiếm cân bằng.

- Chỉ cần nắm được định nghĩa và nhận biết được thế nào là cây nhị phân tìmkiếm cân bằng.6.4.Tìm kiếm xâu mẫu.

- Thuật toán trực tiếp.- Thuật toán Boyer – Moore.- Thuật toán Rabin – Karp.- Thuật toán Knuth – Morris – Partt.Với các thuật toán trên: cần nắm được cách phát biểu thuật toán và các làm việc của

từng thuật toán.6.5.Bảng băm.

- Cần nắm được: địa chỉ trực tiếp, hàm băm, cách giải quyết xung đột, địa chỉ mở, tạo

chuỗi.7.Chương 7. Đồ thị và các thuật toán đồ thị.

7.1.Đồ thị.- Các khái niệm: tập đỉnh, tập cạnh, đồ thị vô hướng, đồ thị có hướng, đường đi, chu

trình, tính liên thông…7.2.Biểu diễn đồ thị.

- Biểu diễn bằng ma trận kề, danh sách kề, danh sách cạnh.

5/12/2018 ctdl - slidepdf.com

http://slidepdf.com/reader/full/ctdl 4/5

7.3.Các thuật toán duyệt đồ thị.- Thuật toán tìm kiếm theo chiều rộng.(BFS)- Thuật toán tìm kiếm theo chiều sâu.(DFS)

7.4.Một số ứng dụng của tìm kiếm trên đồ thị.- Bài toán đường đi.

- Bài toán liên thông.- Bài toán sắp xếp Topo.- Bài toán tìm bao đóng truyền ứng.

7.5.Bài toán cây khung nhỏ nhất.- Thuật toán Kruskal.- Cải tiến Kruskal với cấu trúc dữ liệu Disjoint Sets.

7.6.Bài toán tìm đường đi ngắn nhất.- Thuật toán Dijkstra với cấu trúc dữ liệu hàng đợi có ưu tiên.

IV. Đề thi.- Có thể mua các tờ đề thi ở các quán photo trong trường để làm thử.

- Một đề thi để tham khảo.

Bài 1.Xét thuật toán tính giá trị của f(x,n)= n x thể hiện trong hàm F(x,n) sau đây:

int F(int x, int n)

if (n= =0) return 1;else if (n % 2 = = 0) return F(x,n/2)*F(x,n/2);

else return F(x,n/2)*F(x,n/2)*x;

Gọi T(n) là thời gian tính của thuật toán nói trên.Giả thuyết là các phép toán số họcđược thực hiện với thời gian bị chặn là hằng số.

a) Xác định công thức đệ quy cho T(n). b) Giải công thức đệ quy để đưa ra đánh giá của T(n) trong tình huống tồi nhất.

Bài 2. Đối với mỗi một trong các kiểu cấu trúc dữ liệu sau đây: Danh sách nối đơn,dánh sách nối kép, hàng đợi dùng mảng.Hãy vẽ cấu trúc dữ liệu có được sau khi lần lượt bổ sung các phần tử của dãy các khóa: 4,2,6,7,6,5

Bài 3.a) Biểu diễn cách sử dụng ngăn xếp để chuyển biểu thức dạng trung tố về dạng hậu

tố: a – b * c ^ d – f b) Hãy trình diễn cách tính giá trị của biểu thức hậu tố sau sử dụng ngăn xếp:

1 2 + 3 1 + * 1 1 + 1 - /Bài 4. Cho cây nhị phân ở hình bên.Hãy đưa ra thứ tự

các đỉnh xác định bởi duyệt cây theo thứ tự trước, giữa, sau.

Bài 5. Cho mảng A=(0,2,4,3,8,9,6,5,7) biểu diễn 1 Min-heap.a) Vẽ cây nhị phân tương ứng với Min-heap đã cho. b) Trình bày các thao tác cần thực hiện trên cây để bổ sung

5/12/2018 ctdl - slidepdf.com

http://slidepdf.com/reader/full/ctdl 5/5

thêm key=1 vào min-heap nói trên để thu được 1 min-heap mới.

Bài 6. Struct TreeNode float key;struct TreeNode * LeftPtr;

struct TreeNode * RightPtr;;Typedef struct TreeNode BSTree;

a) Hãy viết hàm C sử dụng cấu trúc dữ liệu trên để thực hiện các thao tác sau đây vớicây nhị phân.

- Tạo một nút mới.BSTree *makeTreeNode(float value);

- Bổ sung một nút mới vào cây nhị phân tìm kiếm.BSTree *insert(BSTree * nodePtr, float item);

b) Vẽ cây nhị phân tìm kiếm đối với tập các khóa S =(3,2,5,4,7,6,1) thu được nhờ thực

hiện bổ sung lần lượt các khóa theo thứ tự đã cho vào cây nhị phân.Khởi tạo ban đầu làrỗng