1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài giảng cấu trúc dữ liệu và giải thuật chương 1 ths thiều quang trung

44 37 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 44
Dung lượng 1,02 MB

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

Nội dung

Giới thiệu đề cương môn học• Tóm tắt nội dung học phần: – Cung cấp các kiến thức cơ bản về cấu trúc dữ liệu và giải thuật như cách tổ chức biểu diễn các đối tượng dữ liệu từ thế giới th

Trang 1

C HƯƠNG I

T ỔNG Q UAN C ẤU TRÚC D Ữ L IỆU

GV Th.S Thiều Quang Trung Trường Cao đẳng Kinh tế Đối ngoại

Trang 2

• Giới thiệu đề cương môn học

Trang 3

Giới thiệu đề cương môn học

• Học phần: Cấu trúc dữ liệu và giải thuật

• Số tín chỉ: 3

• Phân bổ thời gian:

– Giảng lý thuyết: 30 tiết

– Thực hành: 15 tiết

– Tự học : 60 tiết

• Công cụ thực hành lập trình: Dev C++

Trang 4

Giới thiệu đề cương môn học

• Tóm tắt nội dung học phần:

– Cung cấp các kiến thức cơ bản về cấu trúc dữ liệu và giải thuật như cách tổ chức biểu diễn các đối tượng

dữ liệu từ thế giới thật, cách xây dựng các thao tác

xử lý dữ liệu tương ứng với cấu trúc dữ liệu biểu

diễn, cách đánh giá lựa chọn giải thuật xử lý dữ liệu phù hợp với cấu trúc dữ liệu biểu diễn.

– Các kiến thức này làm nền tảng cho sinh viên học

tiếp các học phần lập trình từ căn bản đến nâng cao,

cở sở để thiết kế xây dựng các phần mềm tin học khi làm đồ án, đề tài hay làm việc sau khi ra trường.

Trang 5

Giới thiệu đề cương môn học

• Tài liệu: slides bài giảng và bài tập do giảng viên biên soạn, link: https://sites.google.com/site/thieutrung/

• Tài liệu tham khảo:

– [1] Niklaus Wirth, Data Structures and Algorithms,

Trang 6

Giới thiệu đề cương môn học

Tiêu chuẩn đánh giá sinh viên:

• Điểm trung bình bộ phận: trọng số 40%

– 02 bài kiểm tra hệ số 2:

• 01 bài kiểm tra tự luận 1 tiết

• 01 bài kiểm tra thực hành 1 tiết

• Điểm thi kết thúc học phần: trọng số 60%

– Hình thức thi: thực hành

Trang 7

Nội dung học

Chương 1: Giới thiệu đề cương môn học và Tổng quan về

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

Chương 2: Các kiểu dữ liệu cơ bản và giải thuật tìm kiếm

Chương 3: Các giải thuật sắp xếp dữ liệu

Chương 4: Danh sách liên kết

Chương 5: Ngăn xếp, Hàng đợi, Đệ quy

Giới thiệu đề cương môn học

Trang 8

Các khái niệm cơ bản

• Một chương trình máy tính (computer program) là tập các câu lệnh để điều khiển một máy tính sinh ra một kết quả cụ thể

• Viết các chương trình máy tính gọi là lập trình máy tính (computer programming)

• Ngôn ngữ để tạo các chương trình máy tính gọi là ngôn ngữ lập trình

• Software là một chương trình hay tập hợp các

chương trình

Trang 9

Các khái niệm cơ bản

• Một số ngôn ngữ lập trình

– FORTRAN (1957), COBOL, BASIC (1960)

– PASCAL (1971), C (1980): Structure programming

– C++, Java (1985): Object-oriented programming

– Javascript, PHP (1995): Scripting programming

– Python (1990), Golang (2007)

• Cú pháp (syntax)

– Cú pháp của một ngôn ngữ lập trình là tập các luật để viết các câu lệnh chính xác

Trang 10

Giải thuật là gì ?

• Giải thuật/thuật toán (Algorithm): là một

dãy hữu hạn các chỉ thị có thể thi hành để đạt mục tiêu đề ra nào đó.

Trang 11

Biễu diễn giải thuật

• Dạng ngôn ngữ tự nhiên

• Dạng lưu đồ/sơ đồ khối (Flow chart)

• Dạng mã giả (Pseudocode)

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

Trang 12

Biễu diễn giải thuật bằng ngôn ngữ tự

– Dài dòng, không cấu trúc

– Đôi lúc khó hiểu, không diễn đạt được thuật

toán

Trang 13

Biễu diễn giải thuật bằng lưu đồ

• Lưu đồ là hệ thống các nút, cung hình dạng khác

nhau thể hiện các chức năng khác nhau

Trang 14

Ví dụ biễu diễn giải thuật bằng lưu đồ

Trang 15

Biễu diễn giải thuật bằng mã giả

Trang 16

Biễu diễn giải thuật bằng mã giả

• Một số quy ước:

– Các biểu thức toán học

– Lệnh gán: “=” (A←B)

– So sánh: “==”, “!=”

– Khai báo hàm (thuật toán)

Thuật toán <tên TT> (<tham số>)

Input: <dữ liệu vào>

Output: <dữ liệu ra>

<Các câu lệnh>

End

Trang 17

Biễu diễn giải thuật bằng mã giả

Một

Trả giá trị về: return [giá trị]

Trang 18

Biễu diễn giải thuật bằng mã giả

• Ví dụ: tìm phần tử lớn nhất trong mảng một chiều.

Trang 19

Biễu diễn giải thuật bằng ngôn ngữ lập trình

Trang 20

So sánh giải thuật bằng mã giả và NNLT

Ví dụ: mã giả của bubble sort

Algorithm Bubble sort

Input: The list A of n elements

is given

Output: The list A is sorted

1 loop for n time

1.1 for each pair in the list

1.1.1 if it is not in ordered

1.1.1.1 exchange them

End Bubble sort

Algorithm Bubble sort Input: The list A of n elements is

given

Output: The list A is sorted

1 for outter in 0 (n-2) 1.1 for inner in 0 (n-2- outter) 1.1.1 if Ainner+1 < Ainner

1.1.1.1 swap Ainner, Ainner+1

End Bubble sort

Trang 21

Giải thuật 1: Pascal Giải thuật 2: C++

procedure BubbleSort(var A: list);

var i,j: int;

tmp := A[j]; A[j] := A[j+1];

void BubbleSort ( int a[], int n) {

int i, j;

for (i = 0 ; i<n-1 ; i++)

for (j =n-1; j>i ; j )

if (a[j]< a[j-1])

So sánh giải thuật bằng mã giả và NNLT

Ví dụ: giải thuật bubble sort bằng 2 NNLT

Trang 22

Độ phức tạp của giải thuật

Trang 23

Phương pháp thực nghiệm

• Cài thuật toán rồi chọn các bộ dữ liệu thử nghiệm.

• Thống kê các thông số nhận được khi chạy các bộ dữ liệu

• Ưu điểm: Dễ thực hiện.

• Nhược điểm:

– Chịu sự hạn chế của ngôn ngữ lập trình.

– Ảnh hưởng bởi trình độ của người lập trình.

– Chọn được các bộ dữ liệu thử đặc trưng cho tất cả tập các dữ liệu vào của thuật toán: khó khăn và tốn nhiều

Trang 24

Phương pháp xấp xỉ toán học

Đánh

cận qua các khái niệm O().

Trang 25

Vai trò của cấu trúc dữ liệu ?

• Thực hiện một đề án tin học là chuyển bài toán thực

tế thành bài toán có thể giải quyết trên máy tính

• Một bài toán thực tế bất kỳ đều bao gồm các đối

tượng dữ liệu và các yêu cầu xử lý trên những đối

Trang 26

• Các thành phần dữ liệu thực tế đa dạng, phong

phú và thường chứa đựng những quan hệ nào đó với nhau => trong mô hình tin học của bài toán

cần phải tổ chức xây dựng các cấu trúc thích hợp nhất sao cho vừa có thể phản ánh chính xác các

dữ liệu thực tế, vừa có thể dễ dàng dùng máy tính

để xử lý

• Công việc này được gọi là xây dựng cấu trúc dữ

liệu cho bài toán.

Tổ chức biểu diễn các đối tượng thực tế

Trang 27

• Từ những yêu cầu xử lý thực tế, cần tìm ra các giải

thuật tương ứng để xác định trình tự các thao tác

máy tính phải thi hành để cho ra kết quả mong muốn

• Đây là bước xây dựng giải thuật cho bài toán.

• Giải thuật và cấu trúc dữ liệu có mối quan hệ chặt chẽ với nhau, được thể hiện qua công thức:

Xây dựng các thao tác xử lý dữ liệu

Trang 28

• Để xác định được giải thuật phù hợp cần phải biết

nó tác động đến loại dữ liệu nào ?

• Ví dụ để làm nhuyễn các hạt đậu, người ta dùng

cách xay chứ không băm bằng dao, vì đậu sẽ văng

ra ngoài.

• Khi chọn lựa cấu trúc dữ liệu cũng cần phải hiểu

rõ những thao tác nào tác động đến nó ?

• Ví dụ để biểu diễn các điểm số của sinh viên người

ta dùng số thực thay vì chuỗi ký tự vì còn phải

thực hiện thao tác tính trung bình từ những điểm

số đó.

Tại sao chú trọng cả 2 vấn đề ?

Trang 29

Ví dụ về lưu trữ dữ liệu kiểu mảng

• Ví dụ: một chương trình quản lý điểm thi của

sinh viên cần lưu trữ các điểm số của 4 sv:

Sinh viên Môn 1 Môn 2 Môn 3

Trang 30

Ví dụ về lưu trữ dữ liệu kiểu mảng

• Có 02 phương án tổ chức lưu trữ dữ liệu sinh viên:

– Phương án 1: sử dụng mảng một chiều:

Có tất cả 4(sv) x 3(môn) = 12 điểm số cần lưu

trữ, do đó khai báo mảng diem như sau:

int diem [12] = {8, 6, 4,

9, 5, 3,

6, 7, 2,

5, 6, 5 };

Trang 31

Ví dụ về lưu trữ dữ liệu kiểu mảng

• Khi đó trong mảng diem các phần tử sẽ được

lưu trữ như sau:

Trang 32

Ví dụ về lưu trữ dữ liệu kiểu mảng

• Để truy xuất điểm số môn j của sinh viên i (là phần tử tại dòng i, cột j trong bảng) phải sử dụng công thức xác định chỉ số tương ứng

trong mảng diem:

bảngđiểm(dòng i, cột j) => diem[((i-1)*số cột) +j]

Trang 33

Ví dụ về lưu trữ dữ liệu kiểu mảng

• Thao tác xử lý được cài đặt cho mảng 1 chiều như sau:

Trang 34

Ví dụ về lưu trữ dữ liệu kiểu mảng

▪ Phương án 2: Sử dụng mảng hai chiều

Khai báo mảng 2 chiều diem có kích thước 3 cột * 4

Trang 35

• Khi đó trong mảng diem các phần tử sẽ được

lưu trữ như sau:

Ví dụ về lưu trữ dữ liệu kiểu mảng

cột 0 cột 1 cột 2 Dòng 0 diem[0][0]=8 diem[0][1]=6 diem[0][2]=4

Dòng 1 diem[1][0]=9 diem[1][1]=5 diem[1][2]=3

Dòng 2 diem[2][0]=6 diem[2][1]=7 diem[2][2]=2

Trang 36

Ví dụ về lưu trữ dữ liệu kiểu mảng

• Để truy xuất điểm số môn j của sinh viên i, là phần tử tại dòng i, cột j trong bảng, cũng

chính là phần tử nằm ở vị trí dòng i cột j

trong mảng:

bảngđiểm(dòng i, cột j) => diem[i] [j]

Trang 37

Ví dụ về lưu trữ dữ liệu kiểu mảng

• Thao tác xử lý được cài đặt cho mảng 2 chiều như sau:

void indiem()

{ int somon = 3, sosv = 4;

for (int i=0; i<sosv; i++)

for(int j=0; j<somon; j++)

printf(“Điểm môn %d của SV %d là: %d”, j, i, diem[i][j]);

Trang 38

Ví dụ về lưu trữ dữ liệu kiểu mảng

Trang 39

Các tiêu chuẩn của giải thuật

• Xác định rõ dữ liệu đầu vào

• Xác định rõ kết quả đầu ra

• Tính xác định: cùng một dữ liệu đầu vào thì

cùng đưa đến một kết quả đầu ra

• Tính khả thi: đơn giản, làm được, thời gian

hữu hạn

• Tính dừng: sau một số bước hữu hạn thực

Trang 40

• Phản ánh đúng thực tế => cần xem xét kỹ lưỡng

cũng như dự trù các trạng thái biến đổi của dữ

liệu trong chu trình sống để có thể chọn cấu trúc

dữ liệu lưu trữ thể hiện chính xác đối tượng thực

tế

• Phù hợp với các thao tác trên đó => giúp tăng

tính hiệu quả của giải thuật, tốc độ xử lý tốt hơn

• Tiết kiệm tài nguyên hệ thống => cấu trúc dữ liệu

chỉ nên sử dụng tài nguyên hệ thống (CPU và bộ

nhớ) vừa đủ để đảm nhiệm được chức năng của

Các tiêu chuẩn của cấu trúc dữ liệu

Trang 41

• Ví dụ tình huống chọn cấu trúc lưu trữ sai:

– Chọn một biến số nguyên int để lưu trữ tiền thưởng

bán hàng (được tính theo công thức tiền thưởng

bán hàng = trị giá hàng * 5%)

– Sai, vì số nguyên sẽ làm tròn mọi giá trị tiền thưởng gây thiệt hại cho nhân viên bán hàng !

– Trường hợp này phải sử dụng biến số thực float để

phản ánh đúng kết quả của công thức tính thực tế

Các tiêu chuẩn của cấu trúc dữ liệu

Trang 42

• Ví dụ tình huống chọn cấu trúc lưu trữ lãng phí:

– Sử dụng biến int (2 bytes) để lưu trữ một giá trị

cho biết tháng hiện hành Biết rằng tháng chỉ có thể nhận các giá trị từ 1 - 12, nên chỉ cần sử dụng

kiểu char (1 byte) là đủ.

– Để lưu trữ danh sách học viên trong một lớp sử dụng mảng 50 phần tử (giới hạn số học viên

trong lớp tối đa là 50) Nếu số học viên thật sự ít hơn 50, thì gây lãng phí Trường hợp này cần có một cấu trúc dữ liệu linh động hơn mảng, như

kiểu xâu liên kết

Các tiêu chuẩn của cấu trúc dữ liệu

Trang 43

Sự cần thiết của giải thuật

• Tại sao sử dụng máy tính để xử lý dữ liệu?

– Nhanh hơn, nhiều hơn.

– Giải quyết những bài toán mà con người không thể hoàn thành được.

• Làm sao đạt được những mục tiêu đó?

– Nhờ vào sự tiến bộ của kỹ thuật: tăng cấu hình máy => chi phí cao

– Nhờ vào các thuật toán hiệu quả: thông minh và chi phí thấp

Ngày đăng: 07/02/2020, 18:13

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