~/longn.dev — blog.md
Home.tsxBlog.mdProjects.jsonApps & Tools.yml
← Quay về Blog

Kiến thức

Tối ưu vòng lặp trong xử lý dữ liệu lớn

📅 02/07/2025

Giới thiệu

Khi làm việc với tập dữ liệu lớn (hàng triệu dòng), hiệu suất vòng lặp trở nên cực kỳ quan trọng. Bài viết này chia sẻ một vài mẹo nhỏ mình học được.

1. Tránh vòng lặp lồng nhau

Vòng lặp lồng nhau O(n²) là kẻ thù số một. Hãy cân nhắc dùng hash map để tra cứu:

# ❌ Chậm — O(n²)
for item in list_a:
    for other in list_b:
        if item.id == other.id:
            process(item, other)

# ✅ Nhanh — O(n)
lookup = {item.id: item for item in list_b}
for item in list_a:
    if item.id in lookup:
        process(item, lookup[item.id])

2. Dùng Generator thay List

Khi không cần toàn bộ kết quả cùng lúc, generator tiết kiệm bộ nhớ:

# ❌ Tốn bộ nhớ
results = [process(x) for x in huge_list]

# ✅ Tiết kiệm bộ nhớ
results = (process(x) for x in huge_list)

3. Vectorization với NumPy

Với dữ liệu số, NumPy nhanh hơn Python thuần rất nhiều:

import numpy as np

# ❌ Python loop
total = sum(x ** 2 for x in data)

# ✅ NumPy vectorization (nhanh gấp 100x)
total = np.sum(np.array(data) ** 2)

Kết luận

Tối ưu vòng lặp không khó, chỉ cần nhớ 3 nguyên tắc: giảm complexity, tiết kiệm bộ nhớ, và dùng thư viện chuyên dụng.

Bình luận sẽ được bật qua Giscus (GitHub Discussions). Cấu hình tại components/Giscus.js — lấy repoIdcategoryId từ giscus.app.