Làm cách nào để sử dụng Max Heap trong Java?

Lam Cach Nao De Su Dung Max Heap Trong Java



Lập trình viên có thể dễ dàng truy xuất phần tử tối đa bằng cách sử dụng “ đống tối đa ' Cây nhị phân. Như trong cây này, phần tử lớn nhất luôn nằm ở nút trên cùng của cây được gọi là “ nguồn gốc ' nút. Hơn nữa, nó cung cấp khả năng chèn và xóa các phần tử hiệu quả trong khi vẫn duy trì thứ tự được sắp xếp. Ngoài ra, một “Max Heap” có thể dễ dàng thực hiện các công việc đã lên lịch dựa trên mức độ ưu tiên của chúng hoặc các tiêu chí khác.

Bài viết này giải thích các nội dung sau:







Làm cách nào để sử dụng Max Heap trong Java?

MỘT ' đống tối đa ” được sử dụng làm cấu trúc dữ liệu cơ bản để triển khai hàng đợi ưu tiên. Trong hàng đợi ưu tiên, dữ liệu được xử lý dựa trên giá trị ưu tiên được chỉ định của chúng. Nó cũng có thể được sử dụng để sắp xếp các phần tử dữ liệu theo thứ tự giảm dần một cách hiệu quả.



Có thể tạo “Max Heap” bằng hai phương pháp được mô tả cùng với ví dụ về codec bên dưới:



Phương pháp 1: Sử dụng Phương pháp “maxHeapify()”

Các ' maxHeapify() ” phương pháp tạo ra một “ đống tối đa ” từ một bộ sưu tập các phần tử hiện có bằng cách chuyển đổi cấu trúc dữ liệu. Hơn nữa, phương pháp này giúp sửa đổi mảng ban đầu tại chỗ để giảm nhu cầu về bộ nhớ bổ sung.





Chẳng hạn, hãy truy cập mã bên dưới để tạo “ đống tối đa ” sử dụng phương thức “maxHeapify()”:

nhập java.util.ArrayList;
nhập java.util.Collections;
nhập java.util.List;

lớp công khai MaxHeapifyExam {
public tĩnh void main ( Sợi dây [ ] tranh luận ) // sáng tạo chính ( ) phương pháp
{
Danh sách < số nguyên > testsEle = ArrayList mới <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 3 ) ;
testEle.add ( số 8 ) ;
testEle.add ( 2 ) ;
testEle.add ( 1 ) ;
testEle.add ( 7 ) ;
System.out.println ( 'Danh sách gốc:' + kiểm tra ) ;
maxHeapify ( KIỂM TRA ) ;
System.out.println ( 'Số đống tối đa được tạo:' + kiểm tra ) ;
}

khoảng trống tĩnh riêng maxHeapify ( Danh sách < số nguyên > KIỂM TRA ) {
int k = testEle.size ( ) ;
( int tôi = k / 2 - 1 ; Tôi > = 0 ; Tôi-- ) {
chất thành đống ( kiểm traEle, k, tôi ) ;
}
}

khoảng trống tĩnh riêng heapify ( Danh sách < số nguyên > testsEle, int k, int i ) {
int lớn hơn = i;
int bên trái = 2 * tôi + 1 ;
int bên phải = 2 * tôi + 2 ;
nếu như ( bên trái < k && testEle.get ( bên trái ) > testEle.get ( lớn hơn ) ) {
lớn hơn = Bên trái;
}
nếu như ( bên phải < k && testEle.get ( bên phải ) > testEle.get ( lớn hơn ) ) {
lớn hơn = Bên phải;
}
nếu như ( lớn hơn ! = tôi ) {
Bộ sưu tập.swap ( testsEle, i, lớn hơn ) ;
chất thành đống ( testsEle, k, lớn hơn ) ;
}
}
}



Giải thích đoạn mã trên:

  • Đầu tiên, danh sách “ KIỂM TRA ” được khởi tạo với các phần tử dữ liệu giả trong phần “ chủ yếu() ” và được in trên bàn điều khiển.
  • Tiếp theo, danh sách “testEle” được chuyển đến hàm “maxHeapify()”, sau đó Danh sách trả về sẽ được hiển thị trên bảng điều khiển.
  • Sau đó, “ maxHeapify() ” được khởi tạo và kích thước của danh sách được cung cấp được truy xuất bằng cách sử dụng “ kích cỡ() ' phương pháp.
  • Tiếp theo, sử dụng “ ” vòng lặp để thiết lập cấu trúc heap và tính toán vị trí của từng nút.
  • Bây giờ, hãy sử dụng “ heapify() ” và đặt vị trí cho các nút “trên cùng”, “trái” và “phải” bằng cách gán giá trị cho các biến “lớn hơn”, “Bên trái” và “Bên phải” tương ứng.
  • Sau đó, sử dụng nhiều “ nếu như ” câu điều kiện để kiểm tra xem “ bên trái ” nút lớn hơn nút “ bên phải ” nút và ngược lại. Cuối cùng, giá trị lớn hơn được lưu trữ trong “ lớn hơn ' nút.
  • Cuối cùng, mới “ lớn hơn ” giá trị nút được kiểm tra với giá trị đã được lưu trữ trong “ lớn hơn ” biến nút. Và ' tráo đổi() ” chức năng hoạt động tương ứng để đặt giá trị lớn nhất trong “ lớn hơn ' Biến đổi.

Sau khi kết thúc giai đoạn thực hiện:

Ảnh chụp nhanh cho thấy heap tối đa được tạo bằng cách sử dụng “ maxHeapify() ” trong Java.

Cách 2: Sử dụng Phương thức “Collections.reverseOrder()”

Các ' Bộ sưu tập.reverseOrder() ” phương pháp cung cấp một phương pháp đơn giản và ngắn gọn để tạo ra một “ đống tối đa ” bằng cách sắp xếp bộ sưu tập theo thứ tự ngược lại. Điều này cho phép sử dụng lại mã và tránh nhu cầu triển khai tùy chỉnh “ chất thành đống ” logic, như được hiển thị trong đoạn mã bên dưới:

nhập java.util.ArrayList;
nhập java.util.Collections;
nhập java.util.List;

lớp công khai ReverseOrderExample {
public tĩnh void main ( Sợi dây [ ] tranh luận ) // sáng tạo chính ( ) phương pháp
{
Danh sách < số nguyên > testsEle = ArrayList mới <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 38 ) ;
testEle.add ( 98 ) ;
testEle.add ( 26 ) ;
testEle.add ( 1 ) ;
testEle.add ( 73 ) ;
System.out.println ( 'Danh sách gốc:' + kiểm tra ) ;
Bộ sưu tập.sort ( testsEle, Bộ sưu tập.reverseOrder ( ) ) ;
System.out.println ( 'Số đống tối đa được tạo:' + kiểm tra ) ;
}
}

Giải thích đoạn mã trên:

  • Đầu tiên, nhập khẩu “ Lập danh sách ”, “ bộ sưu tập ' Và ' Danh sách ” tiện ích trong tệp Java.
  • Sau đó, tạo một “ Danh sách ” đặt tên “ KIỂM TRA ” và chèn các phần tử giả vào danh sách.
  • Tiếp theo, phần “ loại() ” phương thức được sử dụng để sắp xếp các thành phần dữ liệu theo thứ tự tăng dần và chuyển danh sách dưới dạng tham số dọc theo “ Bộ sưu tập.reverseOrder() ' phương pháp. Điều này làm cho việc sắp xếp các “ KIỂM TRA ” danh sách theo thứ tự ngược lại.

Sau khi kết thúc giai đoạn thực hiện:

Ảnh chụp nhanh cho thấy “Max Heap” được tạo và sắp xếp bằng phương thức “Collections.reverseOrder()”.

Phần kết luận

Bằng cách tạo một “ đống tối đa ”, người dùng có thể sử dụng các phương thức “maxHeapify()” và “Collections.reverseOrder()”. Họ quản lý một tập hợp các phần tử theo cách cho phép truy cập nhanh vào phần tử tối đa và duy trì hiệu quả thứ tự đã sắp xếp. Nó chỉ phụ thuộc vào các yêu cầu cụ thể và mức độ kiểm soát cần thiết đối với quá trình tạo heap.