GIẢI THÍCH MỘT SỐ DẠNG BIG O: O(LOGN) Đây là một độ phức tạp điển hình, có rất nhiều trong các dạng cấu trúc dữ liệu và giải thuật cơ bản. Nắm được cách tính độ phức tạp O(logn) của các thuật toán sẽ giúp bạn tự tin hơn được 50% trong hầu hết các dạng big O. Trước khi bắt đầu bài viết, mình muốn các bạn cần tìm hiểu qua về hai bài viết cũ của mình về Big O là gì và cách tính độ phức tạp của Big O cho hàm đệ quy. Bạn tham khảo qua hai bài viết sau:
[AUTOBOXING TRONG JAVA] Boxing, unboxing là một khái niệm liên quan giữa kiểu nguyên thủy (primitive type) và các lớp bao (Wrapper) tương ứng. Hiểu đơn giản, boxing là chuyển đổi từ kiểu nguyên thủy thành lớp bao, unboxing là chuyển từ lớp bao về kiểu nguyên thủy. Để hiểu rõ vấn đề hơn, hãy xem ví dụ dưới. Giả dụ ta muốn tạo một Collection với kiểu nguyên, ta bắt buộc phải dùng lớp Integer vì Collection không chấp nhận kiểu dữ liệu nguyên thủy. Sau khi tạo Collection, khi ta muốn lấy giá trị Integer ra là một kiểu nguyên thủy int, ta phải lấy nó ra dưới dạng một thể hiện của Integer, và dùng hàm intValue để unboxing các thể hiện của Integer thành kiểu nguyên thủy int. Việc boxing và unboxing liên tục trong dòng code khiến cho việc viết code trở nên rắc rối, chính vì thế kể từ Java 1.5 trở đi, khái niệm Autoboxing ra đời. Sự xuất hiện của autoboxing giúp người dùng làm mờ đi khoảng cách giữa lớp bao và kiểu nguyên thủy, khi nó có thể tự động chuyển đổi qua lại với nhau, nhưng họ v...