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

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 2

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

Trang 3

Mở đầu

¢ Cac bai tố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 tố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

Trang 4

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

° Cần quản lý những ° Cần thực hiện những

thông tin nào ? thao tác quản lý nào

— Thông tin vê nhân ?

viên; tên, ngày sinh, - Tạo ra hồ sơ cho

số bảo hiểm xã hội, nhân viên mới vào

phòng ban làm VIỆC, làm

> nhân viên ảo - Cập nhật một số

— thống tin trong hồ sơ

Trang 5

Ví dụ: tính tổng của n số tự nhiên kể từ m void main() { long n,m,i, sum;

cout << ` vào n ` ; cin << n; cout << ` vào m ` ; cin << m; sum =0; for(i = m; i < m+n; i++) sum += i; cout << ‘ Tổng = ` <<sum; } void main() long n,m, sum ;

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

Trang 9

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

Trang 10

Các giải thuật tìm kiếm phổ biến Tìm kiếm tuân tự

¢ Cac phan tu trong tap đầu vào không được sắp xếp theo khóa tìm kiếm Quá trình xử lý — Duyệt tập đầu vào — So sánh với khóa cần

tìm tới khi tìm thấy khóa hoặc duyệt qua

hết tập đầu vào mà

chưa tìm thấy

Tìm kiếm nhị phân

-_ Các phần tử trong tập

đầ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

Trang 11

2 Sắp xếp

Chương Ms

4 0 V uv ,

Na thuật, cấu ¢ Sap thu tu:

tric gữ lập — Đầu vào: tập các phần tử dữ liệu

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

Trang 15

Độ phức tạp tính bằng tiệm cận mm = 0 then: DEFINITION If lim n—>oo gín f(n) has strictly smaller order of magnitude than g(n) If lim 1” noo g(n)

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

Trang 17

II CAU TRUC DU LIEU

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

n :

trình =- ° 1 cầu trúc dữ liệu :

I Giải thuật ex

II Cấu trúc dữ — Mô tả

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

1 Các khái - Mối liên kết về mặt cấu trúc giữa các dữ liệu

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

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

giống nhau, không thể ‘Bip dev liên 2

phan chia nhỏ hơn được kiểu dữ liệu (co ban,

nữa có cầu trúc) khác

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

ngữ lập trình định nghĩa ngữ lập trình định

sản nghĩa sẵn hoặc do lập

> Vi du: trinh vién tu dinh

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

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

Trang 22

2 Mảng (Array) * Tap cac cap (index, element) tae x = 7 ? ~ , ˆ #* *# ? ° - Với môi giá trị của index sẽ có một giá trị tương ứng cua element * Cai đặt:

— 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

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)

Trang 25

3 Danh sách (List) * Danh sách : — Tập hợp các phần tử cùng kiểu —_ Số lượng các phần tử của danh sách không cố định * Phan loai: — Danh sách tuyến tính:

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

-_ Thứ tự trước / sau của các phần tử được xác định rõ ràng, ví dụ sắp theo thứ tự

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

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)

Trang 27

sách - Sử dụng vùng các ô nhớ liên tiếp: thích hợp khi — Kích thước từng phần tử là rất nhỏ — Kích thước của cả danh sách (số phần tử) đã biết khi lập trình

— Có ít sự thêm vào hay loại bỏ ở giữa danh sách — Hình thức truy cập trực tiếp là quan trọng So sánh các hình thức lưu trữ danh - Sử dụng vùng các ô nhớ không liên tiếp: thích hợp khi — Kích thước từng phần tử là lớn

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

Trang 29

C: làm thế nào để một cấu trúc có thể chứa chính nó ° Trong ngôn ngữ lập trình C, một cấu trúc (struct) không thể chứa chính nó - Nhưng một cấu trúc có thể chứa con trỏ trỏ đến cấu trúc cùng kiểu

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

struct silly struct sl;

}7

struct good struct { /* This does work */ struct *good_ struct s2;

be

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

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 */

Trang 32

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

° Định nghĩa - Cây rỗng

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)

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

Trang 38

Các phép tốn

- Tạo cây ¢ Tim kiém

Thém nut /cay con ‹Ổ Xóa nút /cây con

Trang 39

5, Bảng băm (hash table) Bảng băm Bảng Vị trí của 1 phần tử được tính bằng hàm băm Hàm băm:

Đầ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)

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

TỪ KHÓA LIÊN QUAN