Bài giảng Cấu trúc dữ liệu và giải thuật: Phân tích độ phức tạp của giải thuật cung cấp cho người học các kiến thức về chi phí của giải thuật, độ phức tạp của giải thuật, Big-O,. nội dung chi tiết. | Bài giảng Cấu trúc dữ liệu và giải thuật: Phân tích độ phức tạp của giải thuật - Nguyễn Tri Tuấn Cấu trúc dữ liệu & Giải thuật (Data Structures and Algorithms) Phân tích độ phức tạp của giải thuật Nguyễn Tri Tuấn Khoa CNTT – Email: nttuan@ LOGO Thuật ngữ Chi phí (cost) Độ phức tạp (complexity) Phân tích độ phức tạp (complexity analysis) 2/38 Nội dung 1 Chi phí của giải thuật 2 Độ phức tạp của giải thuật 3 Big-O, Big- , Big- 3 Chi phí của giải thuật (1) Tính tổng n số nguyên: sum = 0; for (i = 0; i < n; i++) sum += i; Giải thuật Bubble sort: for (i = n-1; i > 0; i--) for (j = 1; j a[j]) { temp = a[j-1]; a[j-1] = a[j]; a[j] = temp; } 4 Chi phí của giải thuật (2) Cùng một vấn đề, có thể giải quyết bằng nhiều giải thuật khác nhau VD. Sắp xếp mảng Bubble sort, Heap sort, Quick sort, Mỗi giải thuật có chi phí (cost) khác nhau Chi phí thường được tính dựa trên: thời gian (time) bộ nhớ (space/memory) Chi phí “thời gian” thường được quan tâm nhiều hơn 5 Chi phí của giải thuật (3) Tuy nhiên, việc dùng khái niệm “thời gian” theo nghĩa đen (vd. giải thuật A chạy trong 10s) là không ổn, vì: tuỳ thuộc vào loại máy tính (vd. máy Dual-Core sẽ chạy nhanh hơn Pentium II) tuỳ thuộc ngôn ngữ lập trình (vd. Giải thuật viết bằng C/Pascal có thể chạy nhanh gấp 20 lần viết bằng Basic/LISP) Do đó, người ta thường dùng “đơn vị đo logic” (vd. số phép tính cơ sở) thay cho đơn vị đo “thời gian thật” (mili-giây, giây, ) VD. Chi phí để sắp xếp mảng n phần tử bằng giải thuật Bubble sort là n2 (phép tính