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

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

Đ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

BỘ GIAO THÔNG VẬN TẢI TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI THÀNH PHỐ HỒ CHÍ MINH o0o - (Lưu hành nội bộ) Ths Bùi Văn Thượng Chương Tổng quan Cấu trúc liệu giải thuật Chương TỔNG QUAN 1.1 Mô hình hóa tốn thực tế Mơ hình hóa toán tức nhận biết giải tốn thực tế theo hướng tin học hóa Thơng thường, khởi đầu, hầu hết tốn khơng đơn giản, không rõ ràng Để giảm bớt phức tạp tốn thực tế, ta phải hình thức hóa nó, nghĩa phát biểu lại tốn thực tế thành tốn hình thức (hay gọi mơ hình tốn) Có thể có nhiều tốn thực tế có mơ hình tốn Để giải tốn thực tế máy tính ta phải việc xác định toán:   Phải làm ? Phải làm nào? Ví dụ 1: Tơ màu đồ giới Ta cần phải tô màu cho nước đồ giới Trong nước tơ màu hai nước láng giềng (cùng biên giới) phải tơ hai màu khác Hãy tìm phương án tơ màu cho số màu sử dụng Ta xem nước đồ giới đỉnh đồ thị, hai nước láng giềng hai đỉnh ứng với nối với cạnh Bài tốn lúc trở thành tốn tơ màu cho đồ thị sau: Mỗi đỉnh phải tơ màu, hai đỉnh có cạnh nối phải tơ hai màu khác ta cần tìm phương án tô màu cho số màu sử dụng 1.2 Cấu trúc liệu 1.2.1 Tổng quan Kiểu liệu tập hợp giá trị tập hợp phép toán giá trị Ví dụ 2:  Kiểu Boolean tập hợp có giá trị TRUE, FALSE phép tốn OR, AND, NOT …  Kiểu Integer tập hợp số nguyên có giá trị từ -32768 đến 32767 phép toán cộng, trừ, nhân, chia, Div, Mod… Kiểu liệu có hai loại kiểu liệu sơ cấp kiểu liệu có cấu trúc gọi cấu trúc liệu   Kiểu liệu sơ cấp kiểu liệu mà giá trị liệu đơn Ví dụ: kiểu Boolean, Integer, character, float… Kiểu liệu có cấu trúc hay gọi cấu trúc liệu kiểu liệu mà giá trị liệu kết hợp giá trị khác Ví dụ: Kiểu mảng, kiểu cấu trúc, danh sách liên kết… 1.2.2 Tiêu chuẩn lựa chọn cấu trúc liệu Cấu trúc liệu đóng vai trò quan trọng việc kết hợp đưa cách giải cho tốn Nó hỗ trợ cho thuật toán thao tác đối tượng hiệu Việc lựa chọn cấu trúc liệu cho tốn dựa vào tiêu chuẩn sau:     Phải biểu diễn đầy đủ thơng tin nhập xuất tốn Phải phù hợp với thao tác thuật toán mà ta lựa chọn Phù hợp với điều kiện cho phép ngơn ngữ lập trình sử dụng Tiết kiệm tài nguyên hệ thống Trang Chương Tổng quan Cấu trúc liệu giải thuật 1.2.3 Các kiểu cấu trúc liệu Cấu trúc liệu chia thành dạng phổ biến sau:     Cấu trúc liệu tuyến tính: Là cấu trúc liệu phần tử liên kết tuần tự, nối tiếp với (ví dụ: Mảng, danh sách liên kết,…) Cấu trúc liệu dạng cây: Mỗi phần tử liên kết với nhiều phần tử khác theo mức Cấu trúc liệu bảng băm: Là cấu trúc liệu tương tự mảng kèm theo hàm băm để ánh xạ nhiều giá trị vào phần tử mảng Cấu trúc liệu dạng đồ thị: Là dạng cấu trúc liệu bao gồm tập đối tượng gọi đỉnh (hoặc nút) nối với cạnh (hoặc cung) 1.3 Giải thuật 1.3.1 Khái niệm Giải thuật hay thuật toán chuỗi hữu hạn thao tác để giải toán Các tính chất quan trọng giải thuật là:   Hữu hạn: Giải thuật phải luôn kết thúc sau số hữu hạn bước Xác định: Mỗi bước giải thuật phải xác định rõ ràng phải thực xác, quán   Đúng: Giải thuật phải đảm bảo tính xác; Hiệu : Các thao tác giải thuật phải thực lượng thời gian hữu hạn  … Ngồi giải thuật phải có đầu vào (input) đầu (output) 1.3.2 Biểu diễn giải thuật Có nhiều cách để biểu diễn thuật toán Dưới số cách thường sử dụng:     Sử dụng ngôn ngữ tự nhiên: Liệt kê bước để giải tốn Cách đơn giản khơng cần kiến thức biểu diễn thuật tốn, nhiên thường dài dòng đơi khó hiểu Sử dụng lưu đồ (sơ đồ khối): Sử dụng hình khối khác để biểu diễn thuật toán Cách trực quan dễ hiểu , nhiên cồng kềnh Sử dụng mã giả: Sử dụng ngôn ngữ tựa ngôn ngữ lập trình để biểu diễn thuật tốn Cách làm đỡ cồng kềnh sơ đồ khối nhiên khơng trực quan Sử dụng ngơn ngữ lập trình: Sử dụng ngơn ngữ máy tính để biểu diễn (Pascal, C,…) Cách đòi hỏi phải có kiến thức kỹ ngơn ngữ lập trình sử dụng 1.3.3 Đánh giá độ phức tạp thuật toán Thời gian chạy chương trình phụ thuộc vào yếu tố sau:     Khối lượng liệu đầu vào Chất lượng mã máy tạo trình dịch Tốc độ thực thi lệnh máy Độ phức tạp thời gian thuật toán Một thuật toán gọi hiệu chi phí cần sử dụng tài nguyên máy thấp Để mô tả việc đánh giá độ phức tạp thuật toán người ta sử dụng hàm f(N), N khối lượng liệu cần xử lý Trang Chương Tổng quan Cấu trúc liệu giải thuật Có hai phương pháp để đánh giá độ phức tạp thuật toán gồm:   Phương pháp thực nghiệm: o Cách làm: Cài thuật toán chọn liệu thử nghiệm, sau thống kê thơng số nhận chạy liệu để đánh giá o Ưu điểm: Dễ thực o Nhược điểm:  Chịu hạn chế ngơn ngữ lập trình  Ảnh hưởng trình độ người lập trình  Chọn liệu thử đặc trưng cho tất tập liệu vào thuật tốn: Khó khăn tốn nhiều chi phí  Phụ thuộc vào phần cứng Phương pháp xấp xỉ toán học: o Đánh giá giá thuật toán theo hướng tiệm xấp xỉ tiệm cận qua khái niệm O() o Ưu điểm: Ít phụ thuộc môi trường phần cứng o Nhược điểm: Phức tạp o Các trường hợp độ phức tạp quan tâm:  Trường hợp tốt (phân tích xác)  Trường hợp xấu (phân tích xác)  Trường hợp trung bình (mang tích dự đốn) o Phân lớp độ phức tạp giải thuật: Trong bảng đây, độ phức tạp thuật toán tăng dần: Hằng số O(c) logN O(logN) N NlogN N2 O(N) O(NlogN) O(N2) N3 2N O(N3) O(2N) N! O(N!) 1.4 Chương trình Theo Niklaus Wirth: Cấu trúc liệu + Thuật tốn = Chương trình 1.4.1 Tiểu chuẩn chương trình Một chương trình máy tính cần đảm bảo tiêu chuẩn sau:     Tính tin cậy: Chương trình phải chạy dự định, mơ tả xác giải thuật Tính uyển chuyển: Chương trình dễ sửa đổi, giảm bớt cơng sức lập trình viên phát triển chương trình, đáp ứng quy trình làm phần mềm Tính sáng: Chương trình viết phải dễ đọc, dễ hiểu Tính sáng phụ thuộc nhiều vào cơng cụ lập trình phong cách lập trình Tính hữu hiệu: Chương trình phải đáp ứng yêu cầu chạy nhanh tốn tài nguyên nhớ, điều phụ thuộc vào chất lượng giải thuật tiểu xảo lập trình viên Từ phân tích ta thấy việc tạo chương trình đòi hỏi nhiều công đoạn tiêu tốn nhiều công sức Vì đừng viết chương trình mà chưa suy xét kỹ giải thuật liệu cần thao tác Trang Chương Tổng quan Cấu trúc liệu giải thuật 1.4.2 Quy trình làm phần mềm Hình Quy trình làm phần mềm Xác định yêu cầu toán: Dữ liệu vào -> Xử lý -> Dữ liệu Việc xác định toán tức ta phải xác định xem cần giải vấn đề gì? Với giả thiết cho lời giải cần phải đạt yêu cầu Phân tích, thiết kế: Lựa chọn cấu trúc liệu thiết kế giải thuật phù hợp cho tốn Cài đặt: Sau có thuật tốn ta cần lập trình để thể thuật tốn Muốn lập trình đạt kết cao, cần phải có kỹ thuật lập trình tốt Kỹ thuật lập trình tốt thể kỹ viết chương trình, khả gỡ rối thao tác nhanh Thử nghiệm: Chạy thử, tìm sửa lỗi, xây dựng test, … BÀI TẬP CHƯƠNG Trình bày thuật tốn để giải tốn sau (dùng ngơn ngữ tự nhiên sơ đồ khối): Tìm bội chung nhỏ số nguyên dương Giải phương trình bậc hai: ax +bx+c = Tìm phần tử thứ n dãy Fibonacci Trang Chương Các giải thuật tìm kiếm Cấu trúc liệu giải thuật Chương CÁC GIẢI THUẬT TÌM KIẾM 2.1 Bài tốn tìm kiếm Tìm kiếm đòi hỏi thường xun ứng dụng tin học Tìm kiếm định nghĩa việc thu thập số thông tin từ khối thơng tin lớn lưu trữ trước Bài tốn tìm kiếm phát biểu sau: Cho dãy gồm n ghi r[1…n] Mỗi ghi r[i] tương ứng với khóa k[i] Hãy tìm ghi có khóa X cho trước X gọi khóa tìm kiếm hay đối trị tìm kiếm (argument) Cơng việc tìm kiếm hồn thành có hai tình sau sảy ra:   Tìm ghi có khóa tương ứng X, lúc phép tìm kiếm thành cơng; Khơng tìm ghi có khóa X cả, phép tìm kiếm thất bại Để đơn giản cho việc trình bày giải thuật tốn phát biểu sau: Cho mảng A[n], tìm A phần tử có khóa X 2.2 Giải thuật tìm kiếm tuyến tính Ý tưởng giải thuật tìm kiếm tuyến tính hay gọi tìm kiếm (Sequential search) sau: So sánh X với phần tử thứ 1, thứ 2,…của mảng A gặp khóa cần tìm (tìm thấy), tìm hết mảng mà khơng thấy (khơng tìm thấy) Begin i=0 i

Ngày đăng: 16/05/2019, 17:53

Mục lục

  • Chương 1. TỔNG QUAN

    • 1.1 Mô hình hóa bài toán thực tế

    • 1.2 Cấu trúc dữ liệu

      • 1.2.1 Tổng quan

      • 1.2.2 Tiêu chuẩn lựa chọn cấu trúc dữ liệu

      • 1.2.3 Các kiểu cấu trúc dữ liệu

      • 1.3 Giải thuật

        • 1.3.1 Khái niệm

        • 1.3.2 Biểu diễn giải thuật

        • 1.3.3 Đánh giá độ phức tạp của thuật toán

        • 1.4 Chương trình

          • 1.4.1 Tiểu chuẩn của một chương trình

          • 1.4.2 Quy trình làm phần mềm

          • BÀI TẬP CHƯƠNG 1

          • Chương 2. CÁC GIẢI THUẬT TÌM KIẾM

            • 2

            • 2.1 Bài toán tìm kiếm

            • 2.2 Giải thuật tìm kiếm tuyến tính

            • 2.3 Giải thuật tìm kiếm nhị phân

            • 2.4 Đánh giá độ phức tạp của các giải thuật tìm kiếm

            • BÀI TẬP CHƯƠNG 2

            • Chương 3. CÁC GIẢI THUẬT SẮP XẾP

              • 3

              • 3.1 Bài toàn sắp xếp

              • 3.2 Đổi chỗ trực tiếp

              • 3.3 Chọn trực tiếp

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

Tài liệu liên quan