Cơ sở dữ liệu và giải thuật - Thầy Vũ Song Tùng
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Vũ Song Tùng 1 NỘI DUNG 2 Giới thiệu chung Danh sách tuyến tính Cây Đồ thị Sắp xếp Tìm kiếm I. Giới thiệu chung 3 Các kỹ thuật lập trình Ngôn ngữ giả lập trình Sơ lược về CTDL và giải thuật I. Giới thiệu chung 4 • Lập trình hàm – Chia các giai đoạn của chương trình vào các hàm – Thể hiện những đoạn mã tương tự trong một hàm – Ưu điểm • Dễ quản lý • Tiết kiệm dung lượng chương trình I. Giới thiệu chung 5 • Lập trình hướng đối tượng – Trừu tượng hóa các thành phần của chương trình – Đặc điểm • Tính đóng gói – các thuộc tính của một thành phần và các hàm xử lý các thuộc tính đó được định nghĩa trong cùng một khối • Tính đa hình – cho phép tạo ra nhiều hình thái của một loại thành phần • Tính kế thừa – cho phép sử dụng lại các định nghĩa đã có của một thành phần để tạo ra một thành phần mới I. Giới thiệu chung 6 • Các quy ước Các kiểu dữ liệu Mô tả Tập các số thực, nguyên và nguyên dương Kiểu bất kz Mảng chứa 𝓇 𝓁 + 1 phần tử kiểu T Dãy Tập hợp I. Giới thiệu chung 7 • Các quy ước Toán tử Mô tả Gán So sánh And, Or, Not logic ++/−− Làm tròn xuống và lên Nếu C đúng thực hiện I , C sai thực hiện J Dãy các phần tử Tập hợp các phần tử ; Ngắt các biểu thức I. Giới thiệu chung 8 • Biểu thức Loại Cú pháp Khai báo biến Điều kiện Lặp xác định Lặp không xác định I. Giới thiệu chung 9 • Biểu thức Loại Cú pháp Tạo con trỏ Cấp phát bộ nhớ Giải phóng bộ nhớ Lấy địa chỉ Lấy nội dung trong con trỏ Truy cập thành viên của con trỏ I. Giới thiệu chung 10 • Hàm và thủ tục [...]... trữ dữ liệu (info) và địa chỉ liên kết (link) đến phần tử khác • Dùng để lưu trữ danh sách động hoặc các cấu trúc phi tuyến 𝐜𝐥𝐚𝐬𝐬 𝐻𝑎𝑛𝑑𝑙𝑒 = 𝐩𝐨𝐢𝐧𝐭𝐞𝐫 𝐭𝐨 𝐼𝑡𝑒𝑚 𝐜𝐥𝐚𝐬𝐬 𝐼𝑡𝑒𝑚 𝑖 𝐨𝐟 𝑇𝑦𝑝𝑒 𝑖𝑛𝑓𝑜 ∶ 𝑇𝑦𝑝𝑒 𝑙𝑖𝑛𝑘 = 𝐭𝐡𝐢𝐬 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 … 𝑎 ≔ 𝐼𝑡𝑒𝑚 𝑥 𝑏 ≔ 𝐼𝑡𝑒𝑚 𝑦 𝑎 𝑙𝑖𝑛𝑘 ≔ 𝐚𝐝𝐝𝐫𝐞𝐬𝐬 𝐨𝐟 𝑏 x y x y 13 I Giới thiệu chung • Giải thuật đệ quy – Giải thuật gọi lại chính nó, gồm 2 thành phần: • Điều kiện dừng đệ quy • Gọi đệ quy – Áp dụng giải. .. nó, gồm 2 thành phần: • Điều kiện dừng đệ quy • Gọi đệ quy – Áp dụng giải thuật đệ quy khiến cho thuật toán trở nên mạch lạc 14 I Giới thiệu chung • Độ phức tạp của thuật toán O(…) – Số lượng trung bình (Tcp) của phép toán phức tạp nhất trong thuật toán – Độ phức tạp của các thuật toán sắp xếp và tìm kiếm trong dãy n phần tử: Thuật toán Độ phức tạp SelectSort O(n2) InsertSort O(n2) BubbleSort O(n2)... − 𝓁 + 1 • Vun đống là thuật toán để cây có tính chất của đống (heap – nút cha > nút con) 33 11 44 66 33 55 22 22 66 44 66 55 11 22 55 44 33 11 32 III Cây • Cây nhị phân tìm kiếm • Tất cả các nút của cây con trái phải nhỏ hơn gốc và nhỏ hơn tất cả các nút của cây con phải • Sử dụng trong các danh sách thường xuyên phải xử l{ các thao tác thêm, xóa dữ liệu 6 4 1 4 7 8 3 8 3 9 4 -6 6 8 3 1 +7 9 1 7 9... Cây gần đầy Cây zíc-zắc Cây lệch phải C F Cây đầy đủ B D C E F G Cây ho{n chỉnh 28 III Cây • Mô hình lưu trữ • Mỗi nút trên cây được coi là một cây con gồm một trường chứa dữ liệu (info) và hai địa chỉ liên kết với cây con trái (left) và phải (right) Tree A B D C E 29 III Cây • Định nghĩa – 𝐜𝐥𝐚𝐬𝐬 𝐵𝑖𝑛𝑎𝑟𝑦𝑇𝑟𝑒𝑒 𝐜𝐥𝐚𝐬𝐬 𝐻𝑎𝑛𝑑𝑙𝑒 = 𝐏𝐨𝐢𝐧𝐭𝐞𝐫 𝐭𝐨 𝐵𝑖𝑛𝑎𝑟𝑦𝑇𝑟𝑒𝑒 𝐜𝐥𝐚𝐬𝐬 𝐵𝑖𝑛𝑎𝑟𝑦𝑇𝑟𝑒𝑒 𝑖 ∶ 𝑇𝑦𝑝𝑒; 𝑡 ∶ 𝐻𝑎𝑛𝑑𝑙𝑒 𝐨𝐟 𝑇𝑦𝑝𝑒 𝑒 = 𝑖 ∶ 𝑇𝑦𝑝𝑒... removeAll makeEmpty 25 III Cây Các khái niệm Cây nhị phân Một vài ứng dụng 26 III Cây 𝑇 ∶ 𝑇1 , 𝑇2 , … , 𝑇 𝑛 | 𝑇 𝑖−𝑠𝑢𝑏𝑡𝑟𝑒𝑒 Các khái niệm A E F G H Lá C, E, F, H 3 Chiều cao 4 Mức 0 D B, C, D, G Cấp C A Cành B Gốc A Mức 1 B, C, D Mức 2 E, F, G Mức 3 H 27 III Cây 𝑇 ∶ 𝑇𝑙𝑒𝑓𝑡 , 𝑇 𝑟𝑖𝑔𝑡 A A A B B C B C D D D A C E F A B D E Cây gần đầy Cây zíc-zắc Cây lệch phải C F Cây đầy đủ B D C E F G Cây ho{n chỉnh 28... QuickSort O(nlog2n) HeapSort O(nlog2n) LinearSearch O(n) BinarySearch O(log2n) 15 II Danh sách tuyến tính Ngăn xếp Hàng đợi Danh sách liên kết 16 II Danh sách tuyến tính • Dãy các phần tử được thêm vào (push) và lấy ra (pop) tại cùng một đầu của dãy 𝑆 = 𝑒1 , 𝑒2 , … , 𝑒 𝑡−1 , 𝑒 𝑡 𝑒 ↦ 𝑆 ⇒ 𝑆 ≔ 𝑒1 , 𝑒2 , … , 𝑒 𝑡 , 𝑒 𝑡+1 𝑒 ↤ 𝑆 ⇒ 𝑒, 𝑆 ≔ 𝑒 𝑡 , 𝑒1 , 𝑒2 , … , 𝑒 𝑡−1 17 II Danh sách tuyến tính • Định nghĩa ngăn... 1 𝑛 𝐨𝐟 𝑇𝑦𝑝𝑒 𝐩𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 Push 𝑒 ∶ Type 𝑡++; 𝑠 𝑡 ≔ 𝑒 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 Pop ∶ Type 𝑡 ′ = 𝑡; 𝑡−− 𝐫𝐞𝐭𝐮𝐫𝐧 𝑠 𝑡′ 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 IsEmpty ∶ 0,1 𝐫𝐞𝐭𝐮𝐫𝐧 𝑡 < 1? 1 ∶ 0 18 II Danh sách tuyến tính • Dãy các phần tử được thêm vào (enqueue) và lấy ra (dequeue) tại hai đầu khác nhau của dãy 𝑄 = 𝑒 𝑓 , 𝑒 𝑓+1 , … , 𝑒 𝑟 𝑒 ↦ 𝑄 ⇒ 𝑄 ≔ 𝑒 𝑓 , 𝑒 𝑓+1 , … , 𝑒 𝑟 , 𝑒 𝑟+1 𝑒 ↤ 𝑄 ⇒ 𝑒, 𝑄 ≔ 𝑒 𝑓 , 𝑒 𝑓+1 , … , 𝑒 𝑟 19 II Danh sách tuyến tính • Định nghĩa... Các ứng dụng 34 IV Đồ thị • Đồ thị (graph) được xác định bằng tập các đỉnh (vertex) và tập các cung (edge) giữa các đỉnh 𝐺 = 𝑉, 𝐸 𝑒 = 𝑢, 𝑣 | 𝑢,𝑣∈𝑉;𝑒∈𝐸 35 IV Đồ thị • Phân loại a Graph Directed e 5 km d e Directed graph 6 km b 15 km EdgeLabeled d Undirected graph a VertexLabeled b c c d Undirected a b c 12 km e Edge-Labeled graph 36 ... Dequeue ∶ Type 𝑓 ′ = 𝑓; 𝑐 = 1? 𝑓 ≔ 𝓇 ≔ 0 ∶ Inc 𝑓 ; 𝑐−− 𝐫𝐞𝐭𝐮𝐫𝐧 𝑞 𝑓′ 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧 Count ∶ ℕ; 𝐫𝐞𝐭𝐮𝐫𝐧 𝑐 20 II Danh sách tuyến tính • Danh sách liên kết 2 chiều • Dãy các phần tử liên kết với phần tử phía sau (next) và phía trước (prev) trong dãy 𝐿 = 𝑓𝑖𝑟𝑠𝑡, … , 𝑝, 𝑞, … , 𝑙𝑎𝑠𝑡 𝑝 → 𝑛𝑒𝑥𝑡 = 𝑞 𝑞 → 𝑝𝑟𝑒𝑣 = 𝑝 21 II Danh sách tuyến tính • Mô hình … … Danh sách rỗng 𝑛𝑒𝑥𝑡 – phần tử đầu danh sách 𝑝𝑟𝑒𝑣 – phần tử cuối danh