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

Giáo trình cấu trúc dữ liệu vào giải thuật

155 2 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

Thông tin cơ bản

Định dạng
Số trang 155
Dung lượng 2,5 MB

Nội dung

LỜI MỞ ĐẦU Giáo trình nhằm cung cấp cho sinh viên kiến thức cấu trúc liệu sở có cấu trúc tuyến tính tĩnh, ộng (danh sách liên kết), cấu trúc giải thuật liên quan ến chúng xếp, tìm kiếm nhớ trong, so sánh ộ phức tạp giải thuật Để nắm bắt kiến thức trình bày học phần này, sinh viên cần nắm ược kiến thức tin học ại cương, nhập môn lập trình Ngơn ngữ lập trình ược chọn ể minh họa kiến thức C++ Các kiến thức tạo iều kiện cho học viên tiếp tục dễ dàng nắm bắt kiến thức học phần tin học sau như: cấu trúc liệu giải thuật nâng cao, phân tích thiết kế giải thuật, hoạ, hệ iều hành, trí tuệ nhân tạo, Nội dung giáo trình gồm chương: Chương 1: Giới thiệu khái niệm ban ầu mối liên hệ mật thiết cấu trúc liệu giải thuật, kiểu liệu, thiết kế phân tích giải thuật, ộ phức tạp giải thuật, Chương 2: Giới thiệu phương pháp tìm kiếm xếp kiểu liệu tuyến tính mảng Thơng qua ó, trình bày số ý tưởng kỹ thuật nhằm cải tiến giải thuật Chương 3: Trình bày kiểu liệu trỏ Trên sở ó, trình bày kiểu liệu ộng tuyến tính có nhiều ứng dụng tin học kiểu danh sách liên kết khác nhau, ngăn xếp, hàng ợi, số ứng dụng chúng Chương 4: Giới thiệu loại cấu trúc liệu ộng khác thao tác nhị phân, nhị phân tìm kiếm, cân AVL Nhằm mục ích dành thời gian nhiều cho sinh viên ể làm tập lớn, nên số phần tác giả ã trình bày chi tiết dạng cài ặt biến thể khác cho giải thuật Các phần thứ yếu phức tạp ược in cỡ chữ nhỏ dành cho sinh viên ọc thêm Chắn chắn giáo trình cịn nhiều khiếm khuyết, tác giả mong muốn nhận ược biết ơn ý kiến quí báu óng góp ồng nghiệp bạn ọc ể giáo trình hồn thiện mặt nội dung hình thức lần tái sau Đà lạt, 04/2008 Tác giả MỤC LỤC Chương I GIỚI THIỆU CẤU TRÚC DỮ LIỆU, PHÂN TÍCH GIẢI THUẬT I.1 Quan hệ cấu trúc liệu giải thuật, kiểu liệu I I.1.1 Biểu diễn liệu I I.1.2 Quan hệ cấu trúc liệu giải thuật, kiểu liệu I I.1.3 Các bước ể giải tốn máy tính I I.2 Thiết kế phân tích giải thuật I I.2.1 Thiết kế giải thuật theo phương pháp Top-Down I.2.2 Các chiến lược khác ể thiết kế giải thuật I I.2.3 Phân tích giải thuật ộ phức tạp giải thuật I.2.4 Qui ước ngôn ngữ mã giả I I I Trang Chương II TÌM KIẾM VÀ SẮP XẾP TRONG II.1 Giới thiệu xếp tìm kiếm II.1 II.1.1 Sắp xếp Định nghĩa xếp phương pháp xếp II.1 II.1 a b Phân loại II.1 c Vài qui uớc kiểu liệu xét giải thuật xếp II.1 II.1.2 Tìm kiếm II.3 a Định nghĩa phép tìm kiếm II.3 Phân loại phương pháp tìm kiếm II.3 II.2 Phương pháp tìm kiếm II.2.1 Phương pháp tìm kiếm tuyến tính II.3 b Dãy ã ược II.3 II.3 a Dãy chưa ược II.5 II.2.2 Phương pháp tìm kiếm nhị phân II.6 II.3 Phương pháp xếp II.7 II.3.1 Phương pháp xếp chọn ơn giản II.8 II.3.2 Phương pháp xếp chèn ơn giản II.9 II.3.3 Phương pháp xếp ổi chỗ ơn giản II.10 II.3.4 Phương pháp xếp ổi chỗ cải tiến (Shake Sort) II.12 b II.3.5 Phương pháp xếp chèn cải tiến (Shell Sort) II.14 II.3.6 Phương pháp xếp phân hoạch (Quick Sort) II.16 II.3.7 Phương pháp xếp có thứ tự (HeapSort) II.19 II.3.8 Phương pháp xếp trộn (Merge Sort) II.25 II.3.9 Phương pháp xếp dựa số (Radix Sort) II.28 II.3.10 So sánh phương pháp xếp II.31 Trang Chương III CẤU TRÚC DANH SÁCH LIÊN KẾT III.1 Giới thiệu ối tượng liệu trỏ III.1 III.1.1 So sánh cấu trúc liệu tĩnh cấu trúc liệu ộng III.1.2 Kiểu liệu trỏ nghĩa III.1 III.1 a Định III.1 b Khai báo III.2 c Các thao tác kiểu liệu trỏ III.3 III.1.3 Biến ộng III.4 a Đặc trưng biến ộng III.4 b Truy xuất biến ộng III.4 c Hai thao tác biến ộng III.5 III.2 Danh sách liên kết (DSLK) III.7 III.2.1 Định nghĩa danh sách III.7 III.2.2 Các cách tổ chức danh sách III.7 III.3 DSLK ơn III.8 III.3.1 Tổ chức DSLK ơn, thao tác bản, tìm kiếm xếp kiểu DSLK ơn III.8 a Tổ chức DSLK ơn (không có nút câm) III.8 b Các thao tác kiểu DSLK ơn III.9 c Sắp xếp kiểu DSLK ơn: xếp chèn, QuickSort, MergeSort, RadixSort III.17 III.3.2 Vài ứng dụng DSLK ơn III.24 III.3.2.1 Ngăn xếp: ịnh nghĩa, cài ặt, phép toán ứng dụng ngăn xếp III.24 III.3.2.2 Hàng ợi: ịnh nghĩa, cài ặt, phép toán ứng dụng hàng ợi III.31 III.4 Một số kiểu DSLK khác III.4.1 DSLK ơn có nút câm III.34 III.34 III.4.2 DSLK vòng III.37 III.4.3 DSLK ối xứng III.38 a Cấu trúc liệu biểu diễn DSLK ối xứng III.39 b Các thao tác kiểu DSLK ối xứng III.39 c Ứng dụng DSLK ối xứng: hàng ợi hai ầu III.47 III.4.4 DS a liên kết III.48 III.4.5 Một số ứng dụng khác DSLK III.51 a DS có thứ tự DS tổ chức lại III.51 b Biểu diễn tập hợp DSLK III.53 c Biểu diễn a thức rời rạc DSLK III.54 d Biểu diễn ma trận thưa nhờ DSLK III.56 e Sắp xếp tôpô III.57 Trang Chương IV CẤU TRÚC CÂY IV.1 Định nghĩa khái niệm IV.1 IV.1.1 Định nghĩa IV.1 IV.1.2 Các khái niệm khác IV.1 IV.2 Cây nhị phân IV.3 IV.2.1 Định nghĩa IV.3 IV.2.2 Vài tính chất nhị phân IV.3 IV.2.3 Biểu diễn nhị phân IV.3 IV.2.4 Duyệt nhị phân IV.4 IV.2.5 Một cách biểu diễn khác nhị phân IV.7 IV.2.6 Biểu diễn n - phân nhị phân IV.8 IV.2.7 Xây dựng nhị phân cân hồn tồn IV.8 IV.3 Cây nhị phân tìm kiếm IV.9 IV.3.1 Định nghĩa nhị phân tìm kiếm IV.9 IV.3.2 Tìm kiếm phần tử BST IV.10 IV.3.3 Chèn phần tử vào BST, xây dựng BST IV.11 IV.3.4 Phương pháp xếp BST IV.13 IV.3.5 Xóa phần tử khỏi BST, hủy nhị phân IV.13 IV.4 Cây nhị phân tìm kiếm cân IV.16 IV.4.1 Định nghĩa IV.17 IV.4.2 Chiều cao cân IV.17 IV.4.3 Chỉ số cân việc cân lại AVL IV.18 IV.4.4 Chèn phần tử vào AVL IV.24 IV.4.5 Xóa phần tử khỏi AVL IV.25 Bài tập BT.1 Bài tập chương I BT.1 Bài tập chương II BT.4 Bài tập chương III BT.6 Bài tập chương IV BT.11 Tài liệu tham khảo Chương I GIỚI THIỆU CẤU TRÚC DỮ LIỆU VÀ PHÂN TÍCH GIẢI THUẬT I.1 Quan hệ cấu trúc liệu giải thuật, kiểu liệu I.1.1 Biểu diễn liệu Một mục tiêu quan trọng tin học nhằm giải tự ộng tốn giới thực máy tính iện tử Các thơng tin tốn cần giải máy tính ln ược mã hố dạng nhị phân Các thông tin gồm liệu thao tác liệu ó Việc biểu diễn liệu dạng nhị phân bất tiện cho người xử lý toán, ặc biệt tốn lớn phức tạp Chính lý ó, ngơn ngữ lập trình bậc cao ã cung cấp sẵn cách biểu diễn liệu trừu tượng ơn giản có cấu trúc, nhằm giúp người lập trình khơng phải nhiều thời gian công sức thực thường xuyên lặp lại thao tác sơ cấp nặng nề kiểu liệu nhị phân mức thấp Tính trừu tượng liệu thể chỗ khơng q trọng ến ặc iểm ý nghĩa riêng ối tượng cụ thể mà rút phản ánh tính chất chung mà ối tượng thuộc lớp có ược I.1.2 Quan hệ cấu trúc liệu giải thuật, kiểu liệu Dựa vào chất chung nhóm liệu, ối tượng liệu ược phân thành lớp Mỗi lớp liệu ược thể qua kiểu liệu Một kiểu liệu T tập hợp ó, phần tử tập ược gọi thể kiểu Ta ã biết giải thuật (hay giải thuật) dãy câu lệnh rõ ràng, xác ịnh trình tự thao tác số ối tượng ó (inpu t) cho sau số hữu hạn bước thực (chú ý ến tính khả thi thời gian), ta ạt ược kết (output) mong muốn Giải thuật phản ánh phép xử lý, ối tượng ể xử lý giải thuật liệu: liệu (input) ưa vào, liệu trung gian kết qủa (output) cuối Đối với lớp liệu nào, ể ý kỹ, ta thấy ó ln tồn thao tác mật thiết gắn liền với ối tượng liệu kiểu ó Khi cách biểu diễn liệu thay ổi thao tác gắn liền với chúng thay ổi theo Vì khơng nhiều trường hợp việc xử lý gượng ép, thiếu tự nhiên, khó hiểu, phức tạp khơng cần thiết chương trình hiệu quả, lãng phí tài nguyên máy tính (CPU nhớ) Chẳng hạn, ối với chuỗi ký tự, ta có hai cách biểu diễn chúng ược thể ngơn ngữ lập trình Pascal C Với cách biểu diễn, ta có cách xây dựng thao tác tương ứng chúng khác Một ví dụ khác, thấy rõ chương tiếp theo, ối với dãy phần tử liệu loại, ta lưu trữ chúng hai cách: lưu mảng (tĩnh, ộng) hay lưu trữ danh sách liên kết ộng Khi ó, thao tác chúng chèn, xóa, xếp thực theo cách thức khác ó có hiệu khác Do ó, nói ến kiểu liệu T, ta thường ý ến hai ặc trưng quan trọng liên hệ mật thiết với nhau: tập V giá trị thuộc kiểu, ó tập giá trị hợp lệ mà ối tượng kiểu T nhận lưu trữ; tập O phép toán (hay thao tác xử lý) xác ịnh thực ối tượng liệu kiểu ó Người ta thường viết: T = Trong ngôn ngữ lập trình cấp cao cụ thể, người ta thường xây dựng sẵn số kiểu liệu ơn giản hay sơ cấp xác ịnh, chẳng hạn với C++, ta có kiểu liệu: số (nguyên, thực), ký tự, lôgic Với kiểu số nguyên, phép toán thường gặp là: phép toán số học +, -, *, / (chia nguyên), % (mod, lấy phần dư) phép toán so sánh như: ==, !=, ≥, ≤, >, < Với kiểu số thực, phép toán thường gặp là: phép toán số học +, -, *, /, phép toán so sánh như: ==, !=, ≥, ≤, >, < Với kiểu lơgic, phép tốn thường gặp là: ! (not), && (and), || (or) Với kiểu ký tự, phép toán thường gặp là: phép toán ép kiểu phép toán so sánh như: ==, !=, ≥, ≤, >, Lchild) { Kqủa = TìmPhầnTửThayThế(p, q->Lchild); if (Kqủa < 2) return Kquả; switch (q->Balfactor) { case LH : q->Balfactor = EH; return 2; case EH : q->Balfactor = RH; return 1; case RH : return RightBalance(q); } } else { p->Data = q->Data; p = q; q = q->Rchild; return 2; } } * Nhận xét: - Thao tác thêm nút có ộ phức tạp O(1) - Thao tác huỷ nút có ộ phức tạp O(h) - Với cân bằng, trung bình: lần thêm vào cần lần cân lại, lần hủy cần lần cân lại - Việc hủy nút phải cân dây chuyền nút từ gốc ến phần tử bị hủy, thêm vào nút cần lần cân cục - Độ dài ường tìm kiếm trung bình AVL gần cân hồn toàn (log n), việc cân lại ơn giản nhiều - Một cân AVL không cao 45% cân hoàn toàn tương ứng BÀI TẬP “CẤU TRÚC DỮ LIỆU & GIẢI THUẬT 1” Mục ích tập: - Kiểm tra, củng cố việc hiểu cấu trúc liệu thuật tốn có liên quan - Rèn luyện kỹ lập trình vận dụng lý thuyết vào việc chọn lựa cấu trúc liệu thuật tốn phù hợp có liên quan cho toán cụ thể - Phát triển tổng hợp kết lý thuyết nhằm chuẩn bị cho học viên làm quen với q trình giải hồn chỉnh tốn khơng tầm thường ó Các tập có ánh dấu (*) tập khó cần nhiều thời gian ể thực dành cho học viên giỏi Có thể kết hợp nhiều tập (*) có liên q uan bổ sung thêm ứng dụng thực tế ể hình thành tiểu luận mơn học Phần in ậm có gạch chân yêu cầu tối thiểu học viên cần thực thực hành Bài tập chương I (Giới thiệu cấu trúc liệu, phân tích thuật tốn) (Kiểu liệu có cấu trúc) 1) Giả sử quy tắc tổ chức quản lý nhân viên công ty sau: • Thông tin nhân viên bao gồm lý lịch bảng chấm công: * Lý lịch nhân viên: - Mã nhân viên - Tên nhân viên - Tình trạng gia ình - Số - Trình ộ văn hoá - Lương : chuỗi 10 ký tự : chuỗi 30 ký tự : ký tự (M = Married, S = Single) : số nguyên ≤ 20 : chuỗi ký tự (C1 = cấp 1,C2=cấp 2,C3=cấp 3; DH = ại học, CH = cao học, TS = tiến sĩ) : số ≤ 000 000 * Chấm cơng nhân viên: - Số ngày nghỉ có phép tháng : số ≤ 28 - Số ngày nghỉ không phép tháng : số ≤ 28 - Số ngày làm thêm tháng : số ≤ 28 - Kết công việc : chuỗi ký tự (T = tốt, TB = trung bình, K = Kém) - Lương thực lĩnh tháng • Quy tắc tính lương: Lương thực lĩnh = Lương + Phụ trội Trong ó nếu: - số > : Phụ trội = +5% Lương - trình ộ văn hố = CH - làm thêm - nghỉ khơng phép • : số ≤ 000 000 : Phụ trội = +10% Lương : Phụ trội = +4% Lương / ngày : Phụ trội = -5% Lương / ngày Các chức yêu cầu: - Cập nhật lý lịch, bảng chấm công cho nhân viên (thêm, xóa, sửa hay mẫu tin thoả mãn tính chất ó) - Xem bảng lương hàng tháng - Khai thác (chẳng hạn tìm) thông tin nhân viên Hãy chọn cấu trúc liệu thích hợp (và giải thích sao?) ể biểu diễn thơng tin cài ặt chương trình theo chức ã mô tả Biết số nhân viên tối a 50 người, ý thông tin tĩnh “ộng” hay thay ổi hệ thông tin khác 2) Viết chương trình cài ặt chuỗi ký tự theo hai cách (giả sử kiểu chuỗi chưa có sẵn ngơn ngữ lập trình bạn ang dùng) sau: a phần tử ầu số ký tự chuỗi; b chuỗi ược kết thúc ký tự có mã ASCII Sau ó viết lại thao tác chuỗi (tính chiều dài chuỗi, nối, chép phần chuỗi, chặt ngắn chuỗi, kiểm tra chuỗi con, ) (Độ phức tạp thuật toán) 3) Hãy nêu thuật tốn mà ộ phức tạp tính tốn là: O(1), O(n), O(n 2) 4) Hãy xác ịnh mục ích thuật toán sau (xác ịnh phép toán ặc trưng nó) tính ộ phức tạp tính tốn trường hợp xấu nhất, tốt nhất: a) Sum = 0; for (i = 1; i > x; Sum = Sum + x; // Nhập số x; } b) for (i = 1; i

Ngày đăng: 31/03/2022, 18:47

HÌNH ẢNH LIÊN QUAN

Bảng sau ây cho ta hình dung về ộ tăng nhanh của các lớp giải thuật có ộ phức tạp a thức và mũ theo số lượng n các mục dữ  liệu ầu vào - Giáo trình cấu trúc dữ liệu vào giải thuật
Bảng sau ây cho ta hình dung về ộ tăng nhanh của các lớp giải thuật có ộ phức tạp a thức và mũ theo số lượng n các mục dữ liệu ầu vào (Trang 13)
Viết lại dãy dưới dạng cột, ta có bảng chứa các kết quả sau mỗi bước lặp: - Giáo trình cấu trúc dữ liệu vào giải thuật
i ết lại dãy dưới dạng cột, ta có bảng chứa các kết quả sau mỗi bước lặp: (Trang 27)
Viết lại dãy dưới dạng cột, ta có bảng chứa các kết quả sau mỗi bước lặp: (L,R) =   (1,8) (2,7) (3,4) (4,4)   - Giáo trình cấu trúc dữ liệu vào giải thuật
i ết lại dãy dưới dạng cột, ta có bảng chứa các kết quả sau mỗi bước lặp: (L,R) = (1,8) (2,7) (3,4) (4,4) (Trang 29)
8) Xét một cơ cấu ường tàu và kho sửa chữa như hình sau: - Giáo trình cấu trúc dữ liệu vào giải thuật
8 Xét một cơ cấu ường tàu và kho sửa chữa như hình sau: (Trang 149)