Chuyển đến nội dung chính

GIẢI THÍCH MỘT SỐ DẠNG BIG O: O(LOGN)

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:

Stack, Queue và Priority trong Java (phần 2)


Stack, Queue và Priority trong Java (phần 2)
Phần 2: Queue
Queue là gì?
Queue là một cách thức lưu trữ và lấy dữ liệu theo kiểu hàng đợi. Bạn có thể tưởng tượng 1 hàng người đi mua vé, ai tới trước thì sẽ mua vé và ra trước
Bạn có 5 người đang đứng đợi mua vé theo thứ tự từ trái sang lần lượt là 1, 2, 3, 4, 5. Người thứ 1 vào trước, người thứ 2 vào sau người thứ 1 và cứ như thế


Khi đi ra, người thứ 1 (đi trước) sẽ là người ra trước, người thứ 2 sẽ đi ra thứ 2 và như thế

Các bạn để ý một số điểm đặc biệt như sau
Người vào trước (first) sẽ là người ra trước (first). Vì thế nó còn gọi là FIFO (First In First Out)
Đứa chạy đầu tiên sẽ đặt vào vị trí front (trước), cho tới đứa chạy cuối cùng sẽ đặt vào vị trí sau (rear)
Trong lập trình, người ta sử dụng nó để giải quyết một số bài toán đặc trưng
Trong Java, có hỗ trợ một lớp Queue dùng để thực hiện kiểu lưu trữ và lấy thông tin như thế này
Queue trong Java
Queue trong Java nằm trong bộ Collection, là một interface. Để sử dụng, ta cần phải thông qua lớp của nó. Có 2 lớp implement interface này, đó là LinkedList và PriorityQueue. Trong phần này mình sẽ dùng LinkedList
Khai báo
Queue<Type> obj = new LinkedList<Type>();
Cách tương tác với các phần tử như sau:

add(): đưa phần tử vào trong queue, theo kiểu của queue – đưa vào cuối danh sách queue
remove(): đưa phần tử ra ngoài queue, theo kiểu của queue – trả về một giá trị tại vị trí nằm ở đầu danh sách queue, và xóa phần tử đó trong danh sách queue
peek(): xem (trả về) phần tử đầu tiên trong danh sách queue
          *Hàm peek() không xóa phần tử đầu tiên như remove()
Mình nghĩ ba hàm này cũng đủ xài rồi, các bạn thử thực hành trên eclipse để hiểu hơn (mình sẽ không ví dụ nữa). Một số hàm khác các bạn có thể đọc tham khảo, sợ viết nhiều quá đọc vào thấy hoang mang.
Nội dung bài viết thuộc về Lê Công Diễn.

Người viết: Lê Công Diễn
Mang đi nhớ ghi nguồn




Nhận xét

Bài đăng phổ biến từ blog này

TÔI DÀNH 3 NGÀY ĐÁNH GIÁ THỊ TRƯỜNG CNTT CUỐI NĂM 2024 CHO BẠN.

  TÔI DÀNH 3 NGÀY ĐÁNH GIÁ THỊ TRƯỜNG CNTT CUỐI NĂM 2024 CHO BẠN.   CNTT là một ngành được xem là “xu thế” trong thời đại hiện nay, với lượng nhu cầu công việc nhiều cũng như mức lương trung bình cao hơn so với các ngành khác. Tuy nhiên trong những năm trở lại đây, ngành đang có nhiều dấu hiệu tụt dốc, tiêu biểu như làn sóng layoff (sa thải) trong năm 2023 cực lớn. Chúng ta cùng đánh giá thị trường hiện nay để đưa ra hướng đi phù hợp nhé.

GIẢI THÍCH MỘT SỐ DẠNG BIG O: O(LOGN)

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:

Ứng dụng Mã hóa bất đối xứng (Asymmetric cryptography) vào Chữ ký số (Digital Signature)

         Ứng dụng Mã hóa bất đối xứng (Asymmetric cryptography) vào Chữ ký số (Digital Signature) Chữ ký số (Digital Signature) là gì? Nhắc đến chữ ký, chắc hẳn ai cũng sẽ nghĩ đến hình chữ nguệch ngoạc mà ta thường hay sử dụng trong văn bản. Chữ ký số liệu có phải như vậy?