Python kiểm tra xem mục có trong hàng ưu tiên không
Hàng đợi ưu tiên là một loại dữ liệu trừu tượng (ADT) giống như cấu trúc dữ liệu ngăn xếp hoặc hàng đợi thông thường, nhưng trong đó mỗi phần tử bổ sung có một mức độ ưu tiên được liên kết với nó. Trong hàng đợi ưu tiên, phần tử có mức ưu tiên cao được phục vụ trước phần tử có mức ưu tiên thấp. Nếu hai phần tử có cùng mức độ ưu tiên, chúng sẽ được phục vụ theo thứ tự của chúng trong hàng đợi Show
Mặc dù hàng đợi ưu tiên thường được triển khai với đống, nhưng về mặt khái niệm, chúng khác biệt với đống. Hàng đợi ưu tiên là một khái niệm trừu tượng giống như danh sách hoặc bản đồ; từ hàng đợi ưu tiên wiki Đoạn mã sau sử dụng hàng đợi ưu tiên đơn giản nhất try: import Queue as Q # ver. < 3.0 except ImportError: import queue as Q q = Q.PriorityQueue() q.put(10) q.put(1) q.put(5) while not q.empty(): print q.get(), đầu ra 1 5 10 Như chúng ta có thể thấy từ đầu ra, hàng đợi lưu trữ các phần tử theo mức độ ưu tiên chứ không phải theo thứ tự tạo phần tử. Lưu ý rằng tùy thuộc vào các phiên bản Python, tên của hàng đợi ưu tiên sẽ khác nhau. Vì vậy, chúng tôi đã sử dụng cặp thử và ngoại trừ để chúng tôi có thể điều chỉnh vùng chứa của mình theo phiên bản Hàng đợi ưu tiên không chỉ lưu trữ các nguyên hàm tích hợp sẵn mà còn bất kỳ đối tượng nào như trong phần tiếp theo Hàng đợi ưu tiên có thể lưu trữ các đối tượng như bộ dữ liệu try: import Queue as Q # ver. < 3.0 except ImportError: import queue as Q q = Q.PriorityQueue() q.put((10,'ten')) q.put((1,'one')) q.put((5,'five')) while not q.empty(): print q.get(), đầu ra (1, 'one') (5, 'five') (10, 'ten') Các đối tượng lớp C mẫu sử dụng __cmp__() Python không được gõ mạnh, vì vậy chúng tôi có thể lưu bất cứ thứ gì chúng tôi muốn. giống như chúng tôi đã lưu trữ một bộ (mức độ ưu tiên, điều) trong phần trước. Chúng ta cũng có thể lưu trữ các đối tượng lớp nếu chúng ta ghi đè phương thức __cmp__() try: import Queue as Q # ver. < 3.0 except ImportError: import queue as Q class Skill(object): def __init__(self, priority, description): self.priority = priority self.description = description print 'New Level:', description return def __cmp__(self, other): return cmp(self.priority, other.priority) q = Q.PriorityQueue() q.put(Skill(5, 'Proficient')) q.put(Skill(10, 'Expert')) q.put(Skill(1, 'Novice')) while not q.empty(): next_level = q.get() print 'Processing level:', next_level.description đầu ra New Level: Proficient New Level: Expert New Level: Novice Processing level: Novice Processing level: Proficient Processing level: Expert Heapq triển khai thuật toán sắp xếp heap tối thiểu phù hợp để sử dụng với danh sách của Python
|