Cấu trúc dữ liệu là môn học căn bản nhưng là ác mộng của hơn 80% sinh viên học chuyên ngành công nghệ thông tin. Bài giảng trên lớp nhanh, ít ví dụ minh họa, ít thực hành. Sinh viên tự phải xoay sở lập trình bài tập để nộp.Đây là toàn bộ bài giảng về môn cấu trúc dữ liệu. Gồm 299 slide giúp hiểu hết về môn Cấu trúc dữ liệu, có cả bài tập để sinh viên thực hànhH
CẤU TRÚC DỮ LIỆU Nội dung gồm chương: Chương 1: Nhập môn cấu trúc liệu Chương2: Cấu trúc liệu danh sách Chương3: Cây Chương4: Các thuật toán tìm kiếm Chương5: Các thuật toán xếp Chương6: Đồ thị KHOA KHOA HỌC MÁY TÍNH – BỘ MÔN LẬP TRÌNH BÀI GIẢNG CẤU TRÚC DỮ LIỆU (Data Structures) Chương1: NHẬP MÔN CẤU TRÚC DỮ LIỆU Lê Tân NỘI DUNG TRÌNH BÀY Ý nghĩa cấu trúc liệu Cấu trúc liệu vấn đề liên quan Thuật toán Ý nghĩa cấu trúc liệu DATA STRUCTURE + ALGORITHM = PROGRAM Niklaus wirth • Để giải toán máy tính: cần thuật toán • Thuật toán phản ánh phép xử lý • Đối tượng để xử lý (trên máy tính) liệu • Dữ liệu biểu diễn thông tin cần thiết toán • vd: •Cấu trúc liệu thay đổi thuật toán thay đổi theo Cấu trúc liệu vấn đề liên quan a Dữ liệu lưu trữ liệu b Các kiểu liệu đơn giản c Các kiểu liệu cấu trúc Cấu trúc liệu vấn đề liên quan a Dữ liệu lưu trữ liệu Dữ liệu vật mang thông tin chuẩn hóa Cần phân biệt liệu với thông tin: - Dữ liệu tồn khách quan - Thông tin có ý nghĩa chủ quan Cấu trúc liệu vấn đề liên quan a Dữ liệu lưu trữ liệu Trong toán, liệu gồm tập phần tử sở, gọi liệu nguyên tử Nó chữ số, ký tự, từ,…tùy vào toán cụ thể Trên sở liệu nguyên tử, cung cách liên kết chúng với dẫn tới cấu trúc liệu khác Cấu trúc liệu vấn đề liên quan a Dữ liệu lưu trữ liệu - Khi chọn cấu trúc liệu phải nghĩ tới phép toán tác động lên cấu trúc ngược lại - Cách biểu diễn cấu trúc liệu nhớ gọi cấu trúc lưu trữ (storage structure) - Có thể có nhiều CTLT khác cho CTDL, có nhiều CTDL khác mà cài đặt nhớ kiểu cấu trúc lưu trữ - CTDL CTDL Cấu trúc liệu vấn đề liên quan a Dữ liệu lưu trữ liệu b Các kiểu liệu đơn giản c Các kiểu liệu cấu trúc Cấu trúc liệu vấn đề liên quan b Các kiểu liệu đơn giản Các kiểu liệu Các kiểu liệu đơn giản Các kiểu liệu cấu trúc Kích thước: 1Byte Kiểu lôgic Kiểu char Kiểu int Kiểu float PVBD: True, False Kích thước: 1Byte PVBD: -128 ->127 Kích thước: 2Byte PVBD: -32768 -> 32767 Kích thước: 4Byte PVBD: 3.4E-38 ->3.4E+38 10 6.3- Duyệt đồ thị 10 11 12 13 Kết tìm kiếm theo chiều sâu: 1, 2, 10, 4, 3, 5, 8, 6, 7, 9, 12, 11, 13 285 6.3- Duyệt đồ thị Đặc điểm: - Mỗi đỉnh thăm lần - Mỗi lần quay chương trình chính, thuật toán tạo thành phần liên thông - Độ phức tạp thuật toán O(n+m) 286 6.3- Duyệt đồ thị Tim kiem theo chieu rong: void main() { for (v ∈ V) chuaxet[v]:=true; for (v ∈ V) if (chuaxet[v]) BFS(v); } 287 6.3- Duyệt đồ thị void BFS(v) { Queue:=∅; Queue v; (*nap v vao Queue *) chuaxet[v]:=false; while (Queue ≠ ∅) { p Queue; thamdinh(p); for (u ∈ Ke(p)) if (chuaxet[u]) {Queue u; chuaxet(u):=false;} } } 288 6.3- Duyệt đồ thị 10 11 12 13 Kết tìm kiếm theo chiều rộng: 1, 2, 10, 12, 4, 5, 11, 13, 3, 8, 9, 6, 289 6.4- Đường ngắn nhất Đường độ dài n từ đỉnh u đến đỉnh v, với n số nguyên dương đồ thị G=(V,E) dãy cạnh (hoặc cung) e1, e2, , en đồ thị cho e1=(x0,x1),e2=(x1,x2), ,en=(xn-1,xn), với x0=u xn=v Trong đồ thị đơn, ta ký hiệu đường dãy đỉnh x0, x1, , xn Nếu cung đặt tương ứng số thực a(xi,xj) gọi trọng số, lúc độ dài đường là: Σa(xi-1,xj) với i=1 đến n 290 6.4- Đường ngắn nhất Thuật toán Dijkstra: Đầu vào: Đồ thị G=(V,E) biểu diễn ma trận trọng số a[u,v] với u,v ∈ V (a[u,v] >= 0) Đầu ra: Khoảng cách từ đỉnh s (đỉnh bắt đầu cho trước) đến tất đỉnh lại ký hiệu d[v] truoc[v] ghi nhận đỉnh trước v đường ngắn từ s đến v -Ký hiệu: T tập hợp chứa đỉnh có nhãn tạm thời 291 6.4- Đường ngắn nhất void Dijkstra() { for (v ∈ V) {d[v]=a[s,v]; truoc[v]=s;} d[s]=0; T= V \ {s}; while (T≠∅) { tìm đỉnh u ∈ T thỏa mãn d[u]=min{d[z]: z ∈ T} T= T \ {u}; //cố định nhãn đỉnh u for (v ∈ T ) //gán nhãn lại cho đỉnh T if (d[v]>d[u]+a[u,v]) { d[v]=d[u]+a[u,v]; truoc[v]=u; } } } 292 6.4- Đường ngắn nhất 1 1 4 293 6.4- Đường ngắn nhất Bước lặp đỉnh đỉnh đỉnh đỉnh đỉnh đỉnh khởi tạo 0,1 1,1* ∞,1 ∞,1 ∞,1 ∞,1 - - 6,2 3,2* ∞,1 8,2 - - 4,4* - 7,4 8,2 - - - - 7,4 5,3* - - - - 6,6* - -viết d[v], truoc[v] ô -đỉnh có * chọn để cố dịnh nhãn bước lặp xét, nhãn không bị biến đổi bước Độ phức tạp thuật toán O(mlogn) 294 Tổng kết chương Hãy kể tên cách mô tả đồ thị?ưu điểm cách mô tả vậy? Kể ứng dụng đồ thị mà bạn biết? Hãy cho biết ý tưởng khác duyệt đồ thị theo chiều rộng chiều sâu? Hãy cho biết ý tưởng điều kiện thuật toán Dijkstra? 295 Bài tập Tìm đường ngắn từ đỉnh f đến đỉnh z đồ thị sau: b d a c 3 e z f g 296 Bài tập Tìm đường ngắn từ đỉnh a đến đỉnh z đồ thị sau: b c e f d g 297 Bài tập Nhập xuất ma trận kề Thông báo đỉnh kề đỉnh j tùy ý nhập từ bàn phím Xây dựng ngăn xếp đưa đỉnh kề j vào ngăn xếp Xây dựng hàng đợi đưa đỉnh kề j vào hàng đợi 298 Bài tập Bài 1: Viết chương trình nhập đồ thị từ bàn phím lưu trữ dạng ma trận kề Bài 2: Viết chương trình chuyển CTDL biểu diễn đồ thị từ ma trận kề sang danh sách kề ngược lại Bài 3: Viết chương trình liệt kê tất đỉnh đồ thị thuật toán duyệt theo chiều sâu, duyệt theo chiều rộng Bài 4: Viết chương trình nhập đồ thị đỉnh đường ngắn đỉnh 299 ... KHOA HỌC MÁY TÍNH – BỘ MÔN LẬP TRÌNH BÀI GIẢNG CẤU TRÚC DỮ LIỆU (Data Structures) Chương1: NHẬP MÔN CẤU TRÚC DỮ LIỆU Lê Tân NỘI DUNG TRÌNH BÀY Ý nghĩa cấu trúc liệu Cấu trúc liệu vấn đề liên quan... Cấu trúc liệu thay đổi thuật toán thay đổi theo Cấu trúc liệu vấn đề liên quan a Dữ liệu lưu trữ liệu b Các kiểu liệu đơn giản c Các kiểu liệu cấu trúc Cấu trúc liệu vấn đề liên quan a Dữ liệu. .. 10 Cấu trúc liệu vấn đề liên quan a Dữ liệu lưu trữ liệu b Các kiểu liệu đơn giản c Các kiểu liệu cấu trúc 11 Cấu trúc liệu vấn đề liên quan c Các kiểu liệu cấu trúc Các kiểu liệu Các kiểu liệu