Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Đỗ Ngọc Như Loan

31 10 0
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Đỗ Ngọc Như Loan

Đ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

Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 1: Tổng quan về cấu trúc dữ liệu & giải thuật cung cấp cho người học các kiến thức: Độ phức tạp của thuật toán, biểu diễn thời gian chạy bởi ký hiệu O. Mời các bạn cùng tham khảo.

Tổng quan Cấu trúc liệu & Giải thuật GV: Đỗ Ngọc Như Loan Cấu trúc liệu gì? Cấu trúc liệu cách tổ chức lưu trữ liệu cho hiệu Thế hiệu quả? Chính xác Dùng nhớ Khả tìm kiếm/truy xuất Khả cập nhật, thêm (modification, insertion / deletion) Đơn giản, dễ hiểu Giải thuật gì? Thuật tốn phương pháp bao gồm dãy bước tính tốn để giải tốn Thuật tốn diễn tả ngôn ngữ tự nhiên (tiếng Việt, tiếng Anh…), mã giả hay ngơn ngữ lập trình (C++, Java…) Thế thuật toán tốt? Đúng đắn Nhanh Ít nhớ Đơn giản, dễ hiểu Ví dụ Tìm x dãy a1, a2, , an Input: Số x, dãy n số a1, a2, , an Output: Một giá trị logic true false Search(x, a, n) for i  to n if = x then return true return false Một vấn đề giải bẳng nhiều thuật tốn khác Ví dụ Tính tổng số ngun từ đến n Input: n (n >1) Output: Tổng số nguyên từ đến n Cách sum = 0; for (int i = 1; i then return n*Factorial(n-1) VÍ DỤ  Gọi T(n) thời gian chạy thuật giải O(1), n=0, T(n)= T(n-1)+O(1), n>1 T(n) = T(n-1) + c = T(n-2)+c +c =T(n-2) + 2c = T(n-3)+c + 2c = T(n-3) + 3c … = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + T(n) = O(n) (tương đương với giải thuật không đệ qui) (n-1)c = nc Luyện tập for (i = ; i < n ; i++) if (A[i] % == 0) return true; return false; Độ phức tạp? Luyện tập sum = 0; for (i = ; i < 20 ; i++) sum = sum + i; Độ phức tạp? Luyện tập for (i = ; i < n ; i++) for (j = ; j < n ; j++) A[i][j] = 0; for (i = ; i < n ; i++) A[i][i] = 1; Độ phức tạp? Luyện tập sum = 0; for ( i = 0; i < n; i + +) for ( j = i + 1; j < = n; j + +) for ( k = 1; k < 10; k + +) sum = sum + i * j * k ; Độ phức tạp? Luyện tập sum = 0; for ( i = 0; i < n; i + +) for ( j = i + 1; j < = n; j + +) for ( k = 1; k < m; k + +) { sum = sum + i * j * k ; } Độ phức tạp? Luyện tập for (i = 0; I < n; I ++) for (j = 0; j < m; j ++) { int x = 0; for (k = 0; k < n; k ++) x = x + k; for (k = 0; k < m; k++) x = x +k; } Độ phức tạp? MỘT SỐ LƯU Ý  Nếu toán có thuật giải với thời gian chạy xấu đa thức, m O(n ), tốn gọi giải tốt  Nếu tốn khơng có thuật giải với thời gian chạy xấu đa thức tốn gọi khó giải (intractable problem)  Nếu tốn khó đến mức khơng thể xây dựng thuật giải gọi khơng giải (unsolvable problem)  Phân tích độ phức tạp chủ yếu dựa kỹ thuật đếm biểu diễn hệ thức truy hồi  Có hai phương pháp để giải hệ thức truy hồi: Thay lặp áp dụng trực tiếp cơng thức tốn học  Phân tích trường hợp trung bình thường phức tạp cần thêm cơng cụ tốn học lý thuyết xác suất, hàm sinh  Trong nhiều trường hợp cần tính thời gian chạy xấu ... n*Factorial(n -1 ) VÍ DỤ  Gọi T(n) thời gian chạy thuật giải O (1) , n=0, T(n)= T(n -1 ) +O (1) , n >1 T(n) = T(n -1 ) + c = T(n-2)+c +c =T(n-2) + 2c = T(n-3)+c + 2c = T(n-3) + 3c … = T(n-(n -1 ) ) + (n -1 ) c = T (1) +... + 2n + 13 n + =1) f(n) = O(n ) Tổng quát f(n) đa thức bậc k n: k k -1 k f(n) = akn + ak-1n + + a1n + a0 f(n) = O(n ) Quy Tắc  QUY TẮC CỘNG: Nếu đoạn chương. .. (best-case) giải thuật • Thời gian nhiều để thực giải thuật với kích thước đầu vào n gọi thời gian chạy xấu (worst-case) giải thuật • Thời gian trung bình để thực giải thuật với kích thước đầu vào

Ngày đăng: 21/05/2021, 13:39

Mục lục

  • Slide 1

  • Slide 2

  • Slide 3

  • Slide 4

  • Slide 5

  • Ví dụ

  • Slide 7

  • Ví dụ

  • Slide 9

  • Slide 10

  • ĐỘ PHỨC TẠP THUẬT TOÁN

  • ĐỘ PHỨC TẠP THUẬT TOÁN

  • ĐỘ PHỨC TẠP THUẬT TOÁN

  • Ví dụ

  • Slide 15

  • BIỂU DIỄN THỜI GIAN CHẠY BỞI KÝ HIỆU O

  • Slide 17

  • Quy Tắc

  • Độ phức tạp (tăng dần)

  • VÍ DỤ

Tài liệu cùng người dùng

Tài liệu liên quan