Giáo trình cấu trúc dữ liệu và thuật toán phần 1 (in năm 2013)

189 1 0
Giáo trình cấu trúc dữ liệu và thuật toán phần 1 (in năm 2013)

Đ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

NGUYÊN ĐỨC NGHĨA 0ẨU TRÚC DỮ LIỆU Va A LA NGUYEN ĐỨC NGHĨA CAU TRUC DU’ LIEU VA THUAT TOAN NHA XUAT BAN BACH KHOA - HA NOI LỜI NÓI ĐẦU Cuốn sách Cấu trúc liệu thuật toán biên soạn dựa nội dung giảng mà tác giả sử dụng để giảng dạy cho sinh viên ngành Công nghệ Thông tin, Đại học Bách Khoa Hà Nội, Với thời lượng để giảng dạy 60 tiết, sách để cập số vấn dé co ban lĩnh vực “Cầu trúc liệu Thuật tốn” — mơn học có ý nghĩa quan trọng hành trang kiến thức sinh viên ngành Công nghệ Thông tin Nội dung sách bao gồm bảy chương: Chương Các khái niệm Chương Thuật toán đệ quy Chương Các cấu trúc liệu Chương Cây Chương Các thuật tốn xếp Chương Tìm kiếm Chương Đồ thị thuật toán đỗ thị Cuốn sách biên soạn lần đầu nên chắn cịn nhiều thiếu sót Tác giả mong nhận ý kiến đóng góp độc giả để sửa chữa bỗ sung, Mọi góp ý xin gửi địa email: nghiand(@)soict.hut.edu.vn Xin chân thành cảm ơn! Tác giả MỤC LỤC “ LỜI NÓI ĐÀU CHƯƠNG Cá:' KHÁI NIỆM CƠ BẢN 1.1 Ví dụ mở đá ă .«.e s e e e e e eser r re tetr re ieie t rireirienlie irer rile l aern riae 1,1,1 Thuật tốu: :rựctí cà ceihhhtrerrderrdretrrrrederrrrr 1.1.2, Thuật toán nhanh hơn, .eo 10 1.1.3 Thuật toán đệ quy 1.1.4, Thuật toán Quy hoạchthđệngST 1.2 Thuật toán độ phức tạp 1,2.1 Khái niệm toán thuật toán 1.2.2 Độ phức tạp thuật tốn 1.2.3 Các loại thời gian tính 1.3 Ký tiệm cận 1.3.1 Ky hiéu @ 1.3.2 Ký Ở(doc 1a6 lon— big O) 17 1.3.3 Ký hiệu O 1.3.4 Sử dụng ký hiệu tiệm cận ©, Q, 1.3.5, Một số lớp thuật tốn 1.4, Giá ngôn ngữ 1.4.1 Khai báo biến 1.4.2 Câu lệnh gán 1.4.3 Các cấu trúc điều 1.4.4 Câu lệnh lặp 1.4.5 Câu lệnh Vào~Ra 1.4.6 Hàm thủ tục (Fuaction anđ procedure) 1.5 Mật số kỹ thuật phân tích thuật tốn 1.5.1 Cấu trúc 1.5.2 Phân tích vịng lặp fồi 1,5.3 Phân tích vòng lặp While Repeal ceiheierre 26 1.5.4, Câu lệnh đặc trưng Bài tập chương CHƯƠNG THUẬT TOÁN ĐỆ QUY 48 2,1 Khái niệm dé quy 2.1.1 Ham dé quy (Recursive lunction: 2.1.2 Tập hợp xác định đệ quy sec Store 2.2 Thuật tốn dé quv 2.3 Một số ví đụ min: họa 2.4 Phân tích thuật tốn đệ quy 2.5 Đệ quy có nhớ seen 2.6 Chứng minh tính đắn eú3 thuật toán dệ qu, 2.7, Thuật toán quay lui Bài tập chương CHƯƠNG CÁC CẤU TRÚC DỮ LIỆU CƠ BẢN M - 3.1 Các khái niệm 3.1.1 Kiểu đữ liệu " 3.1.2 Kiểu liệu trừu tượng 3.1.3, Cấu trúc liệu 3.2 Mảng 3.2.1 Kiểu liệu trừu tượng mảng 2.2, Phân bể nhớ cho mảng .occocsvveivverrerrrisrrrrrr 70 3.2.3 Các thao tác với mảng -cecrriennseieiieriiiiriieiieriee 73 3.3 Danh sách 3.3.1 Danh sách tuyên tính 3.3.2 Các cách cải đặt danh sách tuy: 3.3.3 Các ví dụ ứng dụng 4.3.4 Phân tích sử dụng đanh sách móc nối 3.3.5 Một số biến thể danh sách móc 3.4 Ngăn xếp 3.4.1 Kiểu liệu trừu tượng ngăn xếp 3.4.2 Ngăn xếp dùng mảng 3.4.3 Cài đặt ngăn xếp với danh sách móc 3.4.3 Một số ứng dụng ngăn xếp 3.5 Hàng đợi 14 3.5.1 ADT hàng đợi 3.5.2 Cài đặt hang doi bang mang 3.5.3 Cài đặt hang đợi danh sách móc nị 3.5.4 Một số ví đụ ứng dụng hàng đợi Bài tập chương 143 CHƯƠNG CÂY 143 4.1 Định nghĩa khái niệm 4.1.1 Định nghĩa 4.1.2 Các thuật ngữ hinh ma hdưe 4.1.3 Cây có thứ tự (Ordered Tree), 4.1.4 Cây có nhãn (Labeled Tree) 4.1.5 ADT Cây 4.2 Cây nhị phân 4.2.1 Định nghĩa va tính chat 4.2.2 Biểu diễn nhị phân 161 „172 172 Bài tập chương CHƯƠNG CÁC THUẬT TỐN SẮP XÉP ce-eeccceccesrerissriie 190 5.1 Bài tốn xếp 5.1.1 Bài toán xếp 5.1.2 Giới thiệu sơ lược thuật toán xếp 5.2, Ba thuật toán xếp 5.2.1 Sắp xếp chèn (Insertion Sort 5.2.2 Sp xép lua chon (Selection Sort) 5.2.3 Sắp xếp nỗi bọt (Bubble Sort) 5,3 Sắp xếp tron (Merge Sort) 5.4 Sắp xếp nhanh (Quick Sort) 5.4.1, Sơ đỗ tổng quát 5.4.2 Phép phân đoạn 5.5, Sắp xếp vun đồng (Heap Sort) 5.5.1 Cấu trúc liệu đồng (Heap) 5.5.2, Sắp xếp vun déng 5.5.3, Hang doi có ưu tiên (Priority queue) soe 5.6 Cận cho độ phức tạp tính tốn toán xếp 5.7 Các phương pháp xếp đặc biệt 5.7.3 Sắp xếp theo co sé (Radix Sort) 5.7.4, Sap xếp phân cum (Bucket Sort) Bai tap chuong CHƯƠNG TÌM KIỂM 6.1 Tìm kiếm tìm kiếm nhị phân 6.1.1 Tìm kiếm (Linear Search or Sequential Search) 234 6.1.2 Tìm kiếm nhị phan (Binary Search) 6.2 Cây nhị phân tìm kiếm (Binary Search Tree) 6.2.1 Định nghĩa 6.2.2 Biểu điển nhị phân tìm kiếm 6.2.3 Các phép tốn 6,3 Cây nhị phân tìm kiếm cân - AVL 6.3.1 Định nghĩa 6.3.2 Các thao tác với AVL 6.4 Tìm kiếm xâu mẫu (String searching) 6.4.1 Phát biểu toán 6.4.2 Thuật toán trực tỉ 6.4.3 Thuật toán Boyer—-MOOFe ekieherdtraririirrreniee 6.4.4 Thuật toán Rabin-Karp 6.4.5 Thuật toán Knuth-Morris-Pratt (MP) 6.5 Bang bim (Mapping and Hashing) 6.5.1, Dat van đề 6.5.2 Địa trực — Direct Addressing 6.5.3 Hàm băm (Hash Functions) Bài tập chương CHUONG BO THỊ VÀ CÁC THUẬT TOÁN ĐỒ THỊ 286 7.1, Đề thị 7.1.1 Các loại thị 7.1.2 Đường đi, chu trình tính liên thông đồ thị 7.2 Biểu diễn đồ thị 7.2.1 Biểu diễn đỏ thị ma trận 7.2.2 Biểu diễn đỗ thị đanh sách k 7.3 Các thuật toán duyệt đồ thị 7.3.1 Thuật tốn tìm kiếm theo chiều rộng (BFS) .soc 302 1.3.2 Thuật toán tìm kiếm theo chiều sâu (DFS 1.4, Mật số ứng dụng tìm kiếm đồ thị 7.4.1 Bài tốn đường 7.4.2 Bài tốn liên thơng, 7.4.3 Đồ khơng chứa chu trình tốn xếp tơpơ 316 7.4.4 Bài tốn tơ màu đỉnh đồ thị 7.4.5 Bài tốn xây đựng bao đóng truyền ứng thị 7.5 Bài tốn khung nhồ 29 7.5.1, Thuat toan Kruskal 329 1.5.2 CẤu trúc đữ liệu bidu di&n phan hoach .ccssecsesssseesssssseseeeees 334 7.6 Bài toán đường ngắn "" 7.6.1 Thuật toan Dijkstra 7.6.2 Cài đặt thuật toán với câu trúc đữ liệ Bai tập chương TÀI LIỆU THAM KHẢ 08 338 Chương CÁC KHÁI NIỆM CƠ BẢN 1.1 VÍ DỤ MỞ ĐÀU Bài tốn tìm dãy lớn Cho dãy số: đi, đạ, „ đạc Day sd ai, aint y oss &; với l a, gọi trọng lượng dãy ki Van đề đặt là: Hãy tìm trọng lượng lớn con, tức tìm cực đại giá trị X%-¡ aụ Để đơn giản ta gọi đãy có trọng lượng lớn day lớn Ví dụ: Nếu dãy cho ~2, 11, —4, 13, ~5, cẲn đưa câu trả lời 20 (là trọng lượng day 11, -4, 13) 1.1.1 Thuật toán trực tiếp Thuật tốn đơn giản nghĩ để giải toán đặt là: duyệt tất day cé thé: đụ đi, VOL Sisjsn tính tổng đãy để tìm trọng lượng lớn Trước hết nhận thấy rằng, tỗng số dãy dãy cho là: C(nj2) + n= 07/2 + n/2 Thuật toán cải đặt đoạn chương trình sau: int for maxSum (int for = 0; i=0; (int i

Ngày đăng: 15/11/2023, 13:52

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan