0% found this document useful (0 votes)
49 views2 pages

Queue

Uploaded by

trung241az
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
49 views2 pages

Queue

Uploaded by

trung241az
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

1.

Queue (Hàng đợi)


Lý thuyết:
 Cách hoạt động: Queue là một cấu trúc dữ liệu hoạt động theo
nguyên tắc FIFO (First In, First Out), nghĩa là phần tử được
thêm vào trước sẽ được lấy ra trước.
 Cấu trúc trong C++: Queue được hiện thực trong C++ bằng
cách sử dụng thư viện <queue>.
Các thao tác trên Queue:
 push(x): Thêm phần tử x vào cuối hàng đợi. Độ phức tạp: O(1).
 pop(): Xóa phần tử ở đầu hàng đợi. Độ phức tạp: O(1).
 front(): Truy cập phần tử ở đầu hàng đợi mà không xóa. Độ
phức tạp: O(1).
 back(): Truy cập phần tử ở cuối hàng đợi. Độ phức tạp: O(1).
 empty(): Kiểm tra xem hàng đợi có rỗng không. Độ phức tạp:
O(1).
 size(): Trả về số phần tử trong hàng đợi. Độ phức tạp: O(1).
Ứng dụng trong các thuật toán và dạng bài cụ thể:
 Thuật toán BFS (Breadth-First Search): Sử dụng queue để
duyệt các đỉnh của đồ thị theo lớp, thường dùng để tìm đường
đi ngắn nhất trong đồ thị không trọng số.
 Giải bài toán Josephus: Mô phỏng quá trình loại bỏ người khỏi
vòng tròn.
 Duyệt cây: Duyệt cây theo cấp độ (level-order traversal) trong
cây nhị phân.
2. Deque (Hàng đợi hai đầu)
Lý thuyết:
 Cách hoạt động: Deque (Double-ended queue) là một cấu trúc
dữ liệu cho phép thêm và xóa phần tử ở cả hai đầu của hàng
đợi.
 Cấu trúc trong C++: Deque được hiện thực trong C++ bằng
cách sử dụng thư viện <deque>.
Các thao tác trên Deque:
 push_front(x): Thêm phần tử x vào đầu hàng đợi. Độ phức tạp:
O(1).
 push_back(x): Thêm phần tử x vào cuối hàng đợi. Độ phức tạp:
O(1).
 pop_front(): Xóa phần tử ở đầu hàng đợi. Độ phức tạp: O(1).
 pop_back(): Xóa phần tử ở cuối hàng đợi. Độ phức tạp: O(1).
 front(): Truy cập phần tử ở đầu hàng đợi mà không xóa. Độ
phức tạp: O(1).
 back(): Truy cập phần tử ở cuối hàng đợi. Độ phức tạp: O(1).
 empty(): Kiểm tra xem hàng đợi có rỗng không. Độ phức tạp:
O(1).
 size(): Trả về số phần tử trong hàng đợi. Độ phức tạp: O(1).
Ứng dụng trong các thuật toán và dạng bài cụ thể:
 Sliding Window Maximum: Sử dụng deque để tìm giá trị lớn
nhất trong một cửa sổ trượt trên mảng.
 Thuật toán BFS trên lưới: Khi sử dụng deque, có thể tối ưu hóa
việc duyệt bằng cách thêm điểm vào đầu hoặc cuối của deque
dựa trên khoảng cách.
 Bài toán deque tối ưu (Deque Optimization): Sử dụng deque để
tối ưu hóa các bài toán động liên quan đến việc chọn các trạng
thái tốt nhất.
3. Priority Queue (Hàng đợi ưu tiên)
Lý thuyết:
 Cách hoạt động: Priority Queue là một hàng đợi mà trong đó
mỗi phần tử có một "độ ưu tiên". Phần tử có độ ưu tiên cao
nhất sẽ được xử lý trước, bất kể thứ tự thêm vào.
 Cấu trúc trong C++: Priority Queue được hiện thực trong C++
bằng cách sử dụng thư viện <queue>. Mặc định, priority queue
trong C++ là một max-heap, có nghĩa là phần tử lớn nhất sẽ
được xử lý trước.
Các thao tác trên Priority Queue:
 push(x): Thêm phần tử x vào hàng đợi với độ ưu tiên xác định.
Độ phức tạp: O(log n).
 pop(): Xóa phần tử có độ ưu tiên cao nhất (phần tử đứng đầu).
Độ phức tạp: O(log n).
 top(): Truy cập phần tử có độ ưu tiên cao nhất mà không xóa.
Độ phức tạp: O(1).
 empty(): Kiểm tra xem hàng đợi có rỗng không. Độ phức tạp:
O(1).
 size(): Trả về số phần tử trong hàng đợi. Độ phức tạp: O(1).
Ứng dụng trong các thuật toán và dạng bài cụ thể:
 Thuật toán Dijkstra: Sử dụng priority queue để tìm đường đi
ngắn nhất trong đồ thị có trọng số dương.
 Thuật toán A:* Sử dụng priority queue để tìm đường đi ngắn
nhất trong các bài toán tìm kiếm trên không gian trạng thái.

You might also like