Python heapq lấy phần tử nhỏ nhất
Một đống chỉ đơn giản là một cây nhị phân với một số quy tắc bổ sung mà nó phải tuân theo. Có hai quy tắc phân biệt cấu trúc heap với bất kỳ cấu trúc cây nào khác Show Những quy tắc này là. Đầu tiên, một đống phải là một cây nhị phân hoàn chỉnh. Thứ hai, nút cha của heap phải là giá trị ≥\geq≥ của các con của nó (heap tối đa) hoặc ≤\leq≤ giá trị của các con của nó (heap tối thiểu). Đọc thêm về min và max heap tại đây Mô-đun Python đốngHeap được sử dụng khi bạn muốn xóa các phần tử có thứ tự/mức độ ưu tiên cao nhất hoặc thấp nhất. Heap cho phép truy cập nhanh vào các phần tử này trong thời gian O(1). Tuy nhiên, heap chỉ cung cấp quyền truy cập nhanh vào các phần tử thấp nhất hoặc lớn nhất;
Trong Python, bạn có mô-đun heapq, trong đó bạn có thể tạo heap tối thiểu hoặc heap tối đa. Theo mặc định, khi bạn tạo heap bằng hàm heapq, heap sẽ luôn là heap tối thiểu, nghĩa là mỗi khi phần tử nhỏ nhất được lấy ra khỏi heap Mô-đun heapq có một số chức năng liên quan để thực hiện các thao tác khác nhau trên cấu trúc dữ liệu heap. Các chức năng này được đưa ra dưới đây
Tạo một đống trong PythonTrong Python, việc tạo một đống có thể được thực hiện bằng cách sử dụng hàm heapify Mã số
Chèn vào HeapTrong Python, việc chèn các phần tử vào heap có thể được thực hiện theo nhiều cách. Hãy xem cách chèn các phần tử vào một đống Mã số
Xóa phần tử khỏi Heap trong PythonBạn có thể sử dụng hàm heappop để xóa phần tử khỏi heap. hàm heappop loại bỏ và trả về phần tử nhỏ nhất từ heap, có nghĩa là nó luôn loại bỏ phần tử ở chỉ mục đầu tiên Mã số
Thay thế một phần tử trong Heap bằng PythonHàm heapreplace dùng để thay thế một phần tử trong heap. Hàm này loại bỏ phần tử nhỏ nhất khỏi heap và chèn phần tử mới vào một số vị trí. Nếu phần tử được chèn vào là nhỏ nhất trong heap thì phần tử này sẽ được đưa về chỉ số thứ 0 Mã số
Appending và Popping đồng thờiVì chúng tôi đang sử dụng Python, chúng tôi có thể đồng thời đẩy và bật các phần tử trong heap. Python cung cấp hai chức năng mà bạn có thể thêm và bật các phần tử đồng thời từ heap. Các hàm này là heappushpop và heapreplace. Chúng ta đã thảo luận về chức năng heapreplace. Bây giờ chúng ta sẽ thảo luận về chức năng heappushpop Điểm chú ýHàm heappushpop trước tiên đẩy phần tử đã cung cấp vào heap, sau đó bật phần tử nhỏ nhất khỏi heap và hàm heapreplace trước tiên sẽ đẩy phần tử nhỏ nhất ra khỏi heap rồi đẩy phần tử đã cung cấp trở lại vào heap ví dụ 1Mã số
Sử dụng Heap để tìm phần tử lớn nhất và nhỏ nhấtTa không cần sắp xếp mảng để tìm k phần tử nhỏ nhất hoặc lớn nhất. Chúng tôi sẽ sử dụng một số chức năng tích hợp có trong mô-đun heapq. Các chức năng này là lớn nhất và nhỏ nhất. Hàm nlớn nhất trả về n phần tử lớn nhất từ heap và hàm nsmallest trả về n phần tử nhỏ nhất từ heap Mã số 1 Tìm hiểu thêm về Heap trong PythonỞ trên, chúng tôi chỉ thảo luận về đống tối thiểu. Khi thực hiện bất kỳ thao tác nào, chẳng hạn như heapify, heappop hoặc heappush, chúng tôi luôn nói rằng phần tử nhỏ nhất có mặt ở chỉ số thứ 0. Còn những phần tử lớn nhất thì sao? Chúng ta sẽ nói ngắn gọn về max heap. heap tối đa có nghĩa là phần tử lớn nhất sẽ luôn ở chỉ số 0 Giả sử chúng ta có một mảng có năm phần tử Khi chúng ta thực hiện thao tác heapify trên mảng trên, phần tử nhỏ nhất (2) sẽ xuất hiện ở phía trước. Đây là thuộc tính min-heap. Để triển khai heap tối đa, chỉ cần nhân mọi phần tử với -1. Bằng cách này, phần tử lớn nhất sẽ trở thành phần tử nhỏ nhất và nó sẽ xuất hiện ở phía trước Mã số 2 |