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

Bài giảng Kỹ thuật lập trình: Chương 2 - TS. Vũ Hương Giang

40 8 0
Tài liệu được quét OCR, nội dung có thể không chính xác

Đ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 40
Dung lượng 3,33 MB

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

Nội dung

Bài giảng Kỹ thuật lập trình - Chương 2: Giải thuật và cấu trúc dữ liệu cung cấp cho người học các kiến thức: Đặc trưng của giải thuật, giải thuật tìm kiếm, sắp xếp, độ phức tạp tính toán, cấu trúc dữ liệu, kiểu dữ liệu,... Mời các bạn cùng tham khảo nội dung chi tiết.

Trang 1

CHƯƠNGII _ GIẢI THUẬT VÀ _ CẤU TRÚC DỮ LIỆU

Trang 2

- Với mỗi bài toán, làm thế nào để:

— Thiết kế giải thuật nhằm giải quyết bài toán đó

— Cài đặt giải thuật bằng một chương trình máy tính

Trang 3

Mở đầu

¢ Cac bai toán thực tế thường phức tạp

- Hiểu bài toán đặt ra == để giải quyết bài toán,

cần làm gì, không cần làm gì Do đó, phải xác

định được:

— Các dữ liệu liên quan đến bài toán

— Các thao tác cần thiết để giải quyết bài toán

- Làm chủ ngôn ngữ lập trình để cài đặt giải pháp

thành chương trình máy tính

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 4

Ví dụ: Bài toán quản lý nhân viên của một cơ quan

— Thông tin vê nhân ? viên; tên, ngày sinh, - Tạo ra hồ sơ cho

phòng ban làm VIỆC, làm > nhân viên ảo - Cập nhật một số

- Tìm kiếm thông tin về

Trang 5

cout << ` vào n ` ; cin << n;

cout << ` vào m ` ; cin << m;

sum =0;

for(i = m; i < m+n; i++) sum += i;

cout << ` vào m ` ; cin << m;

Trang 7

Đặc trưng của giải thuật

Đầu vào (Input): dữ liệu nào, lấy từ đâu

Đầu ra (Output): dữ liệu đầu ra tương ứng với dữ liệu đầu vào và các bước xử lý

Độ chính xác (Precision): các bước xử lý được mô

tả chính xác Hữu hạn (Finiteness): tạo ra đầu ra sau một số

hữu hạn các bước xử lý Đơn trị (Uniqueness): Các kết quả trung gian của

từng bước xử lý là duy nhất, không thể thay đổi

Tổng quát (Generality): có thể áp dụng cho các bài toán đồng dạng

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 9

Phần tử dữ liệu có cấu trúc và khóa |

¢ Phan tử dữ liệu có cấu trúc:

— Thường là số

‹ Trích khóa từ các phần tử dữ liệu có cấu trúc:

Trang 10

đầu vào được sắp xếp

theo khóa tìm kiếm

° Quá trình xử lý

— So sánh khóa cần tìm với phần tử giữa

— Nếu nó nhỏ hơn thì tìm bên trái tập đầu vào

— Ngược lại tìm bên phải tập đầu vào

- Lặp lại động tác này

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 11

2 Sắp xếp

Chương Ms

trình — Đầu ra: danh sách có thứ tự tăng (hoặc

1 Giải thuật giảm) theo khóa

Trang 12

Các giải thuật sắp xếp phổ biến

Trang 13

3 Độ phức tap tinh toàn

Trang 14

Độ tăng của các hàm chung

Trang 15

f(n) has the same order of magnitude as g(n)

is finite and nonzero then:

Trang 17

II CAU TRUC DU LIEU

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 18

a Cấu trúc dữ liệu

Chương th

4 ao V v , ~ 2A ` z n , `

viải thuật, cấu - Cấu trúc dữ liệu là cách tổ chức và

rr nar lap thao tác có hệ thống trên dữ liệu

I Giải thuật ex

liệu -Ổ Các dữ liệu cấu thành

niệm cơ bản đó

— Cung cấp các thao tác trên dữ liệu đó

— Đặc trưng cho 1 kiểu dữ liệu

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 19

b Kiểu dữ liệu

Kiểu dữ liệu cơ bản Kiểu dữ liệu có cấu trúc

(primitive data type) (structured data type)

°Ổ Đại diện cho các dữ liệu s Được xây dựng từ các

* Thường được các ngôn ° Có thê được các ngôn

— C/C++: int, long, char, nghia boolean, v.v

— Thao tac trén các số nguyên: + - */

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 20

1 ADT là một kiểu dữ liệu đi kèm với các thao tác trên các dữ liệu kiểu

O

1 ADT mô hình hóa các

dữ liệu cùng kiểu theo cách không phụ thuộc

vào ngôn ngữ lập trình

hay môi trường cài đặt Các ngôn ngữ lập trình hướng đối tượng cho phép cài đặt 1 ÄDT dưới dạng 1 lớp (class)

c Kiểu dữ liệu trừu tượng

(Abstract data type)

Trang 21

Dữ liệu, kiểu dữ liệu, cấu trúc dữ liệu

Machine Level Data Storage 0100110001101001010001

Primitive Data Types 28 3.1415 ‘A

Basic Data Structures array

High-Level Data Structures stack queue list

hash table tree

Trang 22

— Sử dụng một không gian nhớ liên tiếp

— index: kiểu giá trị phụ thuộc vào ngôn ngữ lập trình

C, Java : kiểu số nguyên, tăng liên tục, bắt đầu từ 0 Pascal : kiểu số nguyên

Perl: chỉ số không nhất thiết phải là kiểu số

- element: kiểu giá trị bất kỳ (kiểu dựng sẵn hoặc kiểu có cấu trúc)

+ Tat ca các phần tử cùng kiểu: mảng thuần nhất

Ngược lại: mảng không thuần nhất sizeOf(element)

——¬

Index: chỉ số chỉ thứ tự Element: phần tử

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 23

2 Mang (Array)

‹ Các kiểu mang

— Mang 1 chiều

— Mang 2 chiều

¢ Thao tac trén mang:

Khdi tao mang (create) Tính kích thước (sizeOf) Lấy một phần tử tại một vị trí cụ thể (retrieve) Thay thế giá trị của một phần tử tại một vị trí cụ thể (replace)

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 24

Bài tập: Khởi tạo giá trị cho mảng

y[5] = {3.2,1.2,4.5,6.0,3.6};

m[6][2] = {{1,1},{1,2},{2,1}, {2,2}, {3,1}, {3,2}};

char si[6] ={“H?,?a?,?n?,?o?,?i1?,?\@?};

//Hoac char si[] = “DH Bach Khoa Hanoi”; //length =

Trang 25

+ Có phần tử đầu tiên, phần tử cuối cùng

tăng dần, giảm dần hay thứ tự trong bảng chữ cái

* Cac thao tác trên danh sách phải không làm ảnh hưởng đến trật tự này

—_ Danh sách không tuyến tính: các phần tử trong danh sách không được sắp thứ tự

* (C6 nhiéu hình thức lưu trữ danh sách

—_ Danh sách kế tiếp: Sử dụng vùng các ô nhớ liên tiếp trong bộ nhớ

— Danh sách liên kết: Sử dụng vùng các ô nhớ không liên tiếp trong bộ nhớ

- Danh sách nối đơn

- _ Danh sách nối kép

- Danh sách nối vòng

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 26

3 Danh sách (List)

Thao tác trên danh sách tuyến tính

Khởi tạo danh sách (create)

Kiểm tra danh sách rỗng (isEmpty) Kiểm tra danh sách đầy (isFull)

Tính kích thước (sizeOf)

Xóa rỗng danh sách (clear)

Thêm một phần tử vào danh sách tại một ví trí cụ thể (insert) Loại bỏ một phần tử tại một vị trí cụ thể khỏi danh sách (remove) Lấy một phần tử tại một vị trí cụ thể (retrieve)

Thay thế giá trị của một phần tử tại một vị trí cụ thể (replace) Duyệt danh sách và thực hiện một thao tác tại các vị trí trong danh sách (traverse)

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 27

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 28

Cấu trúc dữ liệu đệ quy

¢ Đôi khi LTV cần đến các cấu trúc dữ liệu đệ quy (cấu trúc chứa chính nó)

- Vi du: từ điển điện tử, mỗi từ trong từ điển được

biểu diễn bằng một cấu trúc dữ liệu, trong đó,

mục từ đồng nghĩa cũng là từ có cùng cấu trúc

wordl : run

word2: sprint *| synonym1 ¬ | inom jog

synonyml 7” | synonym2 synonyml

Trang 29

struct silly struct { /* This doesn't work */

struct silly struct sl;

}7

struct good struct { /* This does work */

struct *good_ struct s2;

be

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 30

Danh sách liên kết: cách biểu diễn đơn

giản cấu trúc dữ liệu đệ quy

- _ Ví dụ: cần đọc các dòng trong một tệp tin, nhưng không biết cần đọc bao nhiêu dòng > cần một cấu trúc có thể tự mở rộng

head_of list

information —”| information | —?| information

" nextptr oo nextptr= NULL

Trang 31

Sổ địa chỉ cài đặt bằng danh sách nối

đơn

typedef struct list {

char name [MAXLEN] ; char address [MAXLEN] ; char phone [MAXLEN] ; struct list *next;

} ADDRESS;

ADDRESS *hol= NULL;

/* Set the head of the list */

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 32

4 Cây nhị phân (binary tree)

Trang 33

Phép duyệt cây

- Duyệt qua từng nút của cây (mỗi nút 1 lần)

° Cách duyệt:

— Thu tu truGc (preorder hay NLR)

- Thứ tự giữa (inorder hay LNR)

— Thu tu sau (postorder hay LRN)

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 37

Các loại cây nhị phan

‹ Cây nhị phân liên kết

R # ˆ aA tA ~Y ~~ # nv ? aA ˆ

— Môi nút trên cây liên kết đến nút gốc của cây con bên trái và bên phải

* Cay nhi phan tim kiém (BST)

— Khoa của nút gốc lớn (hay nhỏ) hơn khóa của tất cả các nút của cây con bên trái (hay bên phải)

— Các cây con (bên trái, phải) là BST

- Cây cân bằng (AVL)

— BST

- Tại nút bất kỳ, chiêu cao nhánh trái và nhánh phải

chênh nhau không quá 1

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 38

Các phép toán

- Tạo cây

¢ Tim kiém Thém nut /cay con

‹Ổ Xóa nút /cây con

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 39

Đầu vào: giá trị cần băm (giá trị phần tử đầu vào)

Đầu ra: giá trị băm (khóa, giúp xác định vị trí của giá trị cần băm)

Có khả năng trùng khóa (đụng độ), ví dụ f(x) = x % m;

Cần tìm hàm băm sao cho khả năng đụng độ là nhỏ nhất (luôn luôn tìm ra đúng giá trị phần tử đầu vào khi sử dụng khóa) Đảm bảo O(1)

Ví dụ:

+ f(x)=x%m;

* f(‘abc’) = (char_index(‘a’)*base_number2 +

char_index(‘b’)*base_number1 + char_index(‘c’)*base_number0O) % hash_size

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 40

hash(x) = char_index(x) % 10

Tim V Tim F

char_ index: Spa

Ngày đăng: 09/05/2021, 18:25

TỪ KHÓA LIÊN QUAN

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