Cây nhị phân
Các thuật toán phổ biến:
Tìm độ sâu tối đa của cây nhị phân.
Tìm độ sâu tối thiểu của cây nhị phân.
Duyệt theo mức của cây nhị phân.
Duyệt trước của cây nhị phân.
Duyệt giữa của cây nhị phân.
Duyệt sau của cây nhị phân.
Đếm số lượng nút trong cây nhị phân.
Đếm số lượng nút lá trong cây nhị phân.
Kiểm tra cây nhị phân có phải là cây cân bằng ha ...
Đăng vào ngày 21 tháng 6 lúc 08:06
Tìm kiếm nhị phân trong C++
Điều kiện áp dụng tìm kiếm nhị phân
Thuật toán tìm kiếm nhị phân chỉ hoạt động hiệu quả trên các cấu trúc dữ liệu đã được sắp xếp sẵn. Điều kiện tiên quyết là mảng phải có tính chất đơn điệu, cụ thể là đơn điệu không giảm hoặc đơn điệu không tăng.
Đơn điệu không giảm: Các phần tử tăng dần nhưng cho phép các phần tử liền kề bằng nhau
Đơn điệu ...
Đăng vào ngày 19 tháng 6 lúc 21:56
Thuật toán xây dựng bảng ảo phương bậc lẻ
Mô tả bài toán
Bảng ảo phương kích thước N × N là một ma trận chứa các số nguyên liên tiếp từ 1 đến N² sao cho tổng các phần tử trên mọi hàng, mọi cột và hai đường chéo chính luôn bằng nhau. Khi kích thước N là số lẻ, việc lấp đầy ma trận này có thể được thực hiện tự động bằng một quy tắc dịch chuyển tọa độ chặt chẽ.
Phân tích thuật toán
Thay ...
Đăng vào ngày 15 tháng 6 lúc 20:43
Bài toán N Hậu
Bài toán N Hậu
Độ khó: Khó
Theo quy tắc cờ vua, quân hậu có thể tấn công các quân khác nằm cùng hàng, cùng cột hoặc cùng đường chéo.
Bài toán N Hậu nghiên cứu cách đặt n quân hậu lên bàn cờ kích thước n×n sao cho chúng không thể tấn công lẫn nhau.
Cho một số nguyên n, hãy trả về tất cả các cách đặt hậu khác nhau thỏa mãn điều kiện trên.
Mỗi giả ...
Đăng vào ngày 15 tháng 6 lúc 00:42
Bài tập thực hành con trỏ C++ - Xử lý chuỗi ký tự
Bài 1: Loại bỏ khoảng trắng ở đầu và cuối chuỗi
#include <iostream>
using namespace std;
char* xoaKhoangTrang(char* chuoi);
int main()
{
char s[1024]; // Khai báo mảng ký tự một chiều để lưu chuỗi
// Nhập một dòng ký tự, có thể chứa khoảng trắng
// Chuỗi nhập được lưu vào s, đọc tối đa 1024 ký tự, tự động thêm '\0' ở cuối
...
Đăng vào ngày 12 tháng 6 lúc 20:59
Giải thuật xử lý danh sách liên kết: Đảo ngược, hợp nhất và phát hiện chu trình
Đảo ngược danh sách liên kết
Một cách hiệu quả để đảo ngược danh sách liên kết là sử dụng kỹ thuật chèn đầu. Ta duyệt qua từng nút trong danh sách gốc, tách từng nút ra và chèn vào đầu danh sách mới. Trong quá trình này, cần lưu trữ con trỏ đến nút kế tiếp trước khi thay đổi liên kết.
struct ListNode* reverseList(struct ListNode* head) {
s ...
Đăng vào ngày 12 tháng 6 lúc 20:14
Kỹ thuật Hai Con trỏ và Ứng dụng trong Thuật toán
Tổng quan về kỹ thuật hai con trỏ
Kỹ thuật hai con trỏ (Two Pointers) là một phương pháp tối ưu hóa thuật toán hiệu quả, giúp giảm độ phức tạp thời gian trong nhiều bài toán. Thay vì sử dụng vòng lặp lồng nhau với độ phức tạp $O(n^2)$, ta sử dụng hai biến chỉ số (con trỏ) để duyệt qua cấu trúc dữ liệu, thường là mảng hoặc danh sách liên kết.
Cá ...
Đăng vào ngày 12 tháng 6 lúc 08:58
Hướng dẫn toàn diện về các thuật toán STL trong C++
1. Các thuật toán không thay đổi dãy
Các thuật toán này không sửa đổi các phần tử trong container mà chúng hoạt động.
1.1 find và find_if
find(begin, end, value): Tìm phần tử đầu tiên bằng value, trả về iterator (nếu không tìm thấy trả về end).
find_if(begin, end, predicate): Tìm phần tử đầu tiên thỏa mãn điều kiện.
find_end(begin, end, sub_be ...
Đăng vào ngày 12 tháng 6 lúc 07:43
Kỹ thuật xử lý mảng và ma trận tối ưu không gian trong lập trình giải thuật
1. Tích của mảng ngoại trừ chính nó (Product of Array Except Self)
Bài toán yêu cầu tính toán một mảng kết quả answer sao cho answer[i] bằng tích của tất cả các phần tử trong mảng đầu vào ngoại trừ phần tử tại vị trí i. Ràng buộc quan trọng là không được sử dụng phép chia và thuật toán phải chạy trong độ phức tạp thời gian O(n).
Giải pháp tối ...
Đăng vào ngày 11 tháng 6 lúc 07:46
Các bài toán NOI 2026 - Ghi chú giải bài
A. [QOJ5099] Đường hành hương (1)
Giải bài toán bằng cách sử dụng định lý tổ hợp và thuật toán Ex-Lucas để tính toán hiệu quả. Công thức tổ hợp được biểu diễn dưới dạng tổng các tổ hợp chập i của 2n phần tử, với điều kiện i > n. Độ phức tạp thời gian là O(ω(p)log p), trong đó ω(p) là số lượng số nguyên tố nhỏ hơn p.
#include<bits/stdc++.h&g ...
Đăng vào ngày 11 tháng 6 lúc 05:00