1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đề cương cấu trúc dữ liệu và giải thuật

101 184 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 101
Dung lượng 1,31 MB

Nội dung

BỘ GIÁO DỤC ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN ĐỀ CƯƠNG BÀI GIẢNG CẤU TRÚC DỮ LIỆU GIẢI THUẬT TRÌNH ĐỘ ĐÀO TẠO: ĐẠI HỌC CHÍNH QUY NGÀNH ĐÀO TẠO: CÔNG NGHỆ THÔNG TIN (INFORMATION TECHNOLOGY) Hưng Yên, năm 2016 Trang MỤC LỤC MỤC LỤC LỜI NÓI ĐẦU BÀI 1: GIẢI THUẬT CẤU TRÚC DỮ LIỆU 1.1 Mở đầu 1.2 Mối quan hệ cấu trúc liệu giải thuật 1.3 Một số phương pháp biểu diễn thuật toán 11 1.4 Các bước để giải toán 15 1.5 Phân tích thời gian thực giải thuật 21 Bài ĐỆ QUY GIẢI THUẬT ĐỆ QUY 30 2.1 Khái niệm đệ quy 30 2.2 Giải thuật đệ quy 30 2.3.Ví dụ giải thuật đệ quy 30 2.4 Bài tập giải thuật đệ quy 31 Bài 3: MẢNG DANH SÁCH 32 3.1 Mảng 32 3.2 Danh sách 38 Bài 4: DANH SÁCH NỐI ĐƠN (Single Linked List) 42 4.1 Định nghĩa nguyên tắc danh sách nối đơn 42 Trang 4.2 Một số phép toán danh sách nối đơn 43 Tìm phần tử danh sách đơn 49 Hủy phần tử khỏi danh sách 50 Duyệt danh sách 53 Bài 5: NGĂN XẾP HÀNG ĐỢI 56 5.1 Ngăn xếp (Stack) 56 5.1.1 Định nghĩa 56 5.2 Hàng đợi 60 5.2.1 Định nghĩa 60 5.2.2 Cài đặt hàng đợi 62 5.3 Một số ứng dụng Stack 69 5.4 Bài tập Stack 74 Bài 6: BÀI TẬP VỀ DANH SÁCH LIÊN KẾT 75 Bài 7: CÂY 76 7.1 Định nghĩa 76 7.2 Cây nhị phân 77 7.3 Biểu diễn nhị phân 78 7.4 Phép duyệt nhị phân 80 7.5 Cây k-phân 82 7.6 Cây tổng quát 83 Trang Bài 8: BÀI TẬP VỀ CÂY NHỊ PHÂN 87 Bài 9: SẮP XẾP 88 9.1 Bài toán xếp 88 9.2 Thuật toán xếp kiểu chọn (Selection sort) 89 9.3 Thuật toán xếp kiểu nổi bọt (Bubble sort) 90 9.4 Thuật toán xếp kiểu chèn (Insertion sort) 92 9.5 Bài tập thuật toán xếp 94 Bài 10: TÌM KIẾM 95 10.1 Bài toán tìm kiếm 95 10.2 Tìm kiếm 95 10.3 Tìm kiếm nhị phân 96 10.4 Cây nhị phân tìm kiếm 97 TÀI LIỆU THAM KHẢO 101 Trang LỜI NÓI ĐẦU Trong khoa học máy tính, cấu trúc liệu cách lưu liệu máy tính cho được sử dụng cách hiệu Thông thường, cấu trúc liệu được chọn cẩn thận cho phép thực thuật toán hiệu Việc chọn cấu trúc liệu thường chọn cấu trúc liệu trừu tượng Một cấu trúc liệu được thiết kế tốt cho phép thực nhiều phép toán, sử dụng tài nguyên, thời gian xử lý không gian nhớ tốt Các cấu trúc liệu được triển khai cách sử dụng kiểu liệu, tham chiếu phép toán được cung cấp ngôn ngữ lập trình Trong thiết kế nhiều loại chương trình, việc chọn cấu trúc liệu vấn đề quan trọng Kinh nghiệm việc xây dựng hệ thóng lớn cho thấy khó khăn việc triển khai chương trình, chất lượng hiệu kết cuối phụ thuộc nhiều vào việc chọn cấu trúc liệu tốt Sau cấu trúc liệu được chọn, người ta thường dễ nhận thấy thuật toán cần sử dụng Đôi trình tự công việc diễn theo thứ tự ngược lại: Cấu trúc liệu được chọn toán quan trọng định có thuật toán chạy tốt với số cấu trúc liệu cụ thể Trong hai trường hợp, việc lựa chọn cấu trúc liệu quan trọng Trong modul này, với thời lượng hạn chế, trình bày vấn đề cấu trúc liệu danh sách nối đơn, kép, ngăn xếp, hàng đợi, Còn nhiều cấu trúc liệu mạnh khác tập hợp, bảng băm, B-tree,… mà modul không đủ thời lượng trình bày Ngoài ra, thuật toán được trình bày ngắn gọn liền với cấu trúc liệu tương ứng Hưng Yên, tháng 03 năm 2016 Trang BÀI 1: GIẢI THUẬT CẤU TRÚC DỮ LIỆU 1.1 Mở đầu Khi viết chương trình máy tính, ta thường cài đặt phương pháp được nghĩ trước để giải vấn đề Phương pháp thường độc lập với máy tính cụ thể được dùng để cài đặt: Hầu thích hợp cho nhiều máy tính Trong trường hợp nào, phương pháp, chứ thân chương trình máy tính được nghiên cứu để học cách làm để công vào toán từ “Giải thuật” hay “Thuật toán” được dùng khoa học máy tính để mô tả phương pháp giải toán thích hợp cài đặt chương trình máy tính Giải thuật chúng đối tượng nghiên cứu trung tâm hầu hết lĩnh vực Tin học Các chương trình máy tính thường tối ưu, không cần thuật toán tối ưu, trừ thuật toán được dùng lại nhiều lần Nếu không cần cài đặt đơn giản cẩn thận đủ để ta tin tưởng hoạt động tốt chạy chậm đến mười lần phiên tốt, điều có nghĩa chạy chậm vài giây, ta chọn thiết kế cài đặt tối ưu phức tạp từ đầu tốn nhiều phút, nhiều giờ… Do ta xem xét cài đặt hợp lý đơn giản thuật toán tốt Thông thường để giải toán ta có lựa chọn nhiều thuật toán khác, việc lựa chọn thuật toán tốt vấn đề tương đối khó khăn phức tạp, thường cần đến trình phân tích tinh vi tin học Khái niệm Giải thuật có từ lâu nhà toán học người Arập phát ngôn, thuật toán nổi tiếng có từ thời cổ Hylạp thuật toán Euclid (thuật toán tìm ước số chung lớn số) Phương pháp cộng, nhân, chia… hai số giải thuật… Trong Tin học khái niệm giải thuật được trình bày sau: Giải thuật câu lệnh (Statements) chặt chẽ rõ ràng xác định trình tự thao tác số đối tượng cho sau số hữu hạn bước thực ta đạt kết mong muốn (Thuật toán dãy hữu hạn bước, bước mô tả xác phép toán hành động cần thực hiện, để giải vấn đề) Đối tượng Input kết mong muốn Output thuật toán Euclid Trang 1.2 Mối quan hệ cấu trúc liệu giải thuật Thực đề án tin học chuyển toán thực tế thành toán giải máy tính Một toán thực tế bao gồm đối tượng liệu yêu cầu xử lý đối tượng Vì thế, để xây dựng mô hình tin học phản ánh được toán thực tế cần trọng đến hai vấn đề :  Tổ chức biểu diễn đối tượng thực tế : Các thành phần liệu thực tế đa dạng, phong phú thường chứa đựng quan hệ với nhau, mô hình tin học toán, cần phải tổ chức , xây dựng cấu trúc thích hợp cho vừa phản ánh xác liệu thực tế này, vừa dễ dàng dùng máy tính để xử lý Công việc được gọi xây dựng cấu trúc liệu cho toán  Xây dựng thao tác xử lý liệu: Từ yêu cầu xử lý thực tế, cần tìm giải thuật tương ứng để xác định trình tự thao tác máy tính phải thi hành kết mong muốn, bước xây dựng giải thuật cho toán Tuy nhiên giải toán máy tính, thường có khuynh hướng trọng đến việc xây dựng giải thuật mà quên tầm quan trọng việc tổ chức liệu toán Giải thuật phản ánh phép xử lý , đối tượng xử lý giải thuật lại liệu, liệu chứa đựng thông tin cần thiết để thực giải thuật Để xác định được giải thuật phù hợp cần phải biết tác động đến loại liệu (ví dụ để làm nhuyễn hạt đậu , người ta dùng cách xay chứ không băm dao, đậu văng ngoài) chọn lựa cấu trúc liệu cần phải hiểu rõ thao tác tác động đến (ví dụ để biểu diễn điểm số sinh viên người ta dùng số thực thay chuỗi ký phải thực thao tác tính trung bình từ điểm số đó) Như đề án tin học, giải thuật cấu trúc liệu có mối quan hệ chặt chẽ với nhau, được thể qua công thức : Cấu trúc liệu + Giải thuật = Chương trình Với cấu trúc liệu chọn, có giải thuật tương ứng, phù hợp Khi cấu trúc liệu thay đổi thường giải thuật phải thay đổi theo để tránh việc xử lý gượng ép, thiếu tự nhiên cấu trúc không phù hợp Hơn nữa, cấu trúc liệu tốt giúp giải thuật xử lý phát huy tác dụng tốt hơn, vừa đáp ứng nhanh vừa tiết kiệm vật tư, giải thuật dễ hiễu đơn giản Trang Ví dụ 1.1: Một chương trình quản lý điểm thi sinh viên cần lưu trữ điểm số sinh viên Do sinh viên có điểm số ứng với môn học khác nên liệu có dạng bảng sau: Sinh viên Môn Môn Môn3 Môn4 SV SV SV Chỉ xét thao tác xử lý xuất điểm số môn sinh viên Giả sử có phương án tổ chức lưu trữ sau: Phương án : Sử dụng mảng chiều Có tất 3(SV)*4(Môn) = 12 điểm số cần lưu trữ, khai báo mảng result sau : int[] result = new int [ 12 ] {7, 9, 5, 2,5, 0, 9, 4,6, 3, 7, 4}; mảng result phần tử được lưu trữ sau: truy xuất điểm số môn j sinh viên i - phần tử (dòng i, cột j) bảng - phải sử dụng công thức xác định số tương ứng mảng result: bảngđiểm(dòng i, cột j) result[((i-1)*số cột) + j] Ngược lại, với phần tử mảng, muốn biết điểm số sinh viên nào, môn gì, phải dùng công thức xác định sau result[ i ] bảngđiểm (dòng((i / số cột) +1), cột (i % số cột) ) Với phương án này, thao tác xử lý được cài đặt sau : void XuatDiem() //Xuất điểm số tất sinh viên { int so_mon = 4; int sv,mon; for (int i=0; i

Ngày đăng: 24/10/2017, 15:49

TỪ KHÓA LIÊN QUAN

w