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

Bài giảng cấu trúc dữ liệu và giải thuật chương 1 ths nguyễn thị khiêm hòa

65 226 1

Đ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 65
Dung lượng 814,59 KB

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 bài toán bằng máy tính  Giải quyết một bài toán :  Mục tiêu  Phương pháp  Giải quyết bài toán tin học cần phải:  Tổ chức biểu diễn các đối tượng thực tế  Xây dựng trình t

Trang 1

Gi ả ng viên: Ths Nguy ễ n Th ị Khiêm Hòa

Chương 1: Tổng quan

Trang 2

Nội dung

Trang 3

Mục tiêu

 Tìm hiểu các nội dung:

 Thiết kế và phân tích được thuật toán

 Hiểu rõ về kiểu dữ liệu, kiểu dữ liệu trừu

tượng, cấu trúc dữ liệu

 Đánh giá độ phức tạp của thuật toán

Trang 4

Giải bài toán bằng máy tính

 Giải quyết một bài toán :

 Mục tiêu

 Phương pháp

 Giải quyết bài toán tin học cần phải:

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

 Xây dựng trình tự các thao tác xử lý trên các

đối tượng dữ liệu đó

Trang 5

Giải bài toán bằng máy tính

Cấu trúc dữ liệu

+ Thuật toán Chương trình

Trang 6

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

 Kiểu dữ liệu

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

 ADT - abstract data type

 Kiểu dữ liệu trừu tượng: T = <V, O>

 V: Values - miền giá trị

 O: Operators – các thao tác

Trang 7

 Cấu trúc dữ liệu (Data structure): Cách tổ

chức dữ liệu cho bài toán

Có một số cấu trúc dữ liệu riêng của ngôn

ngữ lập trình được gọi là CTDL tiền định

Cấu trúc dữ liệu

Trang 8

 Phản ánh đúng thực tế

 Phù hợp với thao tác

 Tiết kiệm tài nguyên hệ thống

Đánh giá cấu trúc dữ liệu

Trang 9

Cấu trúc lưu trữ (trong/ngoài)

trên bộ nhớ (trong/ngoài) của máy tính được

gọi là cấu trúc lưu trữ

một cấu trúc dữ liệu

Trang 10

Thuật toán

 Định nghĩa

 Lý thuyết thuật toán quan tâm đến những vấn đề sau:

 Giải được bằng thuật toán

 Tối ưu hóa thuật toán

 Triển khai thuật toán

Trang 12

Diễn đạt thuật toán

Dạng lưu đồ (sơ đồ khối)

 Dạng ngôn ngữ tự nhiên (Ngôn ngữ liệt

kê từng bước)

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

 Dạng mã giả

Trang 13

Diễn đạt thuật toán

Nút điều khiển: trong đó ghi điều

kiện cần kiểm tra trong quá trình tính toán

Nút khởi đầu ,kết thúc Cung

Các ký hiệu biểu diễn thuật toán bằng sơ đồ

khối

Trang 15

Diễn đạt thuật toán

Ví dụ 1: Thuật toán xác định n là số nguyên tố

 Bước 1: Nhập n

 Bước 2: Nếu n ≤ 1  n ko nguyên tố  dừng

 Bước 3: Nếu n ≥ 2, gán i  2

 Bước 4: Nếu i ≥ √n hay n chia hết cho i  bước 6

 Bước 5: Gán i  i+1, trở lại bước 4

 Bước 6:

 Nếu i > √n  n nguyên tố  dừng

 Ngược lại, n không là nguyên tố  dừng

Trang 16

Diễn đạt thuật toán

Ví dụ 2: Thuật toán tìm phần tử thứ n

của dãy số Fibonacci

 Bước 1: Nhập n

 Bước 2: Nếu n=1 hay n=2  f n =1  dừng

 Bước 3: Nếu n > 2, gán a1, b1, i1

 Bước 4: Gán ca+b, ab, bc

 Bước 5:

 Nếu i = n - 2  f n =c  dừng

 Ngược lại i  i+1, quay lại bước 4

Trang 18

Mối quan hệ giữa Cấu trúc dữ liệu và thuật toán

 Đối tượng xử lý của thuật toán chính là

dữ liệu

 Với một cấu trúc dữ liệu, sẽ có những

thuật toán tương ứng

 Thuật toán thường thay đổi khi cấu trúc

dữ liệu thay đổi

Trang 19

Thiết kế thuật toán

 Từ bài toán đến chương trình

•Ngôn ngữ lập

trình:

•PASCAL, C/C++,

JAVA,

Trang 20

 Module hoá và việc giải quyết bài

toán

 Chiến thuật chia để trị (divide-conquer):

 Để thực hiện chiến thuật này, thường có

Trang 21

 Tinh chỉnh từng bước:

 Biểu diễn ý tưởng bằng ngôn ngữ tự nhiên

 Chi tiết hóa các công việc nhỏ hơn dùng mã

giả rồi đến ngôn ngữ lập trình

Thiết kế thuật toán

Trang 22

 Ví dụ: Bài toán sắp xếp một dãy n số, theo thứ tự tăng dần

Trang 23

- So sánh min với các số từ x i+1 -> x n

Nếu x[j] > min thì min = x[j] với j  [i+1,n]

Thiết kế thuật toán

Trang 24

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

{ min =x[i]; vt =i;

for(j = i+1; j <=n; j++)

if (x[j] < min)

{ min = x[j] ;

vt =j;

}

if (vt!=i) {

x[vt] = x[i];

x[i] = min }

Thiết kế thuật toán

Trang 25

Phân tích thuật toán

 Khi xây dựng thuật toán cần đặt ra các yêu cầu:

 Tính đúng đắn

 Tính đơn giản

 Không gian

 Thời gian

Trang 26

 Giải quyết bài toán

 Phải đứng trước việc lựa chọn giải thuật nào?

 Dựa trên cơ sở nào để lựa chọn ?

 Thuật toán dễ hiểu, cài đặt và gỡ lỗi

 Thuật toán sử dụng hiệu quả tài nguyên máy tính,

đặc biệt chạy càng nhanh càng tốt

Phân tích thuật toán

Trang 27

 Độ phức tạp không gian (Space complexity)

Dung lượng bộ nhớ mà thuật toán đòi hỏi

 Độ phức tạp thời gian (Time complexity)

Thời gian thực hiện thuật toán

Đánh giá độ phức tạp thuật toán

Trang 28

Phân tích thời gian thực hiện thuật toán

 Thời gian thực hiện giải thuật phụ thuộc

vào các yếu tố sau:

 Dữ liệu vào

 Tốc độ thực hiện các phép toán của máy tính

(phần cứng máy tính)

 Trình biên dịch

Trang 29

 Định nghĩa:

Phép toán cơ bản là phép toán có thể thực hiện

với thời gian bị chặn bởi một hằng số không phụ thuộc vào kích thước dữ liệu

 Để tính toán thời gian thực hiện thuật

toán ta đếm số phép toán cơ bản mà

thuật toán thực hiện

Phân tích thời gian thực hiện thuật toán

Trang 30

 Ký hiệu: T(n)

 Thời gian tính tốt nhất

 Thời gian tính trung bình

 Thời gian tính xấu nhất

Các loại thời gian tính

Trang 31

Ký hiệu tiệm cận

  , O, 

 Được sử dụng để mô tả thời gian tính

của thuật toán

 Được xác định đối với các hàm nhận

giá trị nguyên không âm

 Dùng để so sánh tốc độ tăng của hai

hàm

Trang 32

Ký hiệu O

 Ký hiệu O (big-Oh): hàm f(n) và g(n), ta

nói:

f(n) = Ο(g(n)), nếu tồn tại các hằng số dương c

và n o sao cho f(n) ≤ cg(n) khi n ≥ n o

 Ký hiệu này dùng để chỉ chặn trên của một hàm

 Ý nghĩa: Tốc độ tăng của hàm f(n) không

lớn hơn hàm g(n) Hay có thể nói g(n) là

cận trên tiệm cận của f(n)

Trang 35

 Định nghĩa 

f(n) =  (g(n)), nếu tồn tại các hằng số dương

c 1 , c 2 và n 0 sao cho c 1 g(n)  f(n)  c 2 g(n) với

mọi n> n 0

f(n)

Ký hiệu 

Trang 36

Biểu diễn đồ thị đánh giá thời gian tính

của thuật toán

)) (

( )

( )

Trang 37

)) (

( )

Biểu diễn đồ thị đánh giá thời gian tính

của thuật toán

Trang 39

Thời gian tính của thuật toán

 O(f(n)): là thời gian tính xấu nhất

  (f(n)) : là thời gian tính tốt nhất

  (f(n)) : là thời gian tính trung bình

Trang 40

Một số qui tắc về ký hiệu O lớn

 f = O(f)

 f = O(g) và g = O(h) thì f = O(h)

 f = O(g) và h=O(r) thì fh = O(gr)

 f =O(g) và h=O(r) thì f+h = O(g+r)

 f =O(g) thì af = O(g) với mọi a>0

 f là đa thức bậc k thì f(n) là O(n k )

Trang 44

Thời gian tính của lệnh if-else là O(max(f(n),g(n)))

Trang 45

Các qui tắc tổng quát

 Câu lệnh switch được đánh giá tương tự

như lệnh if-else

 Các lệnh lặp: for, while, do-while

 Cần đánh giá số tối đa các lần lặp, giả sử đó

Trang 47

Ví dụ 3: for (int i=0; i<n-1; i++)

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

int k+=1;

O(n 2 )

O(n 2 )

O(n 2 )

Trang 48

Một số ví dụ

int MaxSubSum1(const int a[], int n) {

int maxSum=0;

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

for (int j=i; j<n; j++)

}

Trang 49

return maxSum;

}

Trang 52

temp=a[j-1]; (4) a[j-1] = a[j]; (5) a[j] = temp; (6) }

}

Trang 53

n(n i)

(n

1 n

1 i

Trang 58

Phân tích các hàm đệ quy

 Gọi T(n) là thời gian chạy của hàm đệ quy F

 Khi đó, thời gian chạy của các lời gọi hàm ở trong hàm F sẽ là T(m) (với m < n)

 Trước hết, phải đánh giá thời gian chạy của hàm

F trên dữ liệu nhỏ nhất n = 1, giả sử T(1) = a

(điều kiện dừng)

 Sau đó, đánh giá thời gian chạy của các câu lệnh

trong thân của hàm F

 Tìm ra quan hệ đệ quy biểu diễn thời gian chạy

của hàm F thông qua lời gọi hàm

Trang 59

Sự phân lớp của giải thuật

Trang 60

Sự phân lớp của giải thuật

Trang 61

Đánh giá độ phức tạp trong ba trường hợp

 Ví dụ: Thuật toán tìm kiếm tuần tự

int sequenceSearch(int x, int a[], int n)

Trang 62

Đánh giá độ phức tạp trong ba trường hợp

tìm, số lượng phép so sánh là 2  T(n) ~ O(2) = O(1)

số lượng phép so sánh là 2n  T(n) ~ O(n)

2i phép so sánh, vậy trung bình cần (2+4+6+…+2n)/n=2(1+2+…+n)/n=n+1

 T(n) ~ O(n)

Trang 63

Kiến thức Toán học bổ trợ về Tổng các chuỗi

 Tổng các BP:

 Logarithms:

x a = b log x b = a

N large

for 3

6

) 1 2

 +

+ +

i

N N

i N

N

S

1

2 / ) 1

( 2

1 )

Trang 64

Kiến thức Toán học bổ trợ về Tổng các chuỗi

 Đặc biệt khi A = 2

 2 0 + 2 1 + 2 2 + … + 2 N = 2 N+1 - 1

-1 k

and N

large

for

| 1

|

1

1

 +

i k

1

1 1

N N

i

i

Trang 65

Q&A

Ngày đăng: 03/12/2015, 02:15

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