1. Trang chủ
  2. » Công Nghệ Thông Tin

CẤU TRÚC DỮ LIỆU & GIẢI THUẬT docx

21 358 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 21
Dung lượng 99,19 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Từ bài toán đến chương trình• Mô hình hóa bài toán thực tế thành bài toán giải quyết trên máy tính • Xác định các thao tác xử lý xây dựng giải thuật • Ngôn ngữ giả và tinh chế từng bước

Trang 1

CẤU TRÚC DỮ LIỆU

& GIẢI THUẬT

Lê Thị Diễm

Bộ môn Tin học ứng dụng

Trang 2

Chương 1

Mở đầu

Trang 3

NỘI DUNG

• Tiếp cận từ bài toán đến chương trình

• Kiểu dữ liệu (Data Type)

• Kiểu dữ liệu trừu tượng (Abstract Data Type)

• Cấu trúc dữ liệu (Data Structure)

Trang 4

Từ bài toán đến chương trình

• Mô hình hóa bài toán thực tế thành bài toán giải quyết trên máy tính

• Xác định các thao tác xử lý  xây dựng giải thuật

• Ngôn ngữ giả và tinh chế từng bước (Pseudo

language and stepwise refinement)

• Cài đặt chương trình giải quyết bài toán

Trang 5

Giải thuật (GT)

• Là 1 chuỗi hữu hạn các thao tác để giải 1 bài toán nào đó

• Các tính chất quan trọng của giải thuật là:

Hữu hạn (finiteness): giải thuật phải luôn luôn kết

thúc sau một số hữu hạn bước.

Xác định (definiteness): mỗi bước của GT phải được xác

định rõ ràng và phải được thực hiện chính xác, nhất quán.

Hiệu quả (effectiveness): các thao tác trong GT phải

được thực hiện trong một lượng thời gian hữu hạn

(đơn giản, dễ hiểu, dễ lập trình, thực hiện nhanh )

Trang 6

Kiểu dữ liệu (Data Type)

Khái niệm: là một tập hợp các giá trị và một

tập hợp các phép toán trên các giá trị đó

– Ví dụ: kiểu int là tập hợp các số nguyên có giá

trị -32768  32767 cùng các phép toán cộng,

trừ, nhân, chia, %,

Các thuộc tính: tên kiểu dữ liệu, miền giá trị,

kích thước lưu trữ, tập các toán tử tác động lên kiểu DL

Trang 7

Kiểu dữ liệu trừu tượng (ADT: Abstract Data Type)

• là một mô hình toán học cùng với một tập hợp các phép toán trên nó

• là kiểu dữ liệu do ta định nghĩa ở mức khái niệm,

chưa được cài đặt cụ thể bằng một ngôn ngữ lập

trình

 Che lấp những chi tiết phức tạp trong chương trình

Trang 8

Cấu trúc dữ liệu (Data Structure)

• Khi cài đặt một ADT, ta dùng

– các CTDL phù hợp có trong ngôn ngữ lập trình, hoặc

– cấu trúc phức hợp được xây dựng lên từ các kiểu cơ bản của ngôn ngữ lập trình

Cấu trúc dữ liệu = cách thức tổ chức dữ liệu

Cấu trúc dữ liệu + Giải thuật = Chương trình

Trang 9

Các tiêu chuẩn đánh giá CTDL

• Phản ánh đúng thực tế

– Là tiêu chuẩn quan trọng

– Quyết định tính đúng đắn của bài toán

– Phải chọn CTDL lưu trữ thể hiện chính xác đối tượng thực tế.

Trang 10

Các tiêu chuẩn đánh giá CTDL

• Tiết kiệm tài nguyên hệ thống

– chỉ nên sử dụng tài nguyên hệ thống vừa đủ để đảm nhiệm chức năng của nó.

Trang 11

Đánh giá độ phức tạp GT (1)

• Tại sao phải phân tích đánh giá giải thuật?

– Có nhiều giải thuật khác nhau để giải quyết 1 bài toán

=> lựa chọn 1 giải thuật tốt (nhất).

hiện nó thông qua việc sử dụng tài nguyên

– tài nguyên: bộ nhớ, thời gian sử dụng CPU,…

– thông thường nhất là thời gian cần thiểt để giải quyết vấn đề (thời gian thực hiện chương trình).

Trang 12

Đánh giá độ phức tạp GT (2)

• Các vấn đề chúng ta giải quyết có kích thước tự

nhiên n (thường là số lượng dữ liệu được xử lý),

• Tài nguyên cần dùng được mô tả như 1 hàm số

theo n (T(n))

Nghĩa là: Thời gian thực hiện của chương trình là 1

hàm của kích thước dữ liệu vào ký hiệu T(n) trong đó n

là kích thước (độ lớn) của dữ liệu vào.

• T(n) ≥ 0 ∀ n ≥ 0

Trang 13

Đánh giá độ phức tạp GT (3)

• Có thể đánh giá giải thuật bằng phương pháp thực nghiệm thông qua việc cài đặt giải thuật, rồi chọn các bộ dữ liệu thử nghiệm

– nhược điểm: chịu sự hạn chế của ngôn ngữ lập trình cài

đặt, trình độ của người lập trình, khó khăn và tốn chi

phí trong việc chọn các bộ dữ liệu thử đặc trưng,…

• Tìm những phương pháp đánh giá giải thuật hình thức hơn, ít phụ thuộc môi trường cũng như phần cứng hơn

Trang 14

Đánh giá độ phức tạp GT (4)

– Phương pháp đánh giá giải thuật theo hướng xấp xỉ

tiệm cận qua các khái niệm toán học O (Big-O), Ω

(Big-Omega), Θ (Big-Theta),…

– Thường sử dụng Big-O

• Tỷ suất tăng của hàm

– Hàm không âm T(n) có tỷ suất tăng f(n) nếu tồn tại hằng số C và N0 sao cho T(n) <= C.f(n)

với mọi n>= N0

Qui tắc vận dụng: Nếu T(n) là một đa thức của n thì tỷ

Trang 15

Hay: Độ phức tạp của GT là 1 hàm chặn trên của

hàm thời gian

Trang 16

Cách tính độ phức tạp GT (1)

Qui tắc cộng: Nếu

T1(n): thời gian thực hiện đoạn chương trình P1

T2(n): thời gian thực hiện đoạn chương trình P2

Và T1(n) = O(f(n)), T2(n) = O(g(n)),

thì độ phức tạp của đoạn 2 chương trình đó nối tiếp

nhau là T(n) = O( max(f(n), g(n)))

Trang 17

Cách tính độ phức tạp GT (2)

• Qui tắc nhân: Nếu

T1(n): thời gian thực hiện đoạn chương trình P1

T2(n): thời gian thực hiện đoạn chương trình P2

Trang 18

Cách tính độ phức tạp GT (3)

• Câu lệnh đơn: các câu lệnh đơn như gán, đọc,

viết, so sánh, lệnh return, định trị các biểu thức (không gọi hàm),… có thời gian thực hiện là O(1)

• Lệnh rẽ nhánh: if <điều kiện> P1; else P2;

– tính thời gian thực hiện là O(max (f1(n), f2(n))) và độ phức tạp của thời gian kiểm tra điều kiện Thông

thường kiểm tra điều kiện tốn O(1).

• Lệnh vòng lặp

– Xác định thời gian thực hiện của vòng lặp, sau đó lấy

tỷ suất tăng của hàm thời gian này.

Trang 19

• Ví dụ: Tính

ex =1 + x/1! + x2/2! + x3/3! + … + xn /n!

trình con: không gọi đệ qui, đệ qui (tham khảo)

Trang 20

ex = ex+lt/gt;

} return ex;

}

Trang 21

Cách tính độ phức tạp GT (6)

• Thời gian chạy của

nhiều thuật toán tiệm

nó thành các bài toán con nhỏ hơn, sau đó tổng hợp lại.

– n2

– n3

– 2n

– n!

Ngày đăng: 06/08/2014, 02:20

TỪ KHÓA LIÊN QUAN

w