Search posts

Search blog posts by title, summary, tags, or content.

Giới thiệu độ phức tạp của thuật toán Big O

Giới thiệu về độ phức tạp của thuật toán Big O

2 min read
Authors
Table of Contents

1. Giới thiệu

Tại sao phải tối ưu hóa độ phức tạp của thuật toán?

Big O

Figure 1: Big O

Đơn giản vì độ phức tạp thấp thì sản phẩm của bạn sẽ chạy mượt mà hơn.

Độ phức tạp của thuật toán phụ thuộc vào mối quan hệ giữa số lượng phép tính cần thực hiện và số lượng đầu vào của hàm số.

2. Ví dụ

import time
start = time.time()
i = 0
n = 1000000

while i < n:
    print(i)
    i += 1

print("time: " +  str(time.time() - start))

Đối với đoạn code trên thì P(n)=3n+2O(n)P(n)=3n+2 \sim O(n)

Tại sao lại tính được như vậy?

import time
start = time.time()
i = 0 # phep gan +1
n = 1000000 # phep gan +1

while i < n: # phep so sanh +1
    print(i) # +1
    i += 1   # +1

# while n buoc -> (1+1+1)xn = 3n -> 3n + 2

print("time: " +  str(time.time() - start))

Thật dễ để hiểu đúng không?

Đến với vị dụ tiếp theo:

n = 10
x = 1
y = 2
# +3
for i in range(n): # phep so sanh i < n ? va phep i++ => +2
    for j in range(n): # phep so sanh j < n ? va phep j++ => +2
        x = x + 1 # +1
        y = y + 1 # +1
        # => 4n + 2
# => (4n + 2)xn
# => P(n) = 4n^2 + 2n + 3
# => O(n^2)
  • P(n)=4n2+2n+3O(n2)P(n) = 4n^2 + 2n + 3 \sim O(n^2)

Đối với đoạn code dưới đây thì sao?

n = 10
x = 1
y = 2
i = 1
# +4
while i < n: # phep so sanh +1 
    x = x + 1 # +1
    i *= 2 # +1
    print(x)
  • Do i *= 2 nên vòng while không duyệt nn lần mà duyệt log2(n)log_2(n)
  • P(n)=3log2(n)+4O(log2(n))P(n) = 3\log_{2}(n) + 4 \sim O(log_2(n))

NOTE

To be updated