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[]
0Hàng đợi ưu tiên có thể lưu trữ các đối tượng như Tuples:tuples:
priorities, item = pq.get[]
1Gợ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[]
2priorities, item = pq.get[]
3Gợ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[]
4priorities, item = pq.get[]
5