Hướng dẫn python priority queue custom class - lớp tùy chỉnh hàng đợi ưu tiên python

Bạn gặp may vì một triển khai đã tồn tại.

Đảm bảo tuân theo cấu trúc thông thường của các mục và đính kèm mức độ ưu tiên cho tất cả các mục được chèn vào hàng đợi bằng cách sử dụng một tuple của mẫu

priorities, item = pq.get[]
6.

Một ví dụ:

import Queue
import random
pq = Queue.PriorityQueue[]
todos = ["eat", "sleep", "python"]
# obvously replace random with your 
todos_with_priorities = [[[random.random[],], e] for e in todos]
for e in todos:
    pq.put[e]

Tiêu thụ hàng đợi như vậy:

priorities, item = pq.get[]

Để hình thành ngày càng nhiều ưu tiên phức tạp hơn, thêm nhiều thành viên vào cấu trúc tuple. Trong trường hợp của bạn, tuple phải là một cái gì đó như:

priorities, item = pq.get[]
7.

Tôi đã bắt gặp điều này bởi vì bạn có thể sử dụng

priorities, item = pq.get[]
8 này trong quá trình lựa chọn trong thuật toán A* [tức là quá trình bạn chọn nút có điểm F thấp nhất], để có được
priorities, item = pq.get[]
9 thay vì giải pháp
class Node[object]:
    def __init__[self, title, i, j]:
        self.title = title
        self.i = str[i]
        self.j = str[j]
        self.f = 0
        self.g = 0
        self.h = 0
        # no neighbors at first
        self.neighbors = []

    def __str__[self]:
        return ''

    def __repr__[self]:
        character = 'W' if self.title is '#' else 'O'
        return ''
0 truyền thống.selection process in the A* algorithm [i.e the process where you choose the node with the lowest f score], to get an
priorities, item = pq.get[]
9 instead of the traditional
class Node[object]:
    def __init__[self, title, i, j]:
        self.title = title
        self.i = str[i]
        self.j = str[j]
        self.f = 0
        self.g = 0
        self.h = 0
        # no neighbors at first
        self.neighbors = []

    def __str__[self]:
        return ''

    def __repr__[self]:
        character = 'W' if self.title is '#' else 'O'
        return ''
0 solution.

Vì chúng tôi đang chọn nút có điểm thấp nhất và hàng đợi ưu tiên giữ giá trị thấp nhất ngay từ đầu, sau đó chúng tôi có thể đạt được giải pháp

priorities, item = pq.get[]
9 này.

Đây là nút đầu tiên Node.py
node.py

class Node[object]:
    def __init__[self, title, i, j]:
        self.title = title
        self.i = str[i]
        self.j = str[j]
        self.f = 0
        self.g = 0
        self.h = 0
        # no neighbors at first
        self.neighbors = []

    def __str__[self]:
        return ''

    def __repr__[self]:
        character = 'W' if self.title is '#' else 'O'
        return ''

Nhập chế độ FullScreenen EXIT Mode FullScreen

Đừng bận tâm đến mã không cần thiết.

Đây là thứ hai và cuối cùng filepriority_item.py
priority_item.py

from dataclasses import dataclass, field
from typing import Any
from queue import PriorityQueue
from node import Node


@dataclass[order=True]
class PrioritizedItem:
    priority: int
    item: object = field[]

q = PriorityQueue[]
n = Node['a', 0, 0]
n.f = 1
n2 = Node['b', 0, 0]
n2.f = 0
n3 = Node['c', 0, 0]
n3.f = 2
q.put[PrioritizedItem[n.f, n]]
q.put[PrioritizedItem[n2.f, n2]]
q.put[PrioritizedItem[n3.f, n3]]
print[q.get[]]

Nhập chế độ FullScreenen EXIT Mode FullScreen

Đừng bận tâm đến mã không cần thiết.PrioritizedItem which will encompass my custom object.

Đây là thứ hai và cuối cùng filepriority_item.py

Trong tệp này, tôi tạo một ưu tiên mới sẽ bao gồm đối tượng tùy chỉnh của tôi.

Một ví dụ:

import Queue
import random
pq = Queue.PriorityQueue[]
todos = ["eat", "sleep", "python"]
# obvously replace random with your
todos_with_priorities = [[[random.random[], ], e] for e in todos]
for e in todos:
   pq.put[e]

Tiêu thụ hàng đợi như vậy:

priorities, item = pq.get[]


Gợi ý: 2

Đăng vào ngày 20 tháng 6 năm 2020, Ethan - 29 tháng 6, Steve Yonkeu - 20 tháng 7

class Node[object]:
   def __init__[self, title, i, j]:
   self.title = title
self.i = str[i]
self.j = str[j]
self.f = 0
self.g = 0
self.h = 0
# no neighbors at first
self.neighbors = []

def __str__[self]:
   return ''

def __repr__[self]:
   character = 'W'
if self.title is '#'
else 'O'
return ''

from dataclasses
import dataclass, field
from typing
import Any
from queue
import PriorityQueue
from node
import Node

@dataclass[order = True]
class PrioritizedItem:
   priority: int
item: object = field[]

q = PriorityQueue[]
n = Node['a', 0, 0]
n.f = 1
n2 = Node['b', 0, 0]
n2.f = 0
n3 = Node['c', 0, 0]
n3.f = 2
q.put[PrioritizedItem[n.f, n]]
q.put[PrioritizedItem[n2.f, n2]]
q.put[PrioritizedItem[n3.f, n3]]
print[q.get[]]

if any[neighbor == item.item
   for item in open_queue.queue]:


Gợi ý: 3

Cập nhật lần cuối: 01 tháng 6 năm 2022

Đầu ra:

33 6.1
20 6
23 5.6
30 5.5
25 5


Gợi ý: 4

Mặc dù hàng đợi ưu tiên thường được thực hiện với đống, nhưng chúng khác biệt về mặt khái niệm với đống. Hàng đợi ưu tiên là một khái niệm trừu tượng như danh sách hoặc bản đồ; Như một danh sách có thể được thực hiện với một danh sách được liên kết hoặc một mảng, hàng đợi ưu tiên có thể được thực hiện với một đống hoặc nhiều phương thức khác như một mảng không có thứ tự. Là thuật toán hàng đợi ưu tiên., Hàng đợi ưu tiên là một loại dữ liệu trừu tượng [ADT] giống như một hàng đợi hoặc cấu trúc dữ liệu ngăn xếp thông thường, nhưng cũng là mỗi phần tử có mức độ ưu tiên liên quan đến nó. Trong hàng đợi ưu tiên, một yếu tố có mức độ ưu tiên cao được phục vụ trước một yếu tố có mức độ ưu tiên thấp. 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. . Chúng ta cũng có thể lưu trữ các đối tượng lớp nếu chúng ta ghi đè lên phương thức __cmp __ []:

Mã sau đây là cách sử dụng đơn giản nhất của hàng đợi ưu tiên.

priorities, item = pq.get[]
0

Hàng đợi ưu tiên có thể lưu trữ các đối tượng như Tuples:tuples:

priorities, item = pq.get[]
1


Gợi ý: 5

Vì lớp hàng đợi.priorativequeue 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. Loại cấu trúc dữ liệu hàng đợi. Thay vì khử phần yếu tố lâu đời nhất, một loại hàng đợi ưu tiên và các yếu tố dequeues dựa trên các ưu tiên của chúng., Hàng đợi ưu tiên được sử dụng để xử lý các vấn đề lập lịch trong đó một số nhiệm vụ được ưu tiên hơn các nhiệm vụ khác.

Để chèn, hàng đợi ưu tiên sử dụng hàm

class Node[object]:
    def __init__[self, title, i, j]:
        self.title = title
        self.i = str[i]
        self.j = str[j]
        self.f = 0
        self.g = 0
        self.h = 0
        # no neighbors at first
        self.neighbors = []

    def __str__[self]:
        return ''

    def __repr__[self]:
        character = 'W' if self.title is '#' else 'O'
        return ''
5 theo cách sau:

priorities, item = pq.get[]
2

priorities, item = pq.get[]
3


Gợi ý: 6

Người xây dựng cho một hàng đợi ưu tiên. MaxSize là một số nguyên đặt giới hạn trên đối với số lượng mục có thể được đặt trong hàng đợi. Chèn sẽ chặn khi đã đạt được kích thước này, cho đến khi các mục hàng đợi được tiêu thụ. Nếu tối đa nhỏ hơn hoặc bằng 0, kích thước hàng đợi là vô hạn., Hàm tạo cho hàng đợi LIFO. MaxSize là một số nguyên đặt giới hạn trên đối với số lượng mục có thể được đặt trong hàng đợi. Chèn sẽ chặn khi đã đạt được kích thước này, cho đến khi các mục hàng đợi được tiêu thụ. Nếu tối đa nhỏ hơn hoặc bằng 0, kích thước hàng đợi là vô hạn., Hàm tạo cho hàng đợi FIFO. MaxSize là một số nguyên đặt giới hạn trên đối với số lượng mục có thể được đặt trong hàng đợi. Chèn sẽ chặn khi đã đạt được kích thước này, cho đến khi các mục hàng đợi được tiêu thụ. Nếu tối đa nhỏ hơn hoặc bằng 0, kích thước hàng đợi là vô hạn., Nếu các phần tử dữ liệu không thể so sánh được, dữ liệu có thể được bọc trong một lớp bỏ qua mục dữ liệu và chỉ so sánh số ưu tiên:

priorities, item = pq.get[]
4

priorities, item = pq.get[]
5


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

Hàng đợi ưu tiên Python Với bộ so sánh tùy chỉnh trong Hàng đợi ưu tiên Python, một bộ so sánh tùy chỉnh có thể được sử dụng để sắp xếp hàng đợi dựa trên các giá trị do người dùng xác định.Ví dụ: chúng tôi tạo một hàng đợi ưu tiên bằng Heapq.Sau đó, chúng tôi sắp xếp heapq bằng phương thức Sắp xếp [].Bây giờ chúng ta hãy sắp xếp hàng đợi của chúng tôi dựa trên bộ so sánh tùy chỉnh của chúng tôi.a custom comparator can be used to sort the queue based on user-defined values. For example, we create a Priority Queue using heapq. Then we sort the heapq using the sorted[] method. Now let us sort our queue based on our custom comparator.

Là hàng đợi ưu tiên Python an toàn?

Ưu tiên trong Python 3].Nó hoàn toàn an toàn.It is fully thread-safe.

Có hàng đợi ưu tiên cho phép nhân đôi Python?

Có, trong C ++ ưu tiên_queue, chúng ta có thể có các giá trị trùng lặp..

Làm cách nào để loại bỏ một phần tử khỏi hàng đợi ưu tiên trong Python?

Mô -đun FEAPQ sử dụng danh sách Python tiêu chuẩn làm cấu trúc dữ liệu cơ bản, do đó bạn chỉ có thể sử dụng phương thức danh sách tiêu chuẩn Remove [] và Heapify [] một lần nữa sau này.Lưu ý rằng điều này sẽ cần thời gian tuyến tính mặc dù.Bạn có thể cải thiện hiệu suất của việc tăng cường một lần nữa bằng cách sử dụng chức năng không có giấy tờ.use the standard list method remove[] and heapify[] again after this. Note that this will need linear time though. You could improve the performance of heapifying again by using the undocumented function heapify.

Bài Viết Liên Quan

Chủ Đề