Hướng dẫn priority queue to list python - hàng đợi ưu tiên để liệt kê python

PriorityQueue được triển khai dưới dạng đống nhị phân, được triển khai bằng cách sử dụng list (mảng) trong Python. Để lặp lại hàng đợi, bạn cần biết các quy tắc về nơi trẻ em được lưu trữ trong danh sách.

Các quy tắc là tất cả các nút có hai con, trừ khi chúng là nút cuối cùng có con trong trường hợp chúng có thể có một con thay thế. Tất cả các nút xuất hiện sau nút cuối cùng có con sẽ không có con (DUH).

Trẻ em của một nút được lưu trữ liên quan đến vị trí riêng của nút trong danh sách. Trong đó i là chỉ số của các nút trong danh sách thì trẻ em được lưu trữ tại:

  • 2 * i + 1
  • 2 * i + 2

Tuy nhiên, yêu cầu duy nhất của một đống là tất cả trẻ em của nút có giá trị lớn hơn hoặc bằng giá trị của nút (hoặc lớn hơn phụ thuộc vào việc thực hiện).

Chẳng hạn, trong trang Wiki được liên kết ở trên về Binrary Heap, bạn sẽ tìm thấy hình ảnh sau. Mục đầu tiên trong hàng đợi là gốc. Khá rõ ràng. Mục thứ hai là con lớn hơn của trẻ em gốc. Tuy nhiên, mục thứ ba có thể là nút còn lại của nút gốc hoặc một trong những đứa trẻ của nút thứ hai trong hàng đợi. Đó là, mục thứ ba trong hàng đợi (25) có thể ở cùng vị trí với 19 hoặc 1.

Hướng dẫn priority queue to list python - hàng đợi ưu tiên để liệt kê python

Do đó, để lặp lại hàng đợi, bạn cần theo dõi tất cả các nút "có thể xem được" hiện tại. Ví dụ:

def iter_priority_queue(queue):

    if queue.empty():
        return

    q = queue.queue
    next_indices = [0]
    while next_indices:
        min_index = min(next_indices, key=q.__getitem__)
        yield q[min_index]
        next_indices.remove(mix_index)
        if 2 * min_index + 1 < len(q):
            next_indices.append(2 * min_index + 1)
        if 2 * min_index + 2 < len(q):
            next_indices.append(2 * min_index + 2)

Phương pháp này có thể được gắn khỉ trên queue.PriorityQueue nếu bạn cảm thấy lười biếng, nhưng tôi sẽ khuyến khích bạn thực hiện lớp xếp hàng ưu tiên của riêng mình bằng mô -đun heapqPriorityQueue đi kèm với rất nhiều chức năng dư thừa (chủ yếu là chủ đề mà gần như chắc chắn không cần). Cần lưu ý rằng phương pháp trên không an toàn. Nếu một luồng khác sửa đổi hàng đợi trong khi nó được lặp lại thì phương thức trên sẽ bắt đầu mang lại các số sai và nếu bạn may mắn, nó có thể tạo ra một ngoại lệ.not thread safe. If another thread modifies the queue whilst it is being iterated over then the above method will start yielding the wrong numbers and if you're lucky it may produce an exception.

Xem thảo luận

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    Đọc are abstract data structures where each data/value in the queue has a certain priority. For example, In airlines, baggage with the title “Business” or “First-class” arrives earlier than the rest.

    Bàn luận

    1. Hàng đợi ưu tiên là các cấu trúc dữ liệu trừu tượng trong đó mỗi dữ liệu/giá trị trong hàng đợi có mức độ ưu tiên nhất định. Ví dụ, trong các hãng hàng không, hành lý với tiêu đề kinh doanh, hoặc hạng nhất của nhóm đến sớm hơn phần còn lại.
    2. Hàng đợi ưu tiên là một phần mở rộng của hàng đợi với các thuộc tính sau.
      Various applications of the Priority queue in Computer Science are:
      Job Scheduling algorithms, CPU and Disk Scheduling, managing resources that are shared among different processes, etc.

    Một yếu tố có mức độ ưu tiên cao được khử trùng trước một phần tử có mức độ ưu tiên thấp.

    1. Nếu hai yếu tố có cùng mức độ ưu tiên, chúng được phục vụ theo đơn đặt hàng của chúng trong hàng đợi. Các ứng dụng của hàng đợi ưu tiên trong khoa học máy tính là: thuật toán lập lịch công việc, lập kế hoạch CPU và đĩa, quản lý tài nguyên được chia sẻ giữa các quy trình khác nhau, v.v.
    2. Sự khác biệt chính giữa hàng đợi ưu tiên và hàng đợi:

    Trong hàng đợi, yếu tố lâu đời nhất được khử trùng đầu tiên. Trong khi, trong hàng đợi ưu tiên, một yếu tố dựa trên mức ưu tiên cao nhất được giải quyết.simple implementation of the priority queue.

    Khi các phần tử được bật ra khỏi hàng đợi ưu tiên, kết quả thu được được sắp xếp theo thứ tự tăng hoặc theo thứ tự giảm. Trong khi, khi các phần tử được bật từ một hàng đợi đơn giản, một thứ tự dữ liệu FIFO thu được trong kết quả.

    Dưới đây là một triển khai đơn giản của hàng đợi ưu tiên.

    Python

    12 1 14 7
    14
    12
    7
    1
    1
    12 1 14 7
    14
    12
    7
    1
    2
    12 1 14 7
    14
    12
    7
    1
    3
    12 1 14 7
    14
    12
    7
    1
    4

    12 1 14 7
    14
    12
    7
    1
    5
    12 1 14 7
    14
    12
    7
    1
    6
    12 1 14 7
    14
    12
    7
    1
    7
    12 1 14 7
    14
    12
    7
    1
    8
    12 1 14 7
    14
    12
    7
    1
    4

    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))
    0
    12 1 14 7
    14
    12
    7
    1
    8
    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))
    223
    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))
    4

    12 1 14 7
    14
    12
    7
    1
    5
    12 1 14 7
    14
    12
    7
    1
    6
    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))
    7
    12 1 14 7
    14
    12
    7
    1
    8
    12 1 14 7
    14
    12
    7
    1
    4

    Is

    12 1 14 7
    14
    12
    7
    1
    5
    12 1 14 7
    14
    12
    7
    1
    6 list3
    12 1 14 7
    14
    12
    7
    1
    8
    12 1 14 7
    14
    12
    7
    1
    4

    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))
    0
    12 1 14 7
    14
    12
    7
    1
    82 * i + 12

    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))
    0PriorityQueue1 list8list9
    12 1 14 7
    14
    12
    7
    1
    8i1
    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))
    3
    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))
    3 i4

    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))
    02 * i + 192 * i + 20

    12 1 14 7
    14
    12
    7
    1
    5
    12 1 14 7
    14
    12
    7
    1
    6 i7
    12 1 14 7
    14
    12
    7
    1
    8i9

    12 1 14 7
    14
    12
    7
    1
    5
    12 1 14 7
    14
    12
    7
    1
    6 2 * i + 15
    12 1 14 7
    14
    12
    7
    1
    8
    12 1 14 7
    14
    12
    7
    1
    4

    2 * i + 212 * i + 22

    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))
    3 i4

    2 * i + 21PriorityQueue6 PriorityQueue7PriorityQueue8 2 * i + 29list9list8list9______18queue.PriorityQueue4

    queue.PriorityQueue5queue.PriorityQueue6

    12 1 14 7
    14
    12
    7
    1
    8queue.PriorityQueue8
    12 1 14 7
    14
    12
    7
    1
    8heapq0

    heapq12 * i + 22

    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))
    3 i

    2 * i + 21heapq6

    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))
    3
    12 1 14 7
    14
    12
    7
    1
    8heapq9

    2 * i + 21

    12 1 14 7
    14
    12
    7
    1
    01
    12 1 14 7
    14
    12
    7
    1
    8heapq9

    2 * i + 21

    12 1 14 7
    14
    12
    7
    1
    11
    12 1 14 7
    14
    12
    7
    1
    12

    2 * i + 21

    12 1 14 7
    14
    12
    7
    1
    14

    2 * i + 21PriorityQueue1

    12 1 14 7
    14
    12
    7
    1
    06

    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))
    0
    12 1 14 7
    14
    12
    7
    1
    08
    12 1 14 7
    14
    12
    7
    1
    09

    12 1 14 7
    14
    12
    7
    1
    5
    12 1 14 7
    14
    12
    7
    1
    26
    12 1 14 7
    14
    12
    7
    1
    27
    12 1 14 7
    14
    12
    7
    1
    28

    12 1 14 7
    14
    12
    7
    1
    5
    12 1 14 7
    14
    12
    7
    1
    26
    12 1 14 7
    14
    12
    7
    1
    31
    12 1 14 7
    14
    12
    7
    1
    28

    12 1 14 7
    14
    12
    7
    1
    5
    12 1 14 7
    14
    12
    7
    1
    26
    12 1 14 7
    14
    12
    7
    1
    35
    12 1 14 7
    14
    12
    7
    1
    28

    12 1 14 7
    14
    12
    7
    1
    5
    12 1 14 7
    14
    12
    7
    1
    26
    12 1 14 7
    14
    12
    7
    1
    39
    12 1 14 7
    14
    12
    7
    1
    28

    12 1 14 7
    14
    12
    7
    1
    5
    12 1 14 7
    14
    12
    7
    1
    11
    12 1 14 7
    14
    12
    7
    1
    43

    queue.PriorityQueue6

    12 1 14 7
    14
    12
    7
    1
    16
    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))
    3
    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))
    3
    12 1 14 7
    14
    12
    7
    1
    192 * i + 20

    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))
    0
    12 1 14 7
    14
    12
    7
    1
    11
    12 1 14 7
    14
    12
    7
    1
    50

    Output:

    12 1 14 7
    14
    12
    7
    1

    12 1 14 7
    14
    12
    7
    1
    5
    12 1 14 7
    14
    12
    7
    1
    22223
    12 1 14 7
    14
    12
    7
    1
    24better implementation is to use Binary Heap which is typically used to implement a priority queue. Note that Python provides heapq in the library also.

    Time complexity: By using heap data structure to implement Priority Queues
    Insert Operation: O(log(n))
    Delete Operation: O(log(n))

    Làm thế nào để bạn thay đổi hàng đợi thành một danh sách trong Python?

    Việc thực hiện hàng đợi trong Python có thể được thực hiện bằng phương thức 'popleft ()' có trong thư viện. Trong khi xếp hàng. Hàng đợi thực hiện hàng đợi trong Python người ta có thể sử dụng 'get ()' để khử các phần tử từ hàng đợi đến danh sách/mảng một cách nhanh chóng.use 'get()' to deque the elements from the queue to a list/array quickly.

    Có hàng đợi ưu tiên trong Python không?

    Python cung cấp một triển khai tích hợp cấu trúc dữ liệu hàng đợi ưu tiên. Kể từ hàng đợi. Lớp ưu tiên cần duy trì thứ tự các yếu tố của nó, một cơ chế sắp xếp được yêu cầu mỗi khi một yếu tố mới được đưa ra. Python giải quyết điều này bằng cách sử dụng một đống nhị phân để thực hiện hàng đợi ưu tiên.. Since the queue. PriorityQueue class needs to maintain the order of its elements, a sorting mechanism is required every time a new element is enqueued. Python solves this by using a binary heap to implement the priority queue.

    Làm thế nào để bạn tạo một danh sách ưu tiên trong Python?

    Triển khai hàng đợi ưu tiên Python Để thực hiện hàng đợi ưu tiên trong Python, chúng ta phải khai báo một danh sách Python trống trong đó các yếu tố được chèn bằng phương thức append () của lớp danh sách.Danh sách sau đó được sắp xếp theo thứ tự tăng dần.Vòng lặp trong khi được sử dụng để truy xuất các phần tử bằng phương thức pop ().declare an empty Python list into which elements are inserted using the append() method of list class. The list is then sorted in ascending order. The While loop is used to retrieve the elements using the pop() method.

    Làm cách nào để đặt hàng đợi ưu tiên trong Python?

    Sử dụng Heapq, mô -đun FEAPQ trong Python có thể được sử dụng để thực hiện hàng đợi ưu tiên.Trong mã này, một đống được tạo và các phần tử (khóa ưu tiên, giá trị) được đẩy vào đống.Mô-đun FEAPQ thực hiện Min-HEAP theo mặc định.Yếu tố có khóa nhỏ nhất được coi là ưu tiên cao nhất trong min-heap.The heapq module in Python can be used to implement Priority Queue. In this code, a heap is created and the elements (priority key, value) are pushed into the heap. The heapq module implements min-heap by default. The element with the smallest key is considered to have the highest priority in min-heap.