Thuật toán và Lập trình thi đấu

Giới thiệu

Chuyên mục này trình bày các thuật toán và kỹ thuật lập trình thường gặp trong thi đấu lập trình (competitive programming). Nội dung được sắp xếp từ đơn giản đến phức tạp, từ các thuật toán cơ bản đến các kỹ thuật nâng cao. Mọi ví dụ đều dùng Python — ngôn ngữ có cú pháp ngắn gọn, phù hợp để nắm vững ý tưởng thuật toán.

Yêu cầu tiên quyết

Trước khi bắt đầu, bạn nên đã nắm vững:

Lộ trình học theo cấp độ

Cấp 1 — Nền tảng

Cấp 2 — Trung cấp

Cấp 3 — Nâng cao

Ví dụ minh hoạ tổng quan

Dưới đây là ví dụ nhanh về cách áp dụng thuật toán: tìm kiếm một giá trị trong danh sách và kiểm tra xem danh sách có được sắp xếp không.

def linear_search(arr, target):
    for i, val in enumerate(arr):
        if val == target:
            return i
    return -1

def is_sorted(arr):
    return all(arr[i] <= arr[i + 1] for i in range(len(arr) - 1))

data = [5, 2, 8, 1, 9, 3]
print(linear_search(data, 8))   # 2 (vị trí index 2)
print(is_sorted(data))          # False
print(is_sorted(sorted(data)))  # True

Chủ đề liên quan

  • Lý thuyết đồ thị — Nánh kiến thức tiếp nối DFS/BFS; học sâu về đường đi ngắn nhất, MST và Union-Find.
  • Hàm — Đệ quy — Nhiều thuật toán chia để trị và DFS đệ quy trong mục này dựa vào kỹ thuật đệ quy.
  • Cấu trúc dữ liệu — Chọn đúng cấu trúc dữ liệu thường quyết định hiệu quả của thuật toán.

Bình luận