Các Thuật Toán, Cấu Trúc Dữ Liệu và Mẫu Thiết Kế Cơ Bản trong Java
1-1. Tìm kiếm nhị phân
Mô tả thuật toán
Tìm kiếm nhị phân là một thuật toán hiệu quả để tìm kiếm một giá trị cụ thể trong một mảng đã được sắp xếp. Nguyên tắc hoạt động của nó dựa trên việc liên tục chia đôi không gian tìm kiếm. Các bước cơ bản bao gồm:
**Điều kiện tiên quyết**: Mảng đầu vào phải được sắp xếp (ví dụ, theo thứ tự tăng dần) ...
Đăng vào ngày 21 tháng 5 lúc 01:26
Chiến lược tối ưu hóa mã C++ bởi trình biên dịch
Trong phần này, chúng ta sẽ tìm hiểu về các thuật toán không sửa đổi và sửa đổi chuỗi, cũng như các thuật toán sắp xếp và các thuật toán khác trong thư viện chuẩn C++.
1. Thuật toán không sửa đổi chuỗi
Các thuật toán này không thay đổi các phần tử của vùng nhớ mà chúng hoạt động.
1.1 find và find_if
find(bắt_đầu, kết_thúc, giá_trị): Tìm phần t ...
Đăng vào ngày 20 tháng 5 lúc 12:24
Giải Pháp Tối Ưu Cho Các Bài Toán Thuật Toán Phỏng Vấn Kỹ Thuật
1. Tính Toán Tổng Dãy Số Với Chu Kỳ Đảo Dấu
Bài toán yêu cầu tính tổng của một dãy số nguyên dương liên tiếp từ 1 đến n, trong đó dấu của các số được thay đổi theo chu kỳ. Cụ thể, cứ mỗi m số thì dấu sẽ được đảo ngược một lần, bắt đầu với dấu âm. Điều kiện tiên quyết là n phải chia hết cho 2m.
Thay vì sử dụng vòng lặp để duyệt qua từng phần tử ...
Đăng vào ngày 20 tháng 5 lúc 08:06
Tìm kiếm nhị phân
Phân loại tìm kiếm
Tìm kiếm tuần tự: So sánh lần lượt phần tử cần tìm với toàn bộ dữ liệu đã có, nếu trùng khớp thì trả về vị trí.
Tìm kiếm nhị phân: Yêu cầu dữ liệu phải được sắp xếp (tăng hoặc giảm). Nếu không sắp xếp sẽ không thể thực hiện!
Cơ chế hoạt động
Tìm kiếm nhị phân hoạt động dựa trên nguyên lý chia để trị:
Xác định giá trị giữa ...
Đăng vào ngày 19 tháng 5 lúc 13:13
Giải quyết các bài toán thuật toán phổ biến bằng kỹ thuật Hai con trỏ
Kỹ thuật hai con trỏ (Two-Pointer) là một trong những phương pháp tối ưu nhất để xử lý các bài toán trên mảng hoặc chuỗi. Thay vì sử dụng các vòng lặp lồng nhau gây tốn kém về thời gian (O(n²)), hai con trỏ giúp đưa độ phức tạp về O(n). Dưới đây là cách áp dụng kỹ thuật này vào các bài toán thực tế.
1. Loại bỏ phần tử (LeetCode 27)
Bài toán yê ...
Đăng vào ngày 17 tháng 5 lúc 21:51
Phân tích lời giải các bài toán trong cuộc thi ACM/ICPC Qingdao Online
Bài toán: I Count Two Three
Cho trước số nguyên n, nhiệm vụ là tìm số nguyên nhỏ nhất k sao cho k >= n và k có dạng 2^a * 3^b * 5^c * 7^d. Với n
Đăng vào ngày 17 tháng 5 lúc 12:52
Ghi Chép Bài Tập Tháng 10
### CF1879F *2800 ★
Giá trị của một điểm được tính bằng h_i * ceil(a_i / x).
Bước đầu tiên là sử dụng phương pháp phân đoạn trực tiếp, chia thành sqrt(n) khoảng và duyệt qua từng khoảng sẽ có độ phức tạp là O(Tn * sqrt(a_i)).
Tuy nhiên không có bảo đảm về tổng n, nên ta cần tìm cách sử dụng log.
Nhớ lại chuỗi điều hòa, khi liệt kê x, các phần t ...
Đăng vào ngày 17 tháng 5 lúc 10:36