Hiệu Suất Thuật Toán và Cấu Trúc Dữ Liệu

So Sánh Hiệu Suất Thuật Toán

from time import perf_counter

start = perf_counter()
for x in range(1001):
    for y in range(1001):
        for z in range(1001):
            if x + y + z == 1000 and x*x + y*y == z*z:
                print(f"x, y, z: {x}, {y}, {z}")
                
end = perf_counter()
print(f"Thời gian: {end - start:.4f} giây")

Kết Quả Thực Thi

x, y, z: 0, 500, 500
x, y, z: 200, 375, 425
x, y, z: 375, 200, 425
x, y, z: 500, 0, 500
Thời gian: 286.512 giây

Cải Tiến Thuật Toán

start = perf_counter()
for x in range(1001):
    for y in range(1001):
        z = 1000 - x - y
        if x*x + y*y == z*z:
            print(f"x, y, z: {x}, {y}, {z}")

end = perf_counter()
print(f"Thời gian: {end - start:.4f} giây")

Kết Quả Tối Ưu

x, y, z: 0, 500, 500
x, y, z: 200, 375, 425
x, y, z: 375, 200, 425
x, y, z: 500, 0, 500
Thời gian: 0.812 giây

Khái Niệm Thuật Toán

Thuật toán là phương pháp giải quyết vấn đề độc lập với ngôn ngữ lập trình.

Đặc Tính Cơ Bản:

  • Đầu vào xác định
  • Đầu ra rõ ràng
  • Tính hữu hạn
  • Tính xác định
  • Tính khả thi

Đo Lường Hiệu Suất

Độ phức tạp thời gian biểu thị số lượng thao tác cơ bản:

T1 = O(n³)
T2 = O(n²)

Chỉ xét số mũ cao nhất, bỏ qua hệ số hằng số.

Phân Loại Độ Phức Tạp:

  • Trường hợp tốt nhất
  • Trường hợp xấu nhất
  • Trường hợp trung bình

Phân Tích Hiệu Suất Trong Python

from timeit import Timer

def test_concatenate():
    result = []
    for i in range(10000):
        result = result + [i]

def test_append():
    result = []
    for i in range(10000):
        result.append(i)

# Các phương pháp khác: list comprehension, constructor, extend, insert

timer = Timer("test_concatenate()", globals=globals())
print("Nối list:", timer.timeit(1000))

timer = Timer("test_append()", globals=globals())
print("Append:", timer.timeit(1000))

Kết Quả So Sánh

Nối list: 1.92 giây
Append: 0.48 giây
List comprehension: 0.31 giây
Hàm tạo: 0.15 giây
Extend: 0.87 giây
Insert: 41.85 giây

Cấu Trúc Dữ liệu

Mô tả quan hệ tĩnh giữa các phần tử dữ liệu. Chương trình = Cấu trúc dữ liệu + Thuật toán.

Kiểu dữ liệu trừu tượng (ADT) bao gồm cách tổ chức dữ liệu và các thao tác hỗ trợ.

Thẻ: thuật toán python Độ phức tạp thời gian tối ưu hóa Cấu trúc dữ liệu

Đăng vào ngày 14 tháng 6 lúc 06:15