Đối với phân tích dữ liệu, sử dụng ngôn ngữ lập trình Python là thuận lợi và trong một số trường hợp nhất định, hiệu quả hơn các công nghệ khác. Nó cung cấp một câu trả lời đơn giản và mạnh mẽ cho nhiều vấn đề liên quan đến việc chọn phần tốt nhất trong tập dữ liệu. Cấu trúc dữ liệu ít được biết đến nhưng hữu ích đáng ngạc nhiên bao gồm hàng đợi ưu tiên và đống Show
Thư viện chuẩn bao gồm mô-đun heapq Python. Nó thực hiện tất cả các hoạt động của heap ở mức thấp và một số ứng dụng heap điển hình ở mức cao Dung dịchSự kết hợp giữa hàng đợi ưu tiên với đống là một công cụ giải quyết vấn đề hiệu quả. Trong nhiều trường hợp, hàng đợi ưu tiên và các phương thức của mô-đun heapq trong Python có thể hữu ích Trong hướng dẫn Python này, bạn sẽ học những điều sau
đống là gì?Heap là một cấu trúc dữ liệu dựa trên cây trong đó các nút của cây được sắp xếp theo một thứ tự cụ thể. Về bản chất, nó là một cây nhị phân đầy đủ tuân thủ các đặc điểm của heap như min-heap và max-heap Heaps được sử dụng trong một số thuật toán nổi tiếng, bao gồm triển khai hàng đợi ưu tiên, thuật toán sắp xếp heap sort và phương pháp Dijkstra để xác định đường đi ngắn nhất. Đống về cơ bản là cấu trúc dữ liệu bạn sẽ sử dụng khi cần nhanh chóng truy xuất phần tử nhỏ nhất hoặc lớn nhất. Dưới đây là một ví dụ về Biểu diễn cây và Biểu diễn mảng đại diện câyBiểu diễn mảngThông tin có thể được hiển thị dưới dạng một mảng các khóa, từ đó có thể suy ra vị trí của trẻ bên trái và bên phải bằng cách sử dụng kết nối toán học đơn giản. Nếu một phần tử của chỉ số k được đưa ra
Chúng tôi có hai loại heap trong Python
Cây nhị phân thường được sử dụng để thực hiện heap. Chúng được tổ chức sao cho chúng ta có thể truy cập nhanh chóng và liên tục vào phần tử tối thiểu của chỉ mục đầu tiên. Phần còn lại của cây/đống không phải lúc nào cũng được sắp xếp. Chúng tôi có thể xử lý một đống dưới dạng danh sách bằng mô-đun heapq trong Python ví dụHãy lấy đầu vào là [6,8,9,2,4]. Sắp xếp đầu vào bằng cấu trúc cây Min-Heap. Quy tắc "Nút cha phải nhỏ hơn hoặc bằng nút con" áp dụng cho Min-heap Trong đầu vào này, nút cha "6" đáp ứng yêu cầu vì "8 và 9" là con của nút cha. Mặc dù "2 và 4" là nút cha của "8", nhưng nút cha 8 không đáp ứng yêu cầu. Do đó, 8 và 2 phải được chuyển đổi, như minh họa trong Img 1 Nút cha "6" không đáp ứng yêu cầu; . Do đó, 6 và 2 phải được chuyển đổi, như thể hiện trong Img 2 Nút cha "6" không đáp ứng yêu cầu và "8 và 4" là nút con của nút cha. Kết quả là, 6 và 4 phải được chuyển đổi, như thể hiện trong Img 3 Trong Hình 3, "4 và 9" là nút con của nút cha "2", thỏa mãn tiêu chí. "8 và 6" là nút con của nút cha "4", đáp ứng yêu cầu. Sau đó, chúng tôi đã tạo cấu trúc min-heap Heap tối thiểu đầu ra là [2,4,9,8,6] cho đầu vào [6,8,9,2,4] Heap tối đa. Quy tắc "Nút cha phải lớn hơn hoặc bằng nút con" áp dụng cho Max-heap Img 4 mô tả "8 và 9" là nút con của nút cha có tên là "6", nhưng vì nút cha 6 không đáp ứng tiêu chí nên chúng tôi phải hoán đổi 6 và 9, như minh họa trong Img 5 Img 5 cho thấy "8 và 6" là nút con của nút cha "9" đáp ứng tiêu chí và "2 và 4" là nút con của nút cha "8" cũng đáp ứng tiêu chí. Sau đó, chúng tôi đã tạo cấu trúc max-heap Heap tối đa đầu ra là [2,4,9,8,6] cho đầu vào [9,8,6,2,4] Hàng đợi ưu tiên là gì?Hàng đợi được sắp xếp theo một thuộc tính của các mục trong hàng đợi được gọi là hàng đợi ưu tiên. Hàng đợi ưu tiên có ba đặc điểm bổ sung trên hàng đợi
Heap và hàng đợi ưu tiên liên quan như thế nào?Việc triển khai heap của hàng đợi ưu tiên đảm bảo rằng cả việc thêm và xóa các mục nhập đều mất một lượng thời gian logarit. Do đó, thời gian cần thiết để thực hiện thao tác đẩy và bật có liên quan tỷ lệ thuận với logarit cơ số 2 của số phần tử Thực hiện chức năng HeapqĐể triển khai cấu trúc dữ liệu heap trong Python, hãy sử dụng mô-đun heapq. Mô-đun này chủ yếu minh họa loại min-heap. Không có khái niệm max-heap trong mô-đun heapq trong Python Bước 1. heapify (đầu vào)Danh sách đầu vào được thay đổi thành cấu trúc dữ liệu min-heap bằng cách sử dụng nó import heapq input = [4,6,2,8,1,5] heapq.heapify(input) print("heap is") print(input)
đầu ra Bước 2. heappush(đầu vào, phần tử)Nó được sử dụng để duy trì cấu trúc heap và đặt phần tử vào heap import heapq input = [4,6,2,8,1,5] heapq.heappush(input,10) print("heap after push the element 10") print(input)
đầu ra Bước 3. heappop(đầu vào)Nó được sử dụng để duy trì cấu trúc heap và loại bỏ mảnh nhỏ nhất khỏi heap import heapq input = [6,2,8,1,5] heapq.heapify(input) print("after heapify the heap is") print(input) print("smallest element in heap is") print(heapq.heappop(input))
đầu ra Phần tử nhỏ nhất và đầu tiên trong heap là 1 Bước 4. heappushpop(đầu vào, phần tử)Chức năng này đại diện cho sự kết hợp của chức năng đẩy và bật. Phần tử được cung cấp được đẩy lên trước, tiếp theo là phần tử nhỏ nhất import heapq input = [3,4,6,1,4,7] heapq.heapify(input) print("The popped item using heappop") print(heapq.heappop(input))
đầu ra Bước 5. heapreplace(đầu vào, phần tử)Hàm này cũng thêm và xóa các phần tử, nhưng nó thực hiện theo một cách khác với heappushpop. Phần tử nhỏ nhất ban đầu được xuất hiện trong heapreplace này, sau đó phần tử được đẩy import heapq input = [3,4,6,4,7] heapq.heapify(input) print("The poppes iteam using heapreplace") print(heapq.heapreplace(input,2))
đầu ra Bước 6. nnhỏ nhất(k,đầu vào)k mục nhỏ nhất được trả lại import heapq input = [4,5,7,2,9,1] heapq.heapify(input) print("After heapify") print(input) print("The K smallest element is") print(heapq.nsmallest(2,input)) #here K is 2
đầu ra Bước 7. lớn nhất (k, đầu vào)k mục lớn nhất được trả lại import heapq input = [4,5,7,2,9,1] heapq.heapify(input) print("After heapify") print(input) print("The K largest element is") print(heapq.nlargest(2,input)) #here K is 2
đầu ra Thời gian phức tạpMỗi lệnh gọi heapify có chi phí O(log(n)) và chi phí tạo một heap là O. Do đó, đống tòa nhà có độ phức tạp thời gian chạy là O(n log(n)) (n). Kết quả là O(n log(n)) sẽ là tổng thời gian phức tạp Ứng dụng của đống
Phần kết luậnKhi làm việc với biểu đồ hoặc cây, cấu trúc dữ liệu heap có lợi. Chúng ta có thể tăng hiệu quả của các chương trình khác nhau và báo cáo vấn đề với cấu trúc dữ liệu heap. Vì chúng có hiệu quả trong việc xử lý các tập dữ liệu lớn nên có thể sử dụng min-heap và max-heap. Khi bạn thành thạo với các cấu trúc dữ liệu heap, bạn sẽ rất phù hợp để xử lý các biểu đồ và cây phức tạp Làm cách nào để triển khai hàng đợi ưu tiên trong Python bằng heapq?Chúng ta có thể dễ dàng triển khai hàng đợi ưu tiên trong Python bằng mô-đun heapq. . nhập heapqclass PriorityQueue. def __init__(bản thân). . nhiệm vụ lớp học. def __init__(bản thân, tên). . nhập heapq. . lớp PriorityQueue. def __init__(bản thân). . heapq. heappush(tự. _data, (-ưu tiên, tự. _index, mục)). a = (23, Nhiệm vụ ('os')). a = (45, Nhiệm vụ ('os')) Hàng đợi ưu tiên được triển khai heap như thế nào?Chúng ta có thể sử dụng heaps để triển khai hàng đợi ưu tiên. Sẽ mất thời gian O(log N) để chèn và xóa từng phần tử trong hàng đợi ưu tiên . Dựa trên cấu trúc heap, priority queue cũng có hai loại max- priority queue và min - priority queue. Hãy tập trung vào Hàng đợi ưu tiên tối đa.
Python triển khai hàng đợi ưu tiên như thế nào?Python cung cấp triển khai tích hợp cấu trúc dữ liệu hàng đợi ưu tiên. kể từ khi hàng đợi. Lớp PriorityQueue cần duy trì thứ tự các phần tử của nó, cần có cơ chế sắp xếp mỗi khi một phần tử mới được đưa vào hàng đợi. Python giải quyết vấn đề này bằng cách sử dụng một đống nhị phân để triển khai hàng đợi ưu tiên.
Heapq được triển khai bằng Python như thế nào?Hàng đợi heap là một cấu trúc cây đặc biệt trong đó mỗi nút cha nhỏ hơn hoặc bằng nút con của nó. Trong python, nó được triển khai bằng cách sử dụng mô-đun heapq . Sẽ rất hữu ích khi triển khai các hàng đợi ưu tiên trong đó mục hàng đợi có trọng số cao hơn được ưu tiên hơn trong quá trình xử lý. |