1. Trang chủ
  2. » Thể loại khác

CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT. TS. Đặng Xuân Thọ Trường Đại học Sư phạm Hà Nội

35 54 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 35
Dung lượng 0,97 MB

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

Nội dung

Thiết kế giải thuật • Một chương trình tính toán bất kỳ đều có thể chia làm... Thiết kế giải thuật • Chia nhỏ bài toán: Nếu gọi bài toán là một modul chính thì ta chia modul chính thành

Trang 1

CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

TS Đặng Xuân Thọ Trường Đại học Sư phạm Hà Nội

Trang 3

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

Trang 5

Mục tiêu

• Thiết kế giải thuật

• Sử dụng chiến thuật nào?

• Phân tích giải thuật

• Thế nào là phân tích tính đúng đắn của giải thuật?

• Phân tích tính đơn giản của giải thuật?

• Đánh giá thời gian thực hiện của giải thuật

• Tại sao cần đánh giá thời gian thực hiện?

• Đánh giá thời gian thực hiện như thế nào? Cấ

Trang 6

Thiết kế giải thuật

• Một chương trình tính toán bất kỳ đều có thể chia làm

Trang 7

Thiết kế giải thuật

Chia nhỏ bài toán: Nếu gọi bài toán là một modul chính

thì ta chia modul chính thành các modul con rồi lại chia

các modul con thành các modul con nhỏ hơn cho đến khi

ta được các modul đã biết cách giải rồi

CHIẾN THUẬT “CHIA ĐỂ TRỊ”

Trang 8

Ví dụ chiến thuật “chia để trị”

Giám đốc yêu cầu:

“Dùng máy tính để quản lý hồ sơ về lương nhân viên

Hàng tháng phải lập báo cáo về tổng hợp tiền lương lên

Trang 9

Ví dụ chiến thuật “chia để trị”

Xác định yêu cầu bài toán:

1 Tìm và hiển thị hồ sơ của một nhân viên bất kỳ

2 Cập nhật thông tin của một nhân viên cho trước

3 In bản tổng hợp chứa thông tin hiện thời

 Giải thuật cần thực hiện ba nhiệm vụ chính:

1 Đọc thông tin hồ sơ từ ổ đĩa

2 Xử lý các thông tin này (tìm kiếm, thêm, sửa, xóa )

3 Sao lưu lại vào ổ đĩa

Trang 10

Ví dụ chiến thuật “chia để trị”

Quản lý lương nhân viên

Tìm kiếm

Cập nhật

Trang 11

Lợi ích chiến thuật “chia để trị”

Tư duy sáng sủa: chia vấn đề thành những vấn đề nhỏ

hơn và cứ vậy cho đến khi có thể giải quyết chúng dễ

dàng

Lập trình nhanh chóng: chương trình được chia làm

nhiều phần riêng biệt giúp người lập trình tập trung

được vào từng phần riêng để phát triển

Trang 12

Lợi ích chiến thuật “chia để trị”

Giảm khả năng gặp lỗi: tránh gặp rắc rối vì giảm sự

chồng chéo của mã nguồn và tránh việc sử dụng biến

nhập nhằng Nếu gặp lỗi thì ta chỉ việc kiểm tra từng

modul và có thể bỏ qua những modul đã kiểm tra một

cách chắc chắn

Hỗ trợ làm việc nhóm: từng phần của chương trình có

thể giao cho mỗi thành viên của nhóm, giúp tăng năng

suất lập trình

Tăng tính bảo mật thông tin: những modul khi đã được

dịch thì có thể không cần chương trình nguồn nữa Và

như vậy ta giữ được chương trình nguồn của riêng mình

Trang 13

Phân tích giải thuật

Trang 14

Phân tích tính đúng đắn

Thường làm: Cho chương trình chạy thử với một bộ dữ

liệu đã biết kết quả

• Nếu kết quả chương trình khác với kết quả đã biết thì

chắc chắn chương trình sai; nếu bằng thì cũng chưa có

kết luận, do đó đây chỉ là phương pháp tìm ra cái sai mà

chưa chứng minh cái đúng

• Cho chạy chương trình rồi xem kết quả có phù hợp với

thực tế không, nếu phù hợp thì hi vọng đúng, còn không

Trang 15

Phân tích tính đơn giản và hiệu quả

• Tùy thuộc bài toán được dùng thường xuyên hay không,

nếu chương trình chỉ dùng một ít lần rồi bỏ đi thì ta ưu

tiên tính đơn giản

• Bài toán được sử dụng thường xuyên thì ta ưu tiên tính

hiệu quả của thuật toán

• Tính hiệu quả thể hiện về hai mặt:

• Không gian nhớ (chương trình bé chiếm ít bộ nhớ)

• Thời gian (chương trình chạy nhanh)

• Phần này, chúng ta sẽ chỉ quan tâm đến thời gian thực

hiện thuật toán

Trang 16

Tại sao cần thuật toán hiệu quả?

• Kỹ thuật máy tính tiến bộ rất nhanh, ngày nay các máy

tính lớn có thể đạt tốc độ tính toán hàng trăm triệu phép

tính một giây

• Vậy thì có bõ công phải tiêu tốn thời gian để thiết kế các

thuật toán có hiệu quả không?

• Ví dụ sau sẽ trả lời câu hỏi này!

Trang 17

Tại sao cần thuật toán hiệu quả?

• Bài toán tháp Hà Nội

• Thuật toán chuyển n đĩa từ cọc 1 sang cọc 2 với cọc trung

gian 3 (không đặt đĩa to lên đĩa nhỏ) Cần thực hiện bao

nhiêu lần chuyển đĩa?

Trang 18

Tại sao cần thuật toán hiệu quả?

• Ta xét vài trường hợp đơn giản:

Trang 19

Tại sao cần thuật toán hiệu quả?

Trường hợp hai đĩa:

+ Chuyển đĩa thứ nhất từ cọc 1 sang cọc thứ 3

+ Chuyển đĩa thứ 2 từ cọc 1 sang cọc 2

+ Chuyển đĩa thứ nhất từ cọc 3 sang cọc 2

Trang 20

Tại sao cần thuật toán hiệu quả?

• Bài toán tháp Hà Nội

Trang 21

ĐÁNH GIÁ THỜI GIAN

THỰC HIỆN CỦA GIẢI THUẬT

Trang 22

Đánh giá thời gian thực hiện của giải thuật

• Thời gian thực hiện của giải thuật phụ thuộc vào nhiều

yếu tố:

• Trước hết phụ thuộc vào độ lớn của dữ liệu đầu vào

Thời gian là một hàm của n (kích thước input): T = T(n)

Ngoài ra T còn phụ thuộc vào:

• Máy móc thiết bị

• Ngôn ngữ lập trình

• Tuy nhiên các yếu tố này là không đồng đều do vậy không

thể dựa vào chúng khi xác lập T(n)

Trang 23

Đánh giá thời gian thực hiện của giải thuật

Vậy đơn vị của T(n) tính bằng gì ?

Không thể tính bằng đơn vị cụ thể mà tính bằng: Số lần

thực hiện các lệnh của giải thuật

• Cách tính này có thể hiện được tính nhanh hay chậm của

giải thuật hay không?

Giải thuật 1 có thời gian thực hiện là tỉ lệ với n

Giải thuật 2 có thời gian thực hiện là tỉ lệ với n 2

Với n khá lớn thì giải thuật 1 nhanh hơn giải thuật 2

T mà ta đánh giá như trên gọi là độ phức tạp tính toán

của giải thuật

Ở giải thuật 1 ta nói giải thuật có độ phức tạp tính toán cấp n và

Trang 24

Đánh giá thời gian thực hiện của giải thuật

Định nghĩa: giả thuật T được gọi là có độ phức tạp tính

toán cấp g(n) nếu như tồn tại hằng số dương N 0 và số

nguyên dương C > 0 sao cho

n n

n n

n n

Trang 25

Đánh giá thời gian thực hiện của giải thuật

• Rõ ràng thời gian thực hiện giải thuật tăng với tốc độ

Trang 26

Đánh giá thời gian thực hiện của giải thuật

• Tính TBC của một dãy số đọc vào từ bàn phím

Trang 27

Đánh giá thời gian thực hiện của giải thuật

Trang 30

Một số quy tắc cơ bản (3/4)

Quy tắc cộng

T1(n) và T2(n) là thời gian thực hiện của 2 đoạn chương

trình P1 và P2;

Với T1(n) = O(f(n)) và T2(n)=O(g(n))

• Thời gian thực hiện 2 đoạn chương trình nối tiếp:

Trang 33

Luyện tập

• Đánh giá thời gian thực hiện thuật toán:

Giả sử T = 3n 2 + 5n + 4 thì thời gian thực hiện ntn?

Tìm số lớn nhất trong mảng n phần tử

• Kiểm tra 1 số có phải số nguyên tố

• Sắp xếp nổi bọt bên trên

Tính n! (đệ quy & ko đệ quy)

Trang 34

Tổng kết

• Hiểu được cách thiết kế thuật toán, sử dụng chiến thuật

chia để trị

• Sau khi thiết kế thuật toán xong, cần phân tích tính đúng

đắn, tính đơn giản của giải thuật

• Thời gian thực hiện của giải thuật phụ thuộc nhiều yếu tố

khác nhau Dẫn đến cần phải có một cách đánh giá chính

xác thời gian thực hiện của giải thuật

• Cách thức đánh giá thời gian thực hiện

• Một số quy tắc đánh giá thời gian thực hiện

Trang 35

Thank you!

Ngày đăng: 23/05/2021, 01:12

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w