Wiki Độ phức tạp

Độ phức tạp

huunguyen huunguyen Updated Tháng sáu 1, 2026

Trước khi viết code, người làm competitive programming luôn tự hỏi: "Thuật toán này chạy có kịp giới hạn thời gian không?". Phân tích độ phức tạp trả lời câu hỏi đó — ước lượng thời gian chạy và bộ nhớ theo kích thước đầu vào N, giúp bạn chọn đúng thuật toán trước khi mất công cài đặt.

Các trang trong mục này

Đọc theo thứ tự sau:

  1. Độ phức tạp thời gian (Big-O) — ký hiệu Big-O và cách ước lượng số phép tính khi N tăng. Nền tảng quan trọng nhất.
  2. Độ phức tạp không gian — ước lượng bộ nhớ theo N, tránh vượt Memory Limit.
  3. Ước lượng giới hạn bài toán — nhìn vào ràng buộc (N105, N20...) để đoán ngay độ phức tạp cần thiết. Kỹ năng "đọc đề ra hướng giải".

Mẹo nhanh

Với giới hạn ~1 giây, máy chấm xử lý được khoảng 108 phép tính đơn giản. Đối chiếu con số này với N để loại nhanh các hướng quá chậm — chi tiết trong trang Ước lượng giới hạn bài toán.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0