1. Trang chủ
  2. » Luận Văn - Báo Cáo

Cấu trúc dữ liệu và giải thuật

283 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI CẤU TRÚC DỮ LIỆU & GIẢI THUẬT Chủ biên: Trương Tiến Tùng Đồng tác giả: Nguyễn Thị Tâm - Trịnh Thị Xuân HÀ NỘI 6/2021 Cấu trúc liệu giải thuật BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI CẤU TRÚC DỮ LIỆU & GIẢI THUẬT Trương Tiến Tùng Nguyễn Thị Tâm - Trịnh Thị Xuân HÀ NỘI 6/2021 Cấu trúc liệu giải thuật DANH SÁCH THÀNH VIÊN TT HỌ VÀ TÊN PHÂN CÔNG NHIỆM VỤ Trương Tiến Tùng -Thống nội dung giáo trình (Chủ biên) -Phân cơng thành viên thực -Hoàn thiện nội dung chung tổng qt giáo trình -Rà sốt phản biện tồn nội dung giáo trình Nguyễn Thị Tâm -Hoàn thiện nội dung Chương 1, Chương 2, (Đồng tác giả) Chương -Rà soát phản biển Chương 4, Chương 5, Chương Trịnh Thị Xuân -Hoàn thiện nội dung Chương 4, Chương 5, (Đồng tác giả) Chương -Rà soát phản biển Chương 1, Chương 2, Chương 3 Cấu trúc liệu giải thuật LỜI NÓI ĐẦU Để đáp ứng nhu cầu học tập bạn sinh viên đặc biệt sinh viên chuyên ngành Công nghệ thông tin, Khoa Công nghệ thông tin Trường Đại học Mở Hà Nội, biên soạn giáo trình, giảng chương trình đào tạo theo hệ thống tín Bài giảng mơn Cấu trúc liệu thuật toán biên soạn dựa "Cấu trúc liệu thuật toán" tác giả Đinh Mạnh Tường, Nhà xuất Khoa học Kỹ thuật "Algorithms + Data Structure = Program" Nicklaus Wirth, Bản dịch tiếng Việt, Nhà xuất Khoa học Kỹ thuật, 1993 Giáo trình biên soạn dựa kinh nghiệm giảng dạy nhiều năm môn Cấu trúc liệu Giải thuật chúng tơi Giáo trình biên soạn theo đề cương chi tiết môn Cấu trúc liệu Giải thuật sinh viên chuyên ngành Công nghệ thông tin Khoa Công nghệ Thông tin Trường Đại học Mở Hà Nội Mục tiêu nhằm giúp bạn sinh viên có tài liệu dùng làm tài liệu học tập song đối tượng khác tham khảo Chúng cho bạn sinh viên không chuyên tin người quan tâm tới cấu trúc liệu giải thuật tìm nhiều điều bổ ích Mặc dù cố gắng trình biên soạn giáo trình chán giáo trình cịn nhiều thiếu sót hạn chế Nhóm tác giả mong nhận đóng góp ý kiến bạn sinh viên người đọc để giáo trình ngày hoàn thiện Hà Nội, tháng năm 2021 Nhóm tác giả Trương Tiến Tùng Nguyễn Thị Tâm Trịnh Thị Xuân Cấu trúc liệu giải thuật MỤC LỤC Chương CÁC KHÁI NIỆM CƠ BẢN 15 1.1 Các khái niệm 15 1.2 Các bước phân tích thuật toán 20 1.3 Biểu diễn giải thuật 21 1.3.1 Ngôn ngữ tự nhiên – liệt kê theo bước 22 1.3.2 Sơ đồ khối 22 1.3.3 Mã giả 26 1.4 Phân tích – Đánh giá giải thuật 27 1.4.1 Độ phức tạp không gian .28 1.4.2 Độ phức tạp thời gian 28 1.4.3 Ước lượng thời gian thực chương trình .29 1.4.4 Ngun tắc tính tốn thời gian chạy thực chương trình 30 1.5 Độ phức tạp tính tốn với tình trạng liệu vào 32 1.6 Phân lớp toán .33 1.7 Đệ quy 35 1.7.1 Giới thiệu 35 1.7.2 Giải thuật đệ quy 35 1.7.3 Ví dụ minh họa 36 1.8 Tổng kết chương câu hỏi ôn tập 39 1.8.1 Tổng kết chương 39 1.8.2 Câu hỏi ôn tập 40 1.9 Bài tập áp dụng 40 Chương DANH SÁCH 44 2.1 Danh sách 44 2.1.1 Khái niệm 44 2.1.2 Các phép toán danh sách 45 2.2 Cài đặt danh sách mảng 46 2.2.1 Cài đặt 46 2.2.2 Bài tốn tìm kiếm danh sách 49 Cấu trúc liệu giải thuật 2.2.3 Bài toán xếp danh sách 53 2.3 Cài đặt danh sách danh sách liên kết 71 2.3.1 Khái niệm 71 2.3.2 Các phép toán danh sách liên kết 73 2.3.3 So sánh cài đặt danh sách theo hai phương pháp 83 2.3.4 Các dạng danh sách liên kết khác 84 2.4 Bài tập có hướng dẫn 85 2.5 Tổng kết chương 89 2.6 Câu hỏi trắc nghiệm 90 2.7 Câu hỏi tập 103 Chương NGĂN XẾP – HÀNG ĐỢI 106 3.1 Ngăn xếp - Stack 106 3.1.1 Khái niệm 106 3.1.2 Cài đặt mảng 107 3.1.3 Cài đặt danh sách liên kết 110 3.1.4 Ứng dụng ngăn xếp 113 3.2 Hàng đợi – Queue 115 3.2.1 Khái niệm 115 3.2.2 Cài đặt mảng 116 3.2.3 Cài đặt hàng đợi danh sách liên kết 118 3.2.4 Ứng dụng hàng đợi để biểu diễn đa thức 120 3.3 Tổng kết chương 121 3.4 Bài tập 122 Chương HÀM BĂM – BẢNG BĂM 123 4.1 Khái niệm hàm băm – phép băm 123 4.2 Các loại hàm băm 124 4.2.1 Hàm băm sử dụng phương pháp chia 124 4.2.2 Hàm băm sử dụng phương pháp nhân .124 4.2.3 Hàm băm sử dụng phương pháp trích 125 4.2.4 Hàm băm sử dụng phương tách .125 Cấu trúc liệu giải thuật 4.2.5 Hàm băm sử dụng phương gập 126 4.3 Bảng băm 126 4.3.1 Giới thiệu 126 4.3.2 Các bảng băm 127 4.4 Ứng dụng hàm băm 133 4.5 Tổng kết chương câu hỏi ôn tập 135 4.5.1 Tổng kết chương 135 4.5.2 Câu hỏi ôn tập 135 4.6 Một số câu hỏi trắc nghiệm ôn tập 136 4.7 Bài tập áp dụng 138 Chương DANH SÁCH PHI TUYẾN DẠNG CÂY - TREE .139 5.1 Các khái niệm – Định nghĩa 139 5.2 Cài đặt .144 5.2.1 Cài đặt danh sách – mảng nút cha 144 5.2.2 Lưu trữ móc nối – danh sách nút 148 5.3 Cây nhị phân – nhị phân tìm kiếm 150 5.4 Lưu trữ nhị phân 152 5.4.1 Lưu trữ dạng mảng 152 5.4.2 Lưu trữ móc nối 156 5.5 Biểu diễn tổng quát nhị phân 157 5.6 Các thao tác nhị phân tìm kiếm 158 5.6.1 Các phép duyệt 158 5.6.2 Tìm kiếm nhị phân tìm kiếm 161 5.6.3 Chèn thêm phần tử vào 163 5.6.4 Xóa phần tử khỏi 169 5.7 Cây biểu thức 171 5.7.1 Định nghĩa cách biểu diễn biểu thức 171 5.7.2 Chuyển từ biểu thức sang ký pháp Balan đảo ngược 174 5.7.3 Xây dựng nhị phân biểu thức 175 5.7.4 Tính giá trị biểu thức 185 Cấu trúc liệu giải thuật 5.8 Bài toán áp dụng 188 5.8.1 Sắp xếp danh sách theo phương pháp vun đống – Heap Sort 188 5.8.2 Cây 2-3-4 196 5.9 Ví dụ tổng hợp 197 5.10 Tổng kết chương câu hỏi ôn tập .201 5.10.1 Tổng kết chương 201 5.10.2 Câu hỏi ôn tập 202 5.11 Một số câu hỏi trắc nghiệm ôn tập 202 5.12 Bài tập áp dụng 212 5.13 Bài tập có hướng dẫn 215 Chương ĐỒ THỊ - GRAPH 225 6.1 Các khái niệm – Định nghĩa 225 6.1.1 Giới thiệu 225 6.1.2 Các định nghĩa 226 6.1.3 Các thuật ngữ 229 6.2 Lưu trữ đồ thị 230 6.2.1 Lưu trữ đồ thị ma trận kề - Ma trận trọng số 230 6.2.2 Lưu trữ đồ thị danh sách đỉnh kề 234 6.2.3 Lưu trữ đồ thị danh sách cạnh 235 6.3 Các phép duyệt đồ thị ứng dụng 236 6.3.1 Duyệt theo chiều sâu 236 6.3.2 Duyệt theo chiều rộng 237 6.4 Một số toán đồ thị 238 6.4.1 Tìm đường ngắn ứng dụng 238 6.4.2 Tìm khung nhỏ ứng dụng 244 6.4.3 Tìm chu trình 256 6.4.4 Sắp xếp Tôpô 259 6.5 Tổng kết chương câu hỏi ôn tập 264 6.5.1 Tổng kết chương 264 6.5.2 Câu hỏi ôn tập 264 Cấu trúc liệu giải thuật 6.6 Một số câu hỏi trắc nghiệm ôn tập 264 6.7 Bài tập áp dụng 270 6.8 Bài tập có hướng dẫn: 274 Cấu trúc liệu giải thuật DANH MỤC HÌNH VẼ Hình 2.1 Minh họa thêm phần tử vào đầu danh sách 74 Hình 2.2 Chèn thêm phần tử vào cuối danh sách 75 Hình 2.3 Chèn thêm phần tử vào sau phần tử q xác định 77 Hình 2.4 Minh họa xóa phần tử đầu danh sách 78 Hình 2.5 Minh họa xóa phần tử đứng sau phần tử q xác định 79 Hình 2.6 Danh sách liên kết vòng đơn 84 Hình 2.7 Danh sách liên kết vịng đơi 85 Hình 3.1 Minh họa sử dụng danh sách liên kết cài đặt cho ngăn xếp 110 Hình 3.2 Minh họa thao tác Push để bổ sung phần tử vào Stack .111 Hình 3.3 Minh họa thao tác Pop để lấy phần tử khỏi Stack .112 Hình 3.4 Minh họa chuyển sang số 114 Hình 3.5 Minh họa hàng đợi Queue 116 Hình 3.6 Minh họa tính tổng hai đa thức 121 Hình 4.1 Hàm băm 123 Hình 4.2 Bảng băm 126 Hình 5.1 Sơ đồ tổ chức trường đại học .140 Hình 5.2 Sơ đồ tổ chức thư mục máy tính 140 Hình 5.3 Minh họa tổng quát danh sách móc nối 149 Hình 5.4 Sơ đồ cấu trúc nút 156 Hình 5.5 Kết chuyển từ tổng quát sang nhị phân 158 Hình 5.6 Minh họa tìm kiếm phần tử NPTK 162 Hình 5.7 Minh họa thêm phần tử vào NPTK .164 Hình 5.8 Minh họa xóa nút khỏi NPTK 169 Hình 5.9 Minh họa xóa nút có nhánh 170 Hình 5.10 Minh họa xóa nút có nhánh 171 Hình 5.11 Cây biểu thức (6/2 + 3) * (7 - 4) 172 Hình 5.12 Nguyên tắc thực tính tốn máy tính 185 Hình 6.1 Đồ thị có hướng 226 Hình 6.2 Đồ thị vô hướng 226 10 C.33.44.55.54.78.65.5.43.22.2.4 22.Tai lieu Luan 66.55.77.99 van Luan an.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.22 Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Cấu trúc liệu giải thuật C T liên thông có n-1 cạnh D T liên thơng khơng có chu trình Câu 7: Cho G = đồ thị vô hướng liên thông n đỉnh T = gọi khung đồ thị nếu: A T liên thơng có n-1 cạnh B T liên thơng cạnh cầu; C T liên thơng khơng có chu trình H E D T liên thơng khơng có chu trình Câu 8: Ma trận lưu trữ đồ thị số cho hình vẽ A B C D Câu 9: Cho đồ thị G = dạng ma trận trọng số Hãy cho tập cạnh khung nhỏ xây dựng theo thuật toán 269 Stt.010.Mssv.BKD002ac.email.ninhd 77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77t@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn C.33.44.55.54.78.65.5.43.22.2.4 22.Tai lieu Luan 66.55.77.99 van Luan an.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.22 Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Cấu trúc liệu giải thuật Kruskal A T = {(1, 2), (1, 4), (2, 4), (2, 6), (4, 5), (6, 7)} B T = { (2, 3), (1, 3), (4, 5), (4, 6), (3, 5) } C T = {(1, 2), (1, 4), (2, 3), (2, 6), (6, 3), (6, 7)} D T={(1, 2), (1, 4), (2, 3), (4, 5), (2, 6), (6, 7)} Câu 10: Tổng phần tử hàng i, cột j ma trận kề đồ thị có hướng G = bằng: A Bán đỉnh bậc vào đỉnh i, bán đỉnh bậc đỉnh j B Bán đỉnh bậc đỉnh i, bán đỉnh bậc đỉnh j C Bán đỉnh bậc đỉnh i, bán đỉnh bậc vào đỉnh j D Bán đỉnh bậc vào đỉnh i, bán đỉnh bậc vào đỉnh j 6.7 Bài tập áp dụng Bài Cho đồ thị hình sau a Lập ma trận kề, b Lập ma trận liên thuộc, c Lập ma trận trọng số 270 Stt.010.Mssv.BKD002ac.email.ninhd 77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77t@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn C.33.44.55.54.78.65.5.43.22.2.4 22.Tai lieu Luan 66.55.77.99 van Luan an.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.22 Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Cấu trúc liệu giải thuật Bài Áp dụng thuật tốn Dijkstra tìm đường ngắn đồ thị cho a Từ đỉnh a đến đỉnh e, b Từ đỉnh a đến đỉnh i, c Từ đỉnh a đến đỉnh n (Mô tả chi tiết theo bảng), 271 Stt.010.Mssv.BKD002ac.email.ninhd 77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77t@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn C.33.44.55.54.78.65.5.43.22.2.4 22.Tai lieu Luan 66.55.77.99 van Luan an.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.22 Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Cấu trúc liệu giải thuật d Từ đỉnh a đến đỉnh s theo thuật toán Dijkstra, e Từ đỉnh a đến đỉnh k (Mô tả chi tiết theo bảng) Bài Dùng thuật tốn Kruskal thuật tốn Prim để tìm khung nhỏ đồ thị cho Đồ thị vô hướng G lưu trữ ma trận kề sau: 272 Stt.010.Mssv.BKD002ac.email.ninhd 77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77t@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn C.33.44.55.54.78.65.5.43.22.2.4 22.Tai lieu Luan 66.55.77.99 van Luan an.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.22 Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Cấu trúc liệu giải thuật a b 0 2  4  4 3 4 3 1 3  2 ;  2 2 0 0 14  3  15 28  35 14 15 11 29 11 27 29 27 24 12 28 16 11 14 28 35 24 16  12 11   28 14  13   13  Đồ thị cho hình vẽ sau: a 273 Stt.010.Mssv.BKD002ac.email.ninhd 77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77t@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn C.33.44.55.54.78.65.5.43.22.2.4 22.Tai lieu Luan 66.55.77.99 van Luan an.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.22 Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Cấu trúc liệu giải thuật Bài 4: Bài tập áp dụng Áp dụng thuật toán Floyd để tìm đường ngắn hai đỉnh đồ thị sau 6.8 Bài tập có hướng dẫn: Bài 1: Chương trình lưu trữ đồ thị dạng Ma trận trọng số #include #include #include #define max 20 //Khai bao CTDL Ma tran Trong so struct DoThi { int n; float C[max][max]; Stt.010.Mssv.BKD002ac.email.ninhd 77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77t@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn 274 C.33.44.55.54.78.65.5.43.22.2.4 22.Tai lieu Luan 66.55.77.99 van Luan an.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.22 Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Cấu trúc liệu giải thuật }; //Nhap lien tiep den nhap dinh = thi dung void nhapDoThi(DoThi &G) { int dd,dc; float ts; printf("\n Nhap so dinh cua thi:"); scanf("%d", &G.n); for(int i =1; i

Ngày đăng: 29/08/2023, 01:52

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w