1. Trang chủ
  2. » Giáo án - Bài giảng

Bài Giảng Cấu Trúc Dữ Liệu Và Giải Thuật

88 725 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 88
Dung lượng 1,76 MB

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

Nội dung

 Đầu ra Output: Với một tập các dữ liệu đầu vào, giải thuật đưa ra các dữ liệu tương ứng với lời giải của bài toán..  Đơn trị Uniqueness: Các kết quả trung gian của từng bước thực hi

Trang 1

CẤU TRÚC DỮ LIỆU

VÀ GIẢI THUẬT

Trang 2

Giới thiệu môn học

 Môn học CTDL&GT cung cấp :

 Các kiến thức cơ bản về cấu trúc dữ liệu và thuật toán;

 Kĩ năng xây dựng, lựa chọn các cấu trúc dữ liệu và các thuật toán hợp lí

Trang 3

Giới thiệu về môn học

 Viết (trên máy)

(Điểm điều kiện dưới 3 sinh viên không được thi học phần)

 Chuyên cần:

 ≥80% số tiết học (10)

 ≤80% số tiết học (0- không được thi học phần)

Trang 4

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

Trang 5

CHƯƠNG 1 MỞ ĐẦU

Trang 6

Chương 1 Mở đầu

A - BÀI TOÁN VÀ THUẬT TOÁN

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

 Khái niệm bài toán

 Khái niệm về giải thuật (thuật toán, thuật giải)

 Mối quan hệ giữa cấu trúc dữ liệu và giải thuật

Cấu trúc dữ liệu và các vấn đề liên quan

 Khái niệm về cấu trúc dữ liệu

 Định nghĩa kiểu dữ liệu

Trang 7

B – THIẾT KẾ VÀ PHÂN TÍCH GIẢI THUẬT

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

 Chia để trị

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

 Phân tích tính đúng đắn của giải thuật

 Phân tích tính đơn giản

Đá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

 Một số quy tắc cơ bản

7

Chương 1 Mở đầu

Trang 8

Khái niệm bài toán

Trang 9

Phát biểu bài toán

 Ví dụ 1: Bài toán tìm ước chung lớn nhất?

 Ví dụ 2: Bài toán tìm nghiệm của đa thức 1 biến?

 Ví dụ 3: Bài toán kiểm tra tính nguyên tố?

 Ví dụ 4: Bài toán quản lý hồ sơ cán bộ?

BLACK BOX

Trang 10

Khái niệm giải thuật

 Giải thuật hay còn gọi là thuật toán, thuật giải

Định nghĩa: Là tập hữu hạn có thứ tự các bước tác động trên

một đối tượng dữ liệu Input để sau một số hữu hạn lần thực hiện sẽ cho ta kết quả Output

Trang 12

 Bước 2 Nếu b > max thì gán max := b;

 Bước 3 Nếu c > max thì gán max := c;

 Tư tưởng của thuật toán là duyệt lần lượt giá trị của từng số và giữ lại giá trị lớn nhất vào biến max

Trang 16

Ví dụ về giải thuật

 Một vài nhận xét:

 Giải thuật nhận đầu vào là 3 số a, b, c và đưa kết quả ở đầu

ra là Max

 Các bước của giải thuật được mô tả chính xác

 Giải thuật kết thúc sau 3 bước và đưa ra lời giải của bài

toán, vì vậy giải thuật là hữu hạn

 Nếu đầu vào là đã xác định, kết quả tại mỗi bước của giải thuật được xác định duy nhất

Trang 17

Các đặc trưng của giải thuật

Đầu vào (Input): Giải thuật nhận dữ liệu vào từ một tập nào

đó

Đầu ra (Output): Với một tập các dữ liệu đầu vào, giải thuật

đưa ra các dữ liệu tương ứng với lời giải của bài toán

Chính xác (Precision): Các bước của giải thuật được mô tả

chính xác

Hữu hạn (Finiteness): Giải thuật phải đưa được đầu ra sau

một số hữu hạn bước với mọi đầu vào

Đơn trị (Uniqueness): Các kết quả trung gian của từng bước

thực hiện giải thuật được xác định một cách đơn trị và chỉ phụ thuộc đầu vào và các kết quả của các bước trước

Tổng quát (Generality): Giải thuật có thể áp dụng để giải

Trang 19

Biểu diễn thuật toán

 Có nhiều phương pháp biểu diễn thuật toán

 Có thể biểu diễn bằng liệt kê các bước

 Có thể biểu diễn bằng sơ đồ khối

 Có thể mô tả giải thuật dùng giả mã

Trang 20

Biểu diễn thuật toán bằng 3 cách?

 Bài toán 1: Cho 3 số nguyên a, b, c Mô tả giải thuật tìm số lớn nhất trong 3 số đã cho?

 Bài toán 2: Tìm ước chung lớn nhất của hai số tự nhiên?

Trang 21

Mối liên hệ giữa CTDL và Giải thuật

 Giải thuật chính là phép xử lý

 Đối tượng của giải thuật chính là dữ liệu được tổ chức thành các cấu trúc

 CTDL & GT gắn chặt với nhau Niklaus Wirth đã tổng kết:

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

 Nếu ta thay đổi cấu trúc dữ liệu thì giải thuật cũng sẽ thay đổi theo

21

Trang 22

Mối liên hệ giữa CTDL và Giải thuật

 Ví dụ: Danh bạ điện thoại

 Họ và tên

 Số điện thoại

Trang 23

Mối liên hệ giữa CTDL và Giải thuật

 Ví dụ: Danh bạ điện thoại

 Nếu danh bạ không có tổ chức gì

cả thì dẫn đến giải thuật là tìm

tuần tự từ đầu đến cuối (Cho họ

tên và tìm số điện thoại)

Họ và tên SĐT

Nguyễn Văn D 098123456

Vũ Thị B 091557799 Trần Xuân A 090333999 Quách Thái C 093886868

23

Trang 24

Mối liên hệ giữa CTDL và Giải thuật

 Ví dụ: Danh bạ điện thoại

 Nếu danh bạ (Họ và tên) tổ chức

Trang 25

Mối liên hệ giữa CTDL và Giải thuật

 Ví dụ: Danh bạ điện thoại

 Nếu danh bạ vừa xếp thứ tự

Trần Xuân B 012321432

Vũ Thị B 094325325 Quách Thái B 091987412 Nguyễn Văn B 096666666

25

Trang 26

Niklaus Wirth

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

Trang 27

Cấu trúc dữ liệu

và các vấn đề liên

quan

Trang 28

Cấu trúc dữ liệu

 Khái niệm Cấu trúc dữ liệu

 Dữ liệu gồm các phần tử cơ sở như: một kí hiệu, một số… gọi là dữ liệu nguyên tử

 Các dữ liệu nguyên tử kết hợp với nhau theo các cách khác nhau thì cho ta các cấu trúc khác nhau

Trang 29

Trần B

Vũ D

18 19 18

1A 2A 3A

10 6 8

Trang 30

 Nếu gộp các dữ liệu trên cùng một

hàng lại thành một cấu trúc ta có cấu

trúc bản ghi (Toàn bộ bảng là một

mảng các bản ghi)

Nguyễn An | 18 | 1A | 10 Trần B | 19 | 2A | 6

Vũ D | 18 | 3A | 8

Trang 32

Kiểu dữ liệu

Định nghĩa: Kiểu dữ liệu T được xác định bởi một bộ (V,O)

với:

 V: Tập các giá trị hợp lệ mà một đối tượng kiểu T có thể lưu trữ

 O: Tập các thao tác xử lý có thể thi hành trên đối tượng kiểu T

Ví dụ kiểu dữ liệu Ký tự = (V c , O c ) với:

 Vc = {a z, A Z}

 Oc = {lấy mã ASCII, biến đổi ký tự thường thành ký tự hoa…}

Ví dụ kiểu dữ liệu Số nguyên = (V i , O i ) với:

Trang 33

Kiểu dữ liệu

 Như vậy, muốn sử dụng một kiểu dữ liệu cần nắm vững cả nội dung dữ liệu được phép lưu trữ và các xử lý tác động trên đó

 Các thuộc tính của 1 kiểu dữ liệu bao gồm:

 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 dữ liệu

33

Trang 34

Các kiểu dữ liệu cơ bản

 Là các loại dữ liệu đơn giản không có cấu trúc và thường là các giá trị vô hướng, ví dụ:

 Kiểu có thứ tự rời rạc: số nguyên, ký tự, logic, liệt kê, miền con,…

 Kiểu không rời rạc: số thực

 Các kiểu cơ sở rất đơn giản và không thể hiện rõ sự tổ chức dữ liệu trong một cấu trúc

 Thường chỉ được sử dụng làm nền để xây dựng các kiểu dữ

Trang 35

Một số kiểu dữ liệu có cấu trúc

1 Kiểu chuỗi ký tự

Khai báo: Tùy từng ngôn ngữ

Thao tác:

 So sánh hai chuỗi

 Sao chép hai chuỗi

 Kiểm tra một chuỗi nằm trong chuỗi kia

Trang 36

Một số kiểu dữ liệu có cấu trúc

Trang 37

Một số kiểu dữ liệu có cấu trúc

3 Kiểu cấu trúc bản ghi:

Khai báo:

Typedef struct <tên kiểu struct>

{

<Kiểu dữ liệu> <tên trường>;

<Kiểu dữ liệu> <tên trường>;

…} [<Name>];

Trang 38

Tổng kết

 Hiểu được khái niệm giải thuật (thuật toán) các đặc trưng cơ bản của giải thuật

 Hiểu được mối quan hệ giữa Cấu trúc dữ liệu và Giải thuật

đồng thời nắm rõ việc lựa chọn CTDL cho bài toán là rất quan trọng

 Hiểu được khái niệm cơ bản một CTDL, một kiểu dữ liệu và một số kiểu dữ liệu cơ bản có cấu trúc

Trang 39

Luyện tập

 Trình bày giải thuật

 Sắp xếp nổi bọt n phần tử

 Kiểm tra một số có phải số nguyên tố hay ko?

 Trình bày cách khai báo các kiểu phần tử bên trên dùng ngôn ngữ Pascal hoặc ngôn ngữ #

39

Trang 41

Kiểm tra nguyên tố

if (n = 1) then write(‘ko phai ng to’);

check := true;

For i = 2 to round(sqrt(n)) do

If (n mod i = 0) then check := false;

if (check) then write(n,’khong la so nguyen to’)

else write(n,’ la so nguyen to’);

41

Trang 42

false

Trang 43

false

Trang 46

THIẾT KẾ VÀ PHÂN TÍCH GIẢI THUẬT

Trang 47

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?

47

Trang 48

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 một số bước:

Trang 49

Thiết kế giải thuật

 Chẳng hạn việc giải phương trình có thể chia làm 3 việc nhỏ hơn:

 1 Input hệ số

 2 Tính nghiệm

 3 Output nghiệm

49

Trang 50

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 51

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 Ban giám đốc.”

51

Trang 52

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 )

Trang 53

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

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

Đọc hồ sơ Xử lý hồ sơ Ghi hồ sơ

Tìm kiếm

Cập nhật

53

Trang 54

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 55

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

55

Trang 56

Tinh chỉnh từng bước (Stepwise refinement)

 Từ trên xuống (Top-Down Design)

Trang 57

Ví dụ về phương pháp tinh chỉnh

Sắp xếp một dãy n số nguyên khác nhau

 Phác thảo giải thuật:

Từ dãy các số nguyên chưa sắp xếp, chọn ra số nhỏ nhất, đặt

nó vào cuối dãy đã được sắp xếp

Cứ lặp lại quy trình đến khi dãy chưa được sắp xếp trở thành rỗng

Dãy số chưa sắp xếp và dãy số đã được sắp xếp??

 Đòi hỏi chi tiết hơn về cấu trúc dữ liệu và cấu trúc lưu trữ của dãy số đã cho?

57

Trang 58

Ví dụ về phương pháp tinh chỉnh

Sắp xếp một dãy n số nguyên khác nhau

 Ấn định dãy số đã cho có cấu trúc mảng 1 chiều

 Dãy số đã được sắp xếp rồi vẫn để tại chỗ cũ

Trang 59

Ví dụ về phương pháp tinh chỉnh

Sắp xếp một dãy n số nguyên khác nhau

 Tinh chỉnh bằng ngôn ngữ tựa Pascal

i a a

a , +1, ,

59

Trang 60

Ví dụ về phương pháp tinh chỉnh

Sắp xếp một dãy n số nguyên khác nhau

 Bước tinh chỉnh tiếp theo

For i:=1 to n do

Begin

So sánh a i với các số từ a i+1 đến a n Nếu (a i > a j ) thì đổi chỗ a i và a j

{Phần tử bé nhất sẽ nằm ở vị trí i}

Trang 61

Ví dụ về phương pháp tinh chỉnh

Sắp xếp một dãy n số nguyên khác nhau

 Sau khi đã chỉnh lại:

Trang 62

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

Trang 63

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 thì chắc chắn sai

 Để chứng minh tính chính xác thì phải dùng toán học – hay dùng qui nạp (rất khó)

63

Trang 64

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

Trang 65

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!

65

Trang 66

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 67

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

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

 Trường hợp một đĩa:

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

67

Trang 68

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 69

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

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

Trang 70

ĐÁNH GIÁ THỜI GIAN THỰC HIỆN CỦA GIẢI THUẬT

Trang 71

Đá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).

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

71

Trang 72

Đá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

Trang 73

Đá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

n n

Trang 74

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

Trang 75

Đá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 độ hàm mũ thì độ lớn tăng rất nhanh

75

Trang 76

Đá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 77

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

Trang 79

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

Quy tắc lấy max

Nếu ta có T(n) = O(f(n) + g(n)) thì ta cũng có T(n) = O(max(f(n),g(n)))

 Chứng minh:

T(n) C1.f(n) + C2.g(n) 2C.Max(f(n),g(n))

Suy ra: T(n) = O(max(f(n),g(n)))

79

Trang 80

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:

T(n) = T 1 (n) + T 2 (n) T(n) = O(max(f(n),g(n)))

Trang 83

 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

83

Trang 84

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 87

Yêu cầu bài tập lớn

Trang 88

Cách đánh giá điểm giữa kì

Điểm GK1: Bài tập nhóm

 Đánh giá chung cả nhóm: điểm nhóm

 Đánh giá từng cá nhân: điểm CN

 SV tích cực xây dựng bài: điểm cộng

Điểm GK2: Bài tập lập trình

 Bài tập về nhà: 30%

Ngày đăng: 05/12/2016, 22:04

HÌNH ẢNH LIÊN QUAN

 Nhóm 8: Bảng băm - Bài Giảng Cấu Trúc Dữ Liệu Và Giải Thuật
h óm 8: Bảng băm (Trang 86)

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