Hàng đống và hàng đợi ưu tiên ít được biết đến nhưng đáng ngạc nhiên là các cấu trúc dữ liệu hữu ích. Đối với nhiều vấn đề liên quan đến việc tìm ra yếu tố tốt nhất trong bộ dữ liệu, họ cung cấp một giải pháp dễ sử dụng và hiệu quả cao. Mô -đun Python
5 là một phần của thư viện tiêu chuẩn. Nó thực hiện tất cả các hoạt động Heap cấp thấp cũng như một số cách sử dụng phổ biến cấp cao cho đống. and priority queues are little-known but surprisingly useful data structures. For many problems that involve finding the best element in a dataset, they offer a solution that’s easy to use and highly effective. The Python
Hàng đợi ưu tiên là một công cụ mạnh mẽ có thể giải quyết các vấn đề khác nhau như viết một trình lập lịch email, tìm đường dẫn ngắn nhất trên bản đồ hoặc hợp nhất các tệp nhật ký. Lập trình có đầy đủ các vấn đề tối ưu hóa trong đó mục tiêu là tìm ra yếu tố tốt nhất. Hàng đợi ưu tiên và các chức năng trong mô -đun Python
Hướng dẫn này dành cho Pythonistas, những người thoải mái với danh sách, dicts, bộ và máy phát điện và đang tìm kiếm các cấu trúc dữ liệu tinh vi hơn.
Bạn có thể làm theo cùng với các ví dụ trong hướng dẫn này bằng cách tải xuống mã nguồn từ liên kết bên dưới:
Thức ăn là gì?
Các đống là cấu trúc dữ liệu cụ thể, trong khi hàng đợi ưu tiên là cấu trúc dữ liệu trừu tượng. Một cấu trúc dữ liệu trừu tượng xác định giao diện, trong khi cấu trúc dữ liệu cụ thể xác định việc triển khai.concrete data structures, whereas priority queues are abstract data structures. An abstract data structure determines the interface,
while a concrete data structure defines the implementation.
Các đống thường được sử dụng để thực hiện hàng đợi ưu tiên. Họ là cấu trúc dữ liệu cụ thể phổ biến nhất để thực hiện cấu trúc dữ liệu trừu tượng hàng đợi ưu tiên.
Cấu trúc dữ liệu cụ thể cũng chỉ định đảm bảo hiệu suất. Hiệu suất đảm bảo xác định mối quan hệ giữa kích thước của cấu trúc và các hoạt động thời gian. Hiểu những đảm bảo đó cho phép bạn dự đoán chương trình sẽ mất bao nhiêu thời gian khi kích thước của đầu vào của nó thay đổi.performance guarantees. Performance guarantees define the relationship between the size of the structure and the time operations take. Understanding those guarantees allows you to predict
how much time the program will take as the size of its inputs change.
Cấu trúc dữ liệu, đống và hàng đợi ưu tiên
Cấu trúc dữ liệu trừu tượng xác định các hoạt động và mối quan hệ giữa chúng. Ví dụ, cấu trúc dữ liệu trừu tượng hàng đợi ưu tiên hỗ trợ ba hoạt động:
is_empty kiểm tra xem hàng đợi có trống không.
checks whether the queue is empty.
add_element thêm một phần tử vào hàng đợi. adds an element to the queue.
Pop_element bật phần tử với mức độ ưu tiên cao nhất. pops the element with the highest priority.
Hàng đợi ưu tiên thường được sử dụng để tối ưu hóa việc thực hiện nhiệm vụ, trong đó mục tiêu là làm việc theo nhiệm vụ với mức độ ưu tiên cao nhất. Sau khi một nhiệm vụ được hoàn thành, mức độ ưu tiên của nó được hạ xuống và nó đã trở lại hàng đợi.
Có hai quy ước khác nhau để xác định mức độ ưu tiên của một yếu tố:
Yếu tố lớn nhất có ưu tiên cao nhất.
Yếu tố nhỏ nhất có ưu tiên cao nhất.
Hai quy ước này tương đương vì bạn luôn có thể đảo ngược thứ tự hiệu quả. Ví dụ: nếu các yếu tố của bạn bao gồm các số, thì sử dụng các số âm sẽ lật các quy ước xung quanh.
5 sử dụng quy ước thứ hai, thường là phổ biến hơn của hai. Theo quy ước này, yếu tố nhỏ nhất có mức độ ưu tiên cao nhất. Điều này nghe có vẻ đáng ngạc nhiên, nhưng nó thường khá hữu ích. Trong các ví dụ thực tế mà bạn sẽ thấy sau, quy ước này sẽ đơn giản hóa mã của bạn.
Cấu trúc dữ liệu cụ thể thực hiện các hoạt động được xác định trong cấu trúc dữ liệu trừu tượng và chỉ định thêm đảm bảo hiệu suất.
Việc triển khai HEAP của hàng đợi ưu tiên đảm bảo rằng cả hai phần tử đẩy (thêm) và popping (loại bỏ) là các hoạt động thời gian logarit. Điều này có nghĩa là thời gian cần thiết để thực hiện đẩy và pop tỷ lệ thuận với logarit cơ sở-2 của số lượng phần tử.logarithmic time operations. This means that the time it takes to do push and pop is proportional to the base-2 logarithm of the number of elements.
Logarit phát triển chậm. Logarit cơ sở-2 của mười lăm là khoảng bốn, trong khi logarit cơ sở-2 của một nghìn tỷ là khoảng bốn mươi. Điều này có nghĩa là nếu một thuật toán đủ nhanh trên mười lăm yếu tố, thì nó sẽ chỉ chậm hơn mười lần trên một nghìn tỷ yếu tố và có lẽ vẫn sẽ đủ nhanh.
Trong bất kỳ cuộc thảo luận nào về hiệu suất, cảnh báo lớn nhất là những cân nhắc trừu tượng này ít có ý nghĩa hơn so với thực sự đo lường một chương trình cụ thể và học tập ở nơi các tắc nghẽn. Đảm bảo hiệu suất chung vẫn rất quan trọng để đưa ra dự đoán hữu ích về hành vi của chương trình, nhưng những dự đoán đó cần được xác nhận.
Thực hiện đống
Một đống thực hiện một hàng đợi ưu tiên như một cây nhị phân hoàn chỉnh. Trong một cây nhị phân, mỗi nút sẽ có nhiều nhất là hai đứa trẻ. Trong một cây nhị phân hoàn chỉnh, tất cả các cấp ngoại trừ có thể là người sâu nhất luôn đầy đủ. Nếu mức độ sâu nhất không đầy đủ, thì nó sẽ có các nút càng xa bên trái càng tốt.complete binary tree. In a binary tree, each node will have at most two children. In a complete binary tree, all levels except possibly the deepest one are
full at all times. If the deepest level is incomplete, then it will have the nodes as far to the left as possible.
Thuộc tính hoàn chỉnh có nghĩa là độ sâu của cây là logarit cơ sở-2 của số lượng phần tử, được làm tròn. Ở đây, một ví dụ về một cây nhị phân hoàn chỉnh:completeness property means that the depth of the tree is the base-2 logarithm of the number of elements, rounded up. Here’s an example of a complete binary tree:
Trong ví dụ cụ thể này, tất cả các cấp độ đã hoàn thành. Mỗi nút ngoại trừ những cái sâu nhất có chính xác hai đứa con. Có tổng cộng bảy nút trong ba cấp độ. Ba là logarit cơ sở của bảy, làm tròn.
Nút đơn ở cấp cơ sở được gọi là nút gốc. Có vẻ kỳ lạ khi gọi nút ở đầu cây là gốc, nhưng đây là quy ước phổ biến trong lập trình và khoa học máy tính.root node. It might seem weird to call the node at the top of the tree the root, but this is the common convention in programming and computer science.
Hiệu suất đảm bảo trong một đống phụ thuộc vào cách các yếu tố kéo dài lên xuống cây. Kết quả thực tế của điều này là số lượng so sánh trong một đống là logarit cơ sở-2 của kích thước của cây.
Trong một cây đống, giá trị trong một nút luôn nhỏ hơn cả hai đứa con của nó. Đây được gọi là thuộc tính Heap. Điều này khác với cây tìm kiếm nhị phân, trong đó chỉ có nút bên trái sẽ nhỏ hơn giá trị của cha mẹ.heap property. This is different from a binary search tree, in which only the left node will be smaller than the value of
its parent.
Các thuật toán cho cả đẩy và bật lên dựa vào việc vi phạm tạm thời thuộc tính heap, sau đó sửa chữa thuộc tính heap thông qua các so sánh và thay thế lên hoặc xuống một nhánh.
Ví dụ, để đẩy một phần tử lên một đống, Python thêm nút mới vào khe mở tiếp theo. Nếu lớp dưới cùng không đầy đủ, thì nút được thêm vào khe mở tiếp theo ở phía dưới. Mặt khác, một cấp độ mới được tạo và sau đó phần tử được thêm vào lớp dưới cùng mới.
Khi nút được thêm vào, Python so sánh nó với cha mẹ của nó. Nếu thuộc tính Heap bị vi phạm, thì nút và cha mẹ của nó được chuyển đổi và kiểm tra lại bắt đầu tại cha mẹ. Điều này tiếp tục cho đến khi thuộc tính heap giữ hoặc đã đạt được gốc.
Tương tự, khi bật phần tử nhỏ nhất, Python biết rằng, vì thuộc tính heap, phần tử nằm ở gốc cây. Nó thay thế phần tử bằng phần tử cuối cùng ở lớp sâu nhất và sau đó kiểm tra xem thuộc tính Heap có bị vi phạm chi nhánh không.
Việc sử dụng hàng đợi ưu tiên
Một hàng đợi ưu tiên, và một đống như một việc thực hiện hàng đợi ưu tiên, rất hữu ích cho các chương trình liên quan đến việc tìm kiếm một yếu tố cực đoan theo một cách nào đó. Ví dụ: bạn có thể sử dụng hàng đợi ưu tiên cho bất kỳ nhiệm vụ nào sau đây:
Nhận ba bài đăng trên blog phổ biến nhất từ dữ liệu hit
Tìm cách nhanh nhất để đi từ điểm này sang điểm khác
Dự đoán xe buýt nào sẽ là người đầu tiên đến trạm dựa trên tần số đến
Một nhiệm vụ khác mà bạn có thể sử dụng hàng đợi ưu tiên là lên lịch email. Hãy tưởng tượng một hệ thống có một số loại email, mỗi loại cần được gửi ở một tần số nhất định. Một loại email cần phải đi ra sau mỗi mười lăm phút và một loại khác cần được gửi cứ sau bốn mươi phút.
Trình lập lịch có thể thêm cả hai loại email vào hàng đợi với dấu thời gian cho biết khi email tiếp theo cần được gửi. Sau đó, bộ lập lịch có thể nhìn vào phần tử với dấu thời gian nhỏ nhất chỉ định rằng nó tiếp theo là hàng tiếp theo được gửi và tính toán thời gian ngủ trước khi gửi.timestamp indicating when the email next needs to be sent. Then the scheduler could look at the element with the smallest timestamp—indicating that it’s next in line to be sent—and calculate how long to sleep before sending.
Khi bộ lập lịch thức dậy, nó sẽ xử lý email có liên quan, lấy email ra khỏi hàng đợi ưu tiên, tính toán dấu thời gian tiếp theo và đặt email lại vào hàng đợi tại vị trí chính xác.
Hàng đống như danh sách trong mô -đun Python >>> import heapq
>>> a = [3, 5, 1, 2, 6, 8, 7]
>>> heapq.heapify(a)
>>> a
[1, 2, 3, 5, 6, 8, 7]
5
Mặc dù bạn đã nhìn thấy đống được mô tả trước đó là một cái cây, nhưng điều quan trọng cần nhớ là nó là một cây nhị phân hoàn chỉnh. Tính đầy đủ có nghĩa là nó luôn luôn có thể cho biết có bao nhiêu yếu tố ở mỗi lớp ngoại trừ phần cuối cùng. Bởi vì điều này, đống có thể được thực hiện như một danh sách. Đây là những gì mô -đun Python
Các quy tắc trên cho bạn biết cách trực quan hóa một danh sách như một cây nhị phân hoàn chỉnh. Hãy nhớ rằng một yếu tố luôn có cha mẹ, nhưng một số yếu tố không có con. Nếu
7. Lưu ý cách các mũi tên luôn đi từ giá trị nhỏ hơn sang giá trị lớn hơn. Đây là cách bạn có thể kiểm tra xem danh sách có thỏa mãn thuộc tính Heap không.
5 có các chức năng hoạt động trực tiếp trong danh sách.
Thông thường, như trong ví dụ email ở trên, các phần tử sẽ được chèn vào một đống từng cái một, bắt đầu bằng một đống trống. Tuy nhiên, nếu có một danh sách các yếu tố cần phải là một đống, thì mô -đun Python
1 sửa đổi danh sách tại chỗ nhưng không sắp xếp nó. Một đống không phải được sắp xếp để đáp ứng tài sản Heap. Tuy nhiên, vì mọi danh sách được sắp xếp đều thỏa mãn thuộc tính Heap, chạy
1 sửa đổi danh sách tại chỗ nhưng không sắp xếp nó. Một đống không phải được sắp xếp để đáp ứng tài sản Heap. Tuy nhiên, vì mọi danh sách được sắp xếp đều thỏa mãn thuộc tính Heap, chạy
1 sửa đổi danh sách tại chỗ nhưng không sắp xếp nó. Một đống không phải được sắp xếp để đáp ứng tài sản Heap. Tuy nhiên, vì mọi danh sách được sắp xếp đều thỏa mãn thuộc tính Heap, chạy
5 cho rằng danh sách đã là một đống. Nó rất hữu ích khi lưu ý rằng một danh sách trống hoặc danh sách độ dài mà người ta sẽ luôn là một đống. is equivalent to
>>> importheapq>>> results="""\... Christania Williams 11.80... Marie-Josee Ta Lou 10.86... Elaine Thompson 10.71... Tori Bowie 10.83... Shelly-Ann Fraser-Pryce 10.86... English Gardner 10.94... Michelle-Lee Ahye 10.92... Dafne Schippers 10.90... """>>> top_3=heapq.nsmallest(... 3,results.splitlines(),key=lambdax:float(x.split()[-1])... )>>> print("\n".join(top_3))Elaine Thompson 10.71Tori Bowie 10.83Marie-Josee Ta Lou 10.86
1 sửa đổi danh sách tại chỗ nhưng không sắp xếp nó. Một đống không phải được sắp xếp để đáp ứng tài sản Heap. Tuy nhiên, vì mọi danh sách được sắp xếp đều thỏa mãn thuộc tính Heap, chạy
1 trong danh sách được sắp xếp won Thay đổi thứ tự các yếu tố trong danh sách.
Các hoạt động cơ bản khác trong mô -đun Python >>> import heapq
>>> a = [3, 5, 1, 2, 6, 8, 7]
>>> heapq.heapify(a)
>>> a
[1, 2, 3, 5, 6, 8, 7]
5 cho rằng danh sách đã là một đống. Nó rất hữu ích khi lưu ý rằng một danh sách trống hoặc danh sách độ dài mà người ta sẽ luôn là một đống.
Vì gốc của cây là phần tử đầu tiên, bạn không cần một chức năng chuyên dụng để đọc phần tử nhỏ nhất không phá hủy. Phần tử đầu tiên,
4 chia dòng theo khoảng trắng, lấy phần tử cuối cùng và chuyển đổi nó thành số điểm nổi. Điều này có nghĩa là mã sẽ sắp xếp các dòng theo thời gian chạy và trả về ba dòng với thời gian chạy nhỏ nhất. Những điều này tương ứng với ba vận động viên nhanh nhất, mang lại cho bạn những người chiến thắng huy chương vàng, bạc và đồng.
7, có các tham số tương tự và trả về các yếu tố lớn nhất. Điều này sẽ hữu ích nếu bạn muốn có được các huy chương từ cuộc thi ném Javelin, trong đó mục tiêu là ném javelin càng xa càng tốt.
Cách xác định vấn đề
Một đống, như một việc thực hiện hàng đợi ưu tiên, là một công cụ tốt để giải quyết các vấn đề liên quan đến các thái cực, giống như nhất hoặc ít nhất của một số liệu nhất định.
Có những từ khác chỉ ra một đống có thể hữu ích:
Lớn nhất
Nhỏ nhất
To nhất
Nhỏ nhất
To nhất
Tốt nhất
Tồi tệ nhất
Đứng đầu
Đáy
Tối đa
Tối thiểu
Tối ưu
Bất cứ khi nào một tuyên bố vấn đề chỉ ra rằng bạn đang tìm kiếm một số yếu tố cực đoan, thì nó có giá trị khi nghĩ về việc liệu một hàng đợi ưu tiên sẽ hữu ích hay không.
Đôi khi hàng đợi ưu tiên sẽ chỉ là một phần của giải pháp và phần còn lại sẽ là một số biến thể về lập trình động. Đây là trường hợp với ví dụ đầy đủ mà bạn sẽ thấy trong phần tiếp theo. Lập trình động và hàng đợi ưu tiên thường hữu ích với nhau.
Ví dụ: Tìm đường dẫn
Ví dụ sau đây đóng vai trò là trường hợp sử dụng thực tế cho mô -đun Python
5. Ví dụ sẽ sử dụng một thuật toán cổ điển, như một phần của nó, đòi hỏi một đống. Bạn có thể tải xuống mã nguồn được sử dụng trong các ví dụ bằng cách nhấp vào liên kết bên dưới:
Hãy tưởng tượng một robot cần điều hướng một mê cung hai chiều. Robot cần phải đi từ gốc, được đặt ở góc trên cùng bên trái, đến đích ở góc dưới bên phải. Robot có một bản đồ của mê cung trong bộ nhớ của nó, vì vậy nó có thể lên kế hoạch cho toàn bộ đường dẫn trước khi đặt ra.
Mục tiêu là để robot hoàn thành mê cung càng nhanh càng tốt.
Thuật toán của chúng tôi là một biến thể của thuật toán Dijkstra. Có ba cấu trúc dữ liệu được lưu giữ và cập nhật trong suốt thuật toán: is a map of a tentative path from the origin to a position,
00. Con đường được gọi là dự kiến bởi vì nó là con đường ngắn nhất được biết đến, nhưng nó có thể được cải thiện. is set of points for which the path that
Các bước được chạy trong một vòng lặp cho đến khi đích được thêm vào bộ >>> import heapq
>>> a = [3, 5, 1, 2, 6, 8, 7]
>>> heapq.heapify(a)
>>> a
[1, 2, 3, 5, 6, 8, 7]
01. Khi đích đến trong bộ >>> import heapq
>>> a = [3, 5, 1, 2, 6, 8, 7]
>>> heapq.heapify(a)
>>> a
[1, 2, 3, 5, 6, 8, 7]
01, bạn đã hoàn thành. Đầu ra của thuật toán là đường dẫn def is_valid(lines, position):
x, y = position
if not (0 <= y < len(lines) and 0 <= x < len(lines[y])):
return False
if lines[y][x] == "X":
return False
return True
9 đến đích, hiện là >>> import heapq
>>> a = [3, 5, 1, 2, 6, 8, 7]
>>> heapq.heapify(a)
>>> a
[1, 2, 3, 5, 6, 8, 7]
01 là đường dẫn ngắn nhất có thể.
Mã cấp cao nhất
Bây giờ bạn đã hiểu thuật toán, đã đến lúc viết mã để thực hiện nó. Trước khi thực hiện thuật toán, nó rất hữu ích để viết một số mã hỗ trợ.
Bước tiếp theo là xác định bản đồ là một biến trong mã:
Bản đồ là một chuỗi được trích dẫn ba cho thấy khu vực mà robot có thể di chuyển cũng như bất kỳ chướng ngại vật nào.
Mặc dù một kịch bản thực tế hơn sẽ khiến bạn đọc bản đồ từ một tệp, nhưng với mục đích giảng dạy, nó dễ dàng hơn để xác định một biến trong mã bằng bản đồ đơn giản này. Mã này sẽ hoạt động trên bất kỳ bản đồ nào, nhưng nó dễ hiểu và gỡ lỗi hơn trên bản đồ đơn giản.
Mã hỗ trợ
Hàm đầu tiên sẽ chuyển đổi bản đồ thành một cái gì đó dễ phân tích mã hơn trong mã.
Điều này cho phép phần còn lại của mã hoạt động trên các cấu trúc dữ liệu được thiết kế cho máy tính, không phải cho con người có khả năng quét trực quan.
35. Cuối cùng, bây giờ bạn đã biết cả hai tọa độ đều ở trong bản đồ, mã kiểm tra xem họ không phải là một trở ngại bằng cách nhìn vào nhân vật ở vị trí này và so sánh ký tự với
43 làm bước cuối cùng sẽ tạo đường dẫn tốt hơn cho từng vị trí. Nếu không có đường dẫn đến một vị trí, thì bất kỳ đường dẫn nào cũng ngắn hơn. Nếu có một đường dẫn đã biết, thì bạn chỉ mang lại đường dẫn mới nếu chiều dài của nó ngắn hơn. Để làm cho API của
Tất cả các hàm trợ giúp được viết là các hàm thuần túy, có nghĩa là chúng không sửa đổi bất kỳ cấu trúc dữ liệu nào và chỉ trả về các giá trị. Điều này giúp việc tuân theo thuật toán cốt lõi dễ dàng hơn, tất cả các bản cập nhật cấu trúc dữ liệu.pure functions, meaning they don’t modify any data structures and only return values. This makes it easier to follow the core algorithm, which does all the data structure updates.
Mã thuật toán cốt lõi
Để tóm tắt lại, bạn đã tìm kiếm con đường ngắn nhất giữa nguồn gốc và đích đến.
69 dưới dạng chuỗi và trả lại đường dẫn từ gốc đến đích dưới dạng danh sách các vị trí.
Chức năng này hơi dài và phức tạp, vì vậy hãy để Lừa đi qua nó một chút:
Các dòng 2 đến 5 Thiết lập các biến mà vòng lặp sẽ xem và cập nhật. Bạn đã biết một đường dẫn từ gốc đến chính nó, đó là con đường trống, có độ dài 0. set up the variables that the loop will look at and update. You already know a path from the origin to itself, which is the empty path, of length 0.
Dòng 6 xác định điều kiện chấm dứt vòng lặp. Nếu không có
Các dòng 16 đến 19 liên quan đến việc trả lại kết quả chính xác. Nếu một đường dẫn được tìm thấy, thì hàm sẽ trả lại nó. Mặc dù tính toán các đường dẫn mà không có vị trí cuối cùng khiến việc thực hiện thuật toán đơn giản hơn, nhưng nó lại là một API đẹp hơn để trả về nó với đích đến. Nếu không tìm thấy đường dẫn, thì một ngoại lệ được nâng lên. deal with
returning the correct result. If a path was found, then the function will return it. Although computing the paths without the final position made implementing the algorithm simpler, it’s a nicer API to return it with the destination. If no path is found, then an exception is raised.
Phá vỡ chức năng thành các phần riêng biệt cho phép bạn hiểu nó tại một thời điểm.
Mã trực quan
Nếu thuật toán thực sự được sử dụng bởi một robot, thì robot có thể sẽ hoạt động tốt hơn với một danh sách các vị trí mà nó sẽ đi qua. Tuy nhiên, để làm cho kết quả tốt hơn cho con người, sẽ tốt hơn để hình dung chúng.
Đường dẫn di chuyển một bước sang phải, sau đó một vài bước chéo về phía dưới cùng bên phải, sau đó thêm một vài bước bên phải, và cuối cùng nó kết thúc với một bước chéo đến phía dưới bên phải.
Xin chúc mừng! Bạn đã giải quyết một vấn đề bằng cách sử dụng mô -đun Python
Những loại vấn đề gây bệnh này, có thể giải quyết được bằng sự kết hợp giữa lập trình động và hàng đợi ưu tiên, là phổ biến trong các cuộc phỏng vấn việc làm và các thách thức lập trình. Ví dụ, sự ra đời năm 2019 của mã bao gồm một vấn đề có thể được giải quyết với các kỹ thuật được mô tả ở đây.
Sự kết luận
Bây giờ bạn biết các cấu trúc dữ liệu hàng đợi hàng hóa và ưu tiên là gì và loại vấn đề nào mà họ hữu ích trong việc giải quyết. Bạn đã học cách sử dụng mô -đun Python
8, sử dụng một đống bên trong.heap and priority queue data structures are and what kinds of problems they’re useful in solving. You learned how to use the Python
5, giờ đây bạn có thể giải quyết nhiều vấn đề trong đó giải pháp phụ thuộc vào việc tìm ra yếu tố nhỏ nhất hoặc lớn nhất. Để làm theo cùng với các ví dụ bạn đã thấy trong hướng dẫn này, bạn có thể tải xuống mã nguồn từ liên kết bên dưới:
HEAPQ được thực hiện như thế nào trong Python?
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 mô -đun FEAPQ. Nó rất hữu ích là triển khai hàng đợi ưu tiên trong đó mục hàng đợi có trọng lượng cao hơn được ưu tiên hơn trong xử lý.using the heapq module. It is very useful is implementing priority queues where the queue item with higher weight is given more priority in processing.
Heapq có nghĩa là gì trong Python?
Mã nguồn: lib/heapq.py.Mô -đun này cung cấp việc triển khai thuật toán hàng đợi Heap, còn được gọi là thuật toán hàng đợi ưu tiên.Thoát nước là những cây nhị phân mà mọi nút cha mẹ đều có giá trị nhỏ hơn hoặc bằng với bất kỳ con nào của nó.
Nhập khẩu Heapq làm gì trong Python?
Mô -đun Python Heapq là một phần của thư viện tiêu chuẩn.Nó thực hiện tất cả các hoạt động Heap cấp thấp cũng như một số cách sử dụng phổ biến cấp cao cho đống.Hàng đợi ưu tiên là một công cụ mạnh mẽ có thể giải quyết các vấn đề khác nhau như viết một trình lập lịch email, tìm đường dẫn ngắn nhất trên bản đồ hoặc hợp nhất các tệp nhật ký.implements all the low-level heap operations as well as some high-level common uses for heaps. A priority queue is a powerful tool that can solve problems as varied as writing an email scheduler, finding the shortest path on a map, or merging log files.
Heapq sắp xếp như thế nào?
Heapq thực hiện một thuật toán sắp xếp min-heap phù hợp để sử dụng với danh sách của Python.Một đống là cấu trúc dữ liệu giống như cây nơi các nút trẻ có mối quan hệ đặt hàng với cha mẹ.implements a min-heap sort algorithm suitable for use with Python's lists. A heap is a tree-like data structure where the child nodes have a sort-order relationship with the parents.