Wiki › Độ phức tạp › Ước lượng giới hạn bài toán

Ước lượng giới hạn bài toán

huunguyen huunguyen Updated Tháng tư 3, 2026 Đọc 2 phút 5 lượt xem

Một trong những kỹ năng quan trọng nhất: nhìn vào ràng buộc của bài và biết ngay cần thuật toán có độ phức tạp bao nhiêu.

Quy tắc vàng

Máy tính hiện đại thực hiện khoảng 108 — 109 phép tính đơn giản mỗi giây. Với time limit 1 giây, số phép tính tối đa khoảng 108.

Bảng tra cứu nhanh

Ràng buộc N Độ phức tạp tối đa Thuật toán gợi ý
N≤10 O(N!) Duyệt hoán vị
N≤20 O(2N) hoặc O(2N·N) Bitmask DP
N≤100 O(N3) Floyd-Warshall, DP bậc 3
N≤1000 O(N2) DP bậc 2, brute force
N≤105 O(NlogN) hoặc O(N) Sort, BFS/DFS, Segment Tree
N≤106 O(N) hoặc O(NlogN) Linear scan, prefix sum
N≤109 O(N) hoặc O(logN) Tìm kiếm nhị phân, math
N≤1018 O(logN) Tìm kiếm nhị phân, fast power

Ví dụ thực tế

Ràng buộc: N≤2×105, time limit 1 giây.

O(N2) → 4×1010 phép tính → quá chậm ❌
O(NlogN) → ≈3.4×106 phép tính → ổn ✓

Ràng buộc: N≤500, time limit 2 giây.

O(N3) → 1.25×108 phép tính → vừa đủ ✓

Cẩn thận với hằng số

Big-O bỏ qua hằng số, nhưng trong thực tế hằng số quan trọng:

  • Thao tác với unordered_map trong C++ tuy O(1) nhưng hằng số lớn.
  • Python chậm hơn C++ khoảng 10-50 lần → với Python cần ước lượng thêm.

Ước lượng cho Python

Time limit C++ tối đa Python tối đa
1 giây 108 107
2 giây 2×108 2×107

Quy trình khi đọc đề

  1. Đọc ràng buộc N.
  2. Tra bảng → xác định độ phức tạp cần thiết.
  3. Nghĩ thuật toán phù hợp.
  4. Ước lượng chính xác hơn nếu cần.
Trang này có hữu ích không? Đăng nhập để trả lời

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0