Wiki Cấu trúc dữ liệu

Cấu trúc dữ liệu

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

Cấu trúc dữ liệu quyết định bạn truy vấn và cập nhật dữ liệu nhanh đến đâu — chọn đúng cấu trúc thường biến một lời giải O(N2) thành O(NlogN). Mục này đi từ các cấu trúc nền tảng đến những cấu trúc nâng cao phục vụ truy vấn đoạn và bài toán khó.

Nền tảng

Cấu trúc thường dùng

  • Bảng băm — tra cứu key–value trong O(1) trung bình (unordered_map, dict).
  • Disjoint Set Union (DSU) — quản lý các tập rời nhau, gần như O(1); nền của Kruskal và đếm thành phần liên thông.

Cây (nhóm lớn)

  • Cây — trang chủ đề gồm nhiều cấu trúc cây: BST, Heap, Fenwick Tree, Segment Tree (và các biến thể bền vững / beats), Treap, Trie, HLD, Centroid Decomposition, Link-Cut Tree... Đây là kho cấu trúc truy vấn đoạn quan trọng nhất.

Truy vấn đoạn & nâng cao

  • Sparse Table (RMQ) — truy vấn min/max trên đoạn trong O(1) với mảng tĩnh.
  • Monotonic Stack và Deque — duy trì tính đơn điệu để tìm "phần tử lớn/nhỏ hơn gần nhất" và min/max cửa sổ trượt.
  • Sqrt Decomposition — chia khối N cho truy vấn/cập nhật đoạn linh hoạt.
  • Mo's Algorithm — xử lý offline nhiều truy vấn đoạn trong O((N+Q)N).
  • Bitset Optimization — tăng tốc các phép trên tập bit lên N/64 lần.

Gợi ý thứ tự học

Bắt đầu từ nhóm Nền tảngCấu trúc thường dùng, sau đó vào nhóm Cây (đặc biệt Fenwick & Segment Tree), rồi mới đến các cấu trúc truy vấn đoạn nâng cao.

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