Hướng dẫn does python have built in priority queue? - python có được tích hợp trong hàng đợi ưu tiên không?

Trong Python, hàng đợi thường được sử dụng để xử lý các mục bằng chiến lược đầu tiên trong (FIFO) đầu tiên. Tuy nhiên, thường cần phải tính đến mức độ ưu tiên của từng mục khi xác định đơn đặt hàng xử lý. Một hàng đợi truy xuất và loại bỏ các mục dựa trên mức độ ưu tiên của chúng cũng như thời gian đến của chúng được gọi là hàng đợi ưu tiên. Ưu tiên có thể phức tạp, nhưng may mắn là các hàng đợi ưu tiên Python có thể được thực hiện dễ dàng và hiệu quả bằng cách sử dụng mô-đun tích hợp. Hướng dẫn này giới thiệu hàng đợi ưu tiên Python và giải thích cách thực hiện nó trong Python 3.

Hàng đợi trong Python

Hàng đợi là gì?

Hàng đợi là một cấu trúc dữ liệu lập trình cơ bản. Cấu trúc dữ liệu được sử dụng để tổ chức, quản lý và lưu trữ dữ liệu. Họ làm cho các chương trình dễ hiểu và viết hơn, và thường nhanh hơn và đáng tin cậy hơn nữa.

Về mặt khái niệm, một hàng đợi đại diện cho các mục dữ liệu như một danh sách được đặt hàng. Các mặt hàng được xóa khỏi danh sách theo cùng một thứ tự họ đã đến. Hàng đợi là một khái niệm quen thuộc trong cuộc sống hàng ngày. Mỗi khi một nhóm người xếp hàng cho một cái gì đó, họ tạo thành một hàng đợi. Ví dụ, một dòng người tại một ngân hàng hoặc một quán cà phê là một hàng đợi. Người đầu tiên đến là ở phía trước của hàng đợi. Họ là người tiếp theo được phục vụ. Khi một khách hàng mới đến, họ tham gia vào phía sau của hàng đợi.

Về mặt máy tính, hàng đợi được phục vụ bằng cách sử dụng các hoạt động đẩy và pop. Các mục được đẩy lên hàng đợi và được bật từ hàng đợi khi chúng được xử lý. Hoạt động POP thường loại bỏ các mục khỏi hàng đợi. Tuy nhiên, đôi khi có thể nhìn trộm vào lối vào nằm ở phía trước hàng đợi mà không cần gỡ bỏ nó.

Python hỗ trợ hàng đợi thông qua các thư viện rộng lớn của nó. Các lớp học và thói quen tích hợp xử lý tất cả các xử lý thường xuyên. Bạn chỉ phải tạo một đối tượng hàng đợi và gọi các phương thức để thêm các mục mới và xóa các mục cũ nhất. Hàng đợi thường là lựa chọn tốt nhất cho các hoạt động bao gồm các nhiệm vụ lập lịch và xử lý các yêu cầu đến.

Ví dụ sau đây minh họa cách các hàng đợi hoạt động trên dữ liệu thực tế.

  • Để bắt đầu, các mục
    q = queue.PriorityQueue()
    
    3,
    q = queue.PriorityQueue()
    
    4,
    q = queue.PriorityQueue()
    
    5 và
    q = queue.PriorityQueue()
    
    6 đến theo thứ tự được trình bày. Tất cả bốn mục được thêm vào hàng đợi theo thứ tự họ đến.
  • Tại thời điểm này, một mặt hàng được chọn để xử lý. Mục
    q = queue.PriorityQueue()
    
    3 được chọn và xóa khỏi hàng đợi. Nó được chọn vì nó đến trước và ở phía trước hàng đợi.
  • Tiếp theo, mục
    q = queue.PriorityQueue()
    
    8 đến. Nó được thêm vào mặt sau của hàng đợi.
  • Hai mục nữa được chọn và loại bỏ. Các mục
    q = queue.PriorityQueue()
    
    4 và
    q = queue.PriorityQueue()
    
    5 được lấy vì chúng chiếm hai vị trí đầu tiên của hàng đợi.
  • Hiện có hai mục trong hàng đợi. Mục
    q = queue.PriorityQueue()
    
    6 nằm ở phía trước và sẽ là mục theo lịch trình tiếp theo, tiếp theo là
    q = queue.PriorityQueue()
    
    8. Mục tiếp theo sẽ đến sẽ được thêm vào cuối hàng đợi, sau
    q = queue.PriorityQueue()
    
    8.

Hàng đợi có thể tương phản với ngăn xếp. Một ngăn xếp cũng là một cấu trúc dữ liệu dựa trên danh sách, nhưng nó sử dụng sơ đồ cuối cùng trong đầu tiên (LIFO). Mục gần đây nhất để đến luôn là mục tiếp theo được chọn. Các ngăn xếp ít rõ ràng hơn trong cuộc sống hàng ngày, nhưng được sử dụng bất cứ khi nào hiệu quả được ưu tiên hơn sự công bằng nghiêm ngặt. Chẳng hạn, các ngăn xếp được sử dụng để lưu trữ và lấy các nguồn cung cấp không dễ hỏng. Nguồn cung cấp mới được đặt trên đầu các đơn đặt hàng cũ. Khi cần nhiều cổ phiếu, các mặt hàng hàng đầu được loại bỏ trước. Trong lập trình, hầu hết các trình biên dịch sử dụng rộng rãi các ngăn xếp. Chúng cũng là lựa chọn tốt nhất để đánh giá các biểu thức toán học, vì tầm quan trọng của thứ tự hoạt động.

Một đống là gì?

Hàng đợi có hiệu quả trong Python vì chúng được thực hiện dưới dạng đống. Một đống là một loại đặc biệt của cấu trúc dữ liệu dựa trên cây. Cây là các cấu trúc dữ liệu phân cấp chứa nút cha, được gọi là gốc. Rễ có thể có các nút con và mỗi nút trẻ cũng có thể có con. Điều này cho phép cây phát triển hữu cơ thành nhiều lớp. Thoát thường được thực hiện dưới dạng cây nhị phân. Trong một cây nhị phân, mỗi nút không thể có nhiều hơn hai đứa con.

Hai loại đống là đống tối đa và các đống tối thiểu. Trong một đống tối đa, giá trị được lưu trữ trong nút cha lớn hơn giá trị được lưu trữ trong bất kỳ nút con nào của nó. Một đống tối thiểu hoạt động theo cách ngược lại. Nút cha chứa một giá trị nhỏ hơn bất kỳ con nào của nó. Mối quan hệ này giữ cho mỗi nút ở mọi cấp độ của đống. Điều này có nghĩa là các giá trị ngày càng nhỏ hơn ở mỗi lớp thấp hơn trong một đống tối đa hoặc lớn hơn trong một đống tối thiểu.

Thoát nước là một phương pháp rất hiệu quả để thao tác dữ liệu được đặt hàng. Chúng đặc biệt hữu ích để lấy vật phẩm có giá trị cao nhất hoặc thấp nhất. Nói chung, các thuật toán được sử dụng trên một heap có độ phức tạp thời gian không đổi hoặc logarit. Điều này rất tốt vì tăng trưởng thuật toán tăng khá chậm khi kích thước của tập dữ liệu tăng lên. Và, tất nhiên, các thuật toán thời gian liên tục hoàn toàn không tăng.

Ghi chú

Trong khoa học máy tính, ký hiệu B lớn được sử dụng để mô tả cách thức thực hiện thời gian tăng theo kích thước của tập dữ liệu. Hầu hết các hoạt động Heap đều có độ phức tạp thời gian O (log n).

Mặc dù đống rất hữu ích cho việc đặt hàng và tổ chức dữ liệu, nhưng chúng có nhược điểm. Họ phải được giữ cân bằng. Điều này có nghĩa là công việc bổ sung là cần thiết bất cứ khi nào các nút được thêm hoặc loại bỏ. Các đống hiệu quả hơn với các bộ dữ liệu tương đối tĩnh, nhưng vẫn có thể được sử dụng khi các nút thường xuyên được thêm và xóa.

Xếp hàng ưu tiên là gì?

Một hàng đợi FIFO cơ bản là hàng đợi dễ nhất và đơn giản nhất để sử dụng. Nó đôi khi được gọi là một hàng đợi nghiêm ngặt. Trong trường hợp này, mục cũ nhất phải luôn luôn được loại bỏ trước tiên không có ngoại lệ. Đôi khi, giới hạn này là quá không linh hoạt. Tuy nhiên, có thể thêm ưu tiên cho cấu trúc hàng đợi. Điều này cho phép một mục nhập lên phía trước của hàng đợi mặc dù đây không phải là lần đầu tiên đến.

Một hàng đợi ưu tiên tuân theo các nguyên tắc xếp hàng cơ bản, nhưng duy trì nhiều loại phụ cho các cấp độ ưu tiên khác nhau. Nó sắp xếp trước tập hợp các mục dựa trên các ưu tiên của họ. Các mục ưu tiên cao nhất luôn được phục vụ trước, ngay cả khi các mặt hàng ưu tiên thấp hơn đã đến sớm hơn. Trong thực tế, việc thực hiện nội bộ của hàng đợi ưu tiên thường không xây dựng nhiều danh sách. Thay vào đó, mức độ ưu tiên được sử dụng để xác định nơi chèn mặt hàng mới. Điều này có nghĩa là mặt trước của hàng đợi luôn được bảo dưỡng trước, nhưng các mục mới không tự động nhập hàng đợi ở phía sau. Trong thực tế, có thể đặt một mục ưu tiên rất cao được đặt ở phía trước của hàng đợi.

Hàng đợi ưu tiên là hữu ích trong nhiều tình huống thực tế. Ví dụ, các hãng hàng không thực thi xếp hàng ưu tiên khi lên máy bay. Khách hàng của lớp kinh doanh tạo thành hàng đợi ưu tiên cao nhất và được lên tàu trước. Một hoặc nhiều hàng đợi giá vé thông thường được ưu tiên tiếp theo, tiếp theo là bất kỳ hành khách dự phòng hoặc giá vé thấp. Nếu một khách hàng kinh doanh đến sau khi hành khách giá vé thông thường đã lên máy bay, họ sẽ đi đến phía trước của dòng. Xếp hàng ưu tiên cũng được sử dụng cho mục đích xử lý tại bệnh viện hoặc cho các yêu cầu bảo trì phục vụ.

Trong các tình huống tính toán, các hệ điều hành đa luồng sử dụng hàng đợi ưu tiên. Các nhiệm vụ ưu tiên cao hơn được phân bổ trước khi các nhiệm vụ nền. Ví dụ: các nhấp chuột của chuột được ưu tiên hơn so với việc hiển thị một trang web. Trong các bộ định tuyến mạng, lưu lượng truy cập và cập nhật định tuyến được xử lý trước khi lưu lượng người dùng.

Lớp xếp hàng ưu tiên Python

Trong Python, có thể xây dựng hàng đợi ưu tiên của riêng bạn bằng danh sách Python. Tuy nhiên, tốt hơn là sử dụng lớp

q = PriorityQueue(100)
4 tích hợp. Lớp này hỗ trợ tất cả các chức năng cơ bản như
q = PriorityQueue(100)
5 và
q = PriorityQueue(100)
6 một cách rất hiệu quả. Python tự động chèn và loại bỏ các mục dựa trên mức độ ưu tiên của chúng và duy trì cấu trúc bên trong của hàng đợi.

Một hàng đợi ưu tiên Python luôn loại bỏ và trả về mục ưu tiên cao nhất trong hàng đợi. Nếu hai mục có cùng mức độ ưu tiên, Python sẽ loại bỏ các mục đã đến trước. Đối với một tuple có cả trường ưu tiên và dữ liệu, Python trước tiên so sánh mức độ ưu tiên và sau đó là mục dữ liệu.

Ghi chú

Để tránh sử dụng trường dữ liệu trong so sánh, hãy đặt lớp

q = PriorityQueue(100)
4 trong trình bao bọc và ghi đè hành vi mặc định của nó. Tham khảo tài liệu lớp Python ưu tiên để biết thêm chi tiết về kỹ thuật này.

Việc triển khai Python sườn của lớp ưu tiên mở rộng mô -đun Python

q = PriorityQueue(100)
8, dựa trên thiết kế đống nhị phân. Rất dễ dàng để lấy và loại bỏ vật phẩm ưu tiên cao nhất khỏi một đống nhị phân. Các phần chèn và xóa có độ phức tạp về thời gian của O (log n) ngay cả khi các hoạt động cân bằng lại được tính đến. Điều này có nghĩa là lớp
q = PriorityQueue(100)
4 vẫn khá hiệu quả ngay cả với các bộ dữ liệu lớn. Trong triển khai HEAP tối đa, mục ưu tiên cao nhất ở phía trước hàng đợi luôn có thể truy cập ngay lập tức ở đầu đống. Chèn một mục vào hàng đợi có phần phức tạp hơn, nhưng vẫn có thể được thực hiện trong thời gian logarit.

Để biết thêm chi tiết về cách Python thực hiện lớp

q = PriorityQueue(100)
4 của nó, hãy xem tài liệu Python.

Nhập khẩu ưu tiên

Lớp

q = PriorityQueue(100)
4 là một phần của mô -đun
del q
2. Nó được mô tả trong tài liệu Hàng đợi Python và có thể được nhập bằng lệnh sau.

from queue import PriorityQueue

Điều này cho phép hàm tạo và tất cả các phương thức lớp được truy cập trực tiếp mà không cần chi tiêu tên của mô -đun. Ví dụ: hàng đợi ưu tiên có thể được tạo bằng lệnh sau.

q = PriorityQueue()

Nếu bạn yêu cầu các chức năng khác trong thư viện

del q
2, có thể nhập toàn bộ gói.

import queue

Trong trường hợp này, tên của mô -đun phải đi trước hàm tạo

q = PriorityQueue(100)
4. Dòng sau đây tạo ra hàng đợi ưu tiên tương tự, ví dụ đầu tiên đã làm.

q = queue.PriorityQueue()

Cách sử dụng lớp ưu tiên

Lớp

q = PriorityQueue(100)
4 chia sẻ hầu hết các phương pháp giống như lớp phụ huynh
del q
6. Tài liệu hàng đợi Python cung cấp thông tin chi tiết về hàm tạo lớp và tất cả các phương thức.

Các nhà phát triển có thể tạo một đối tượng

q = PriorityQueue(100)
4 bằng cách sử dụng hàm tạo lớp. Đồng thời, họ có thể cung cấp một tham số để đặt kích thước tối đa cho hàng đợi. Lệnh sau đây tạo ra một hàng đợi ưu tiên có thể chứa 100 đối tượng.

q = PriorityQueue(100)
Ghi chú

Các ví dụ trong phần này giả định lớp

q = PriorityQueue(100)
4 đã được nhập bằng
del q
9.

Giao diện

q = PriorityQueue(100)
4 khá đơn giản để sử dụng. Danh sách sau đây mô tả các phương pháp quan trọng nhất.

  • trống: Hàm này trả về
    from queue import PriorityQueue
    
    1 nếu hàng đợi trống và không chứa các mục. Nếu không, nó trả về
    from queue import PriorityQueue
    
    2. Hàm này thường được sử dụng để xác định xem có cần thêm các hoạt động
    q = PriorityQueue(100)
    
    6 để phục vụ hàng đợi hay không.
    : This function returns
    from queue import PriorityQueue
    
    1 if the queue is empty and contains no items. Otherwise, it returns
    from queue import PriorityQueue
    
    2. This function is often used to determine if more
    q = PriorityQueue(100)
    
    6 operations are required to service the queue.
  • ĐẦY ĐỦ: Hàm này trả về
    from queue import PriorityQueue
    
    1 nếu hàng đợi đã đạt đến kích thước tối đa và không có thêm không gian cho các mục bổ sung. Một hàng đợi thường chỉ có thể đạt đến toàn bộ công suất nếu giới hạn kích thước đã được cấu hình. Mặt khác, kích thước hàng đợi chỉ được giới hạn bởi bộ nhớ có sẵn.
    : This function returns
    from queue import PriorityQueue
    
    1 if the queue has reached its maximum size and has no more space for additional entries. A queue can typically only reach full capacity if a size limit has been configured. Otherwise, the queue size is bounded only by available memory.
  • Nhận: Điều này loại bỏ và trả về mục ưu tiên cao nhất từ ​​hàng đợi. Các tham số bổ sung có thể được cung cấp cho biết liệu Python có nên chặn chờ một mục và thời gian phải chờ. Mặc định cho tham số
    from queue import PriorityQueue
    
    5 là
    from queue import PriorityQueue
    
    1, trong khi
    from queue import PriorityQueue
    
    7 mặc định là
    from queue import PriorityQueue
    
    8. Theo mặc định, các khối yêu cầu
    q = PriorityQueue(100)
    
    6 đang chờ mãi mãi cho mục tiếp theo đến.
    : This removes and returns the highest priority item from the queue. Additional parameters can be supplied indicating whether Python should block waiting for an item and how long it must wait. The default for the
    from queue import PriorityQueue
    
    5 parameter is
    from queue import PriorityQueue
    
    1, while
    from queue import PriorityQueue
    
    7 defaults to
    from queue import PriorityQueue
    
    8. By default, a
    q = PriorityQueue(100)
    
    6 request blocks waiting forever for the next item to arrive.
  • Tối đa: Phương pháp này trả về kích thước tối đa của hàng đợi. Nếu không có kích thước tối đa, nó sẽ trả về
    q = PriorityQueue()
    
    0.
    : This method returns the maximum size of the queue. If there is no maximum size, it returns
    q = PriorityQueue()
    
    0.
  • Đặt: Phương pháp này thêm một mục với mức độ ưu tiên được chỉ định cho hàng đợi ưu tiên. Các nhà phát triển có thể thêm một giá trị duy nhất để hoạt động là mức độ ưu tiên hoặc một tuple ở dạng
    q = PriorityQueue()
    
    1. Một tuple Python là một danh sách được đặt hàng và bất biến. Tương tự như phương thức
    q = PriorityQueue(100)
    
    6, các tham số
    from queue import PriorityQueue
    
    5 và
    from queue import PriorityQueue
    
    7 có thể được chuyển đến phương thức. Các mặc định là
    from queue import PriorityQueue
    
    1 và
    from queue import PriorityQueue
    
    8. Nếu hàng đợi đầy đủ, phương thức
    q = PriorityQueue(100)
    
    5 chặn cho đến khi nó hết thời gian chờ một khe để có sẵn.
    : This method adds an item with the specified priority to the priority queue. Developers can add either a single value to function as the priority, or a tuple in the form
    q = PriorityQueue()
    
    1. A Python tuple is an ordered and immutable list. Similarly to the
    q = PriorityQueue(100)
    
    6 method,
    from queue import PriorityQueue
    
    5 and
    from queue import PriorityQueue
    
    7 parameters can be passed to the method. The defaults are
    from queue import PriorityQueue
    
    1 and
    from queue import PriorityQueue
    
    8. If the queue is full, the
    q = PriorityQueue(100)
    
    5 method blocks until it times out waiting for a slot to become available.
  • Qsize: Phương thức này trả về số lượng các mục hiện tại trong hàng đợi.: This method returns the number of items currently in the queue.
Ghi chú

Các ví dụ trong phần này giả định lớp

q = PriorityQueue(100)
4 đã được nhập bằng
del q
9.

Giao diện

q = PriorityQueue(100)
4 khá đơn giản để sử dụng. Danh sách sau đây mô tả các phương pháp quan trọng nhất.

del q

trống: Hàm này trả về from queue import PriorityQueue 1 nếu hàng đợi trống và không chứa các mục. Nếu không, nó trả về from queue import PriorityQueue 2. Hàm này thường được sử dụng để xác định xem có cần thêm các hoạt động q = PriorityQueue(100) 6 để phục vụ hàng đợi hay không.

ĐẦY ĐỦ: Hàm này trả về

from queue import PriorityQueue
1 nếu hàng đợi đã đạt đến kích thước tối đa và không có thêm không gian cho các mục bổ sung. Một hàng đợi thường chỉ có thể đạt đến toàn bộ công suất nếu giới hạn kích thước đã được cấu hình. Mặt khác, kích thước hàng đợi chỉ được giới hạn bởi bộ nhớ có sẵn.

  1. Nhận: Điều này loại bỏ và trả về mục ưu tiên cao nhất từ ​​hàng đợi. Các tham số bổ sung có thể được cung cấp cho biết liệu Python có nên chặn chờ một mục và thời gian phải chờ. Mặc định cho tham số

    from queue import PriorityQueue
    
    5 là
    from queue import PriorityQueue
    
    1, trong khi
    from queue import PriorityQueue
    
    7 mặc định là
    from queue import PriorityQueue
    
    8. Theo mặc định, các khối yêu cầu
    q = PriorityQueue(100)
    
    6 đang chờ mãi mãi cho mục tiếp theo đến.

    from queue import PriorityQueue
    
  2. Tối đa: Phương pháp này trả về kích thước tối đa của hàng đợi. Nếu không có kích thước tối đa, nó sẽ trả về

    q = PriorityQueue()
    
    0.

    Đặt: Phương pháp này thêm một mục với mức độ ưu tiên được chỉ định cho hàng đợi ưu tiên. Các nhà phát triển có thể thêm một giá trị duy nhất để hoạt động là mức độ ưu tiên hoặc một tuple ở dạng
    q = PriorityQueue()
    
    1. Một tuple Python là một danh sách được đặt hàng và bất biến. Tương tự như phương thức
    q = PriorityQueue(100)
    
    6, các tham số
    from queue import PriorityQueue
    
    5 và
    from queue import PriorityQueue
    
    7 có thể được chuyển đến phương thức. Các mặc định là
    from queue import PriorityQueue
    
    1 và
    from queue import PriorityQueue
    
    8. Nếu hàng đợi đầy đủ, phương thức
    q = PriorityQueue(100)
    
    5 chặn cho đến khi nó hết thời gian chờ một khe để có sẵn.
  3. Qsize: Phương thức này trả về số lượng các mục hiện tại trong hàng đợi.

    q.put((2, "Smith"))
    q.put((1, "Jones"))
    q.put((4, "Wilson"))
    
  4. Một số lệnh

    q = PriorityQueue(100)
    
    4, bao gồm
    q = PriorityQueue()
    
    9,
    q.put((2, "Smith"))
    q.put((1, "Jones"))
    q.put((4, "Wilson"))
    
    0 và
    q.put((2, "Smith"))
    q.put((1, "Jones"))
    q.put((4, "Wilson"))
    
    1 có thể phải tuân theo các điều kiện chủng tộc khi nhiều quy trình được sử dụng.

     next = q.get()
     print(next)
    
    q = PriorityQueue()
    
    0
  5. Một hàng đợi có thể bị xóa bằng lệnh

    q.put((2, "Smith"))
    q.put((1, "Jones"))
    q.put((4, "Wilson"))
    
    2.

    q = PriorityQueue()
    
    1
    q = PriorityQueue()
    
    2
    q = PriorityQueue()
    
    3
    q = PriorityQueue()
    
    2
  6. Một ví dụ về hàng đợi ưu tiên Python

    q = PriorityQueue()
    
    5
  7. Ví dụ trong phần này trình bày cách thực hiện hàng đợi ưu tiên Python cho hành khách hàng không sử dụng lớp

    q = PriorityQueue(100)
    
    4. Nó giải thích cách tạo hàng đợi, cách thêm và xóa các mục mới và cách xóa tất cả các mục còn lại khỏi hàng đợi.

    q = PriorityQueue()
    
    6
    q = PriorityQueue()
    
    7
  8. Nhập gói

    q = PriorityQueue(100)
    
    4 từ mô -đun
    del q
    
    2.

    Ghi chú

    Nếu

    q = PriorityQueue(100)
    
    6 được sử dụng trên hàng đợi trống với cài đặt mặc định, nó sẽ bị chặn cho đến khi có sẵn một mục. Để tránh bế tắc, điều quan trọng là phải đặt tham số
    from queue import PriorityQueue
    
    5 thành
    from queue import PriorityQueue
    
    2 hoặc trước tiên để xác minh xem hàng đợi có còn chứa nhiều mục hơn không.

    q = PriorityQueue()
    
    8
    q = PriorityQueue()
    
    9
  9. Tại thời điểm này, hàng đợi nên trống.

    import queue
    
    0
    import queue
    
    1

Các hướng dẫn này có thể được kết hợp với nhau để tạo thành chương trình

q = PriorityQueue()
01.

Thận trọng

Không đặt tên cho chương trình này

q = PriorityQueue()
02. Điều này sẽ mâu thuẫn với mô -đun
del q
2 thực tế và ẩn giao diện thực tế. Lỗi này tạo ra lỗi
q = PriorityQueue()
04 khi chạy.

Tệp: pri_queue.py

import queue
2
import queue
3

Bạn có thể chạy tệp bằng lệnh sau:

import queue
4

Nhận được kích thước của một hàng đợi ưu tiên trong Python

Để có được kích thước của hàng đợi Python, hãy sử dụng lệnh

q.put((2, "Smith"))
q.put((1, "Jones"))
q.put((4, "Wilson"))
1. Ví dụ sau đây cho thấy cách xác định kích thước của bất kỳ hàng đợi nào trong Python.

  1. Tương tự như ví dụ trước, nhập lớp

    q = PriorityQueue(100)
    
    4 và tạo đối tượng
    q = PriorityQueue(100)
    
    4.

    import queue
    
    5
  2. Thêm một vài mục vào hàng đợi với các ưu tiên khác nhau bằng cách sử dụng thói quen

    q = PriorityQueue(100)
    
    5.

    import queue
    
    6
  3. Xác minh kích thước của hàng đợi ưu tiên bằng phương pháp Python từ

    q.put((2, "Smith"))
    q.put((1, "Jones"))
    q.put((4, "Wilson"))
    
    1.

    import queue
    
    7
    import queue
    
    8
  4. Thêm một mục mới vào hàng đợi và xác nhận lại kích thước hàng đợi. Nó đã tăng lên

    q = PriorityQueue()
    
    10.

    import queue
    
    9
    q = queue.PriorityQueue()
    
    0
  5. Xóa một mục khỏi hàng đợi bằng lệnh

    q = PriorityQueue(100)
    
    6. Thói quen
    q.put((2, "Smith"))
    q.put((1, "Jones"))
    q.put((4, "Wilson"))
    
    1 xác nhận kích thước hàng đợi trở lại
    q = PriorityQueue()
    
    13.

    q = queue.PriorityQueue()
    
    1
    import queue
    
    8

Sự kết luận

Hàng đợi Python là một cấu trúc dữ liệu quan trọng xử lý một danh sách các mục theo cách FIFO. Mặc dù hàng đợi truyền thống tuân theo thuật toán FIFO nghiêm ngặt, hàng đợi ưu tiên Python có thể ưu tiên các mục nhập danh sách. Điều này cho phép các mục ưu tiên cao được xử lý trước khi các mục ưu tiên thấp hơn đến sớm hơn.

Python bao gồm việc triển khai hàng đợi ưu tiên như là một phần của mô -đun

del q
2 của nó. Nó quản lý hàng đợi ưu tiên bằng cách sử dụng cấu trúc dữ liệu heap. Trong một đống tối đa, giá trị của nút cha lớn hơn giá trị được lưu trữ ở bất kỳ con nào của nó. Các đống giúp dễ dàng truy cập vào mục ưu tiên cao nhất và thậm chí các phần chèn tương đối hiệu quả với độ phức tạp về thời gian logarit. Hàng đợi ưu tiên Python có giao diện đơn giản và dễ hiểu. Các mục có thể được chèn bằng
q = PriorityQueue(100)
5 và truy xuất bằng
q = PriorityQueue(100)
6. Để biết thêm thông tin về hàng đợi Python, hãy xem tài liệu hàng đợi Python chính thức.

Thêm thông tin

Bạn có thể muốn tham khảo các tài nguyên sau đây để biết thêm thông tin về chủ đề này. Mặc dù những thứ này được cung cấp với hy vọng rằng chúng sẽ hữu ích, xin lưu ý rằng chúng tôi không thể chứng minh cho độ chính xác hoặc tính kịp thời của các vật liệu được lưu trữ bên ngoài.

  • Trang Wikipedia về hàng đợi ưu tiên
  • Giải thích về ký hiệu o lớn
  • Tài liệu xếp hàng Python
  • Tài liệu ưu tiên Python
  • Tài liệu Python Heapq

Trang này ban đầu được xuất bản vào thứ Sáu, ngày 17 tháng 6 năm 2022.

Python có được xây dựng không

Python cung cấp hàng đợi lớp như một mô -đun thường được tạo bằng các ngôn ngữ như C/C ++ và Java.Khởi tạo một biến đến kích thước tối đa của tối đa.Tối đa hóa bằng 0 '0' có nghĩa là hàng đợi vô hạn.Hàng đợi này tuân theo quy tắc của FIFO. which has to be generally created in languages such as C/C++ and Java. Initializes a variable to a maximum size of maxsize. A maxsize of zero '0' means a infinite queue. This Queue follows FIFO rule.

Ưu tiên trong Python là gì?

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.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.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.An element with high priority is dequeued before an element with low priority. If two elements have the same priority, they are served according to their order in the queue.

Hàng đợi ưu tiên có tự động sắp xếp Python không?

Một hàng đợi ưu tiên không được cho là sắp xếp.Hàng đợi ưu tiên chỉ đảm bảo rằng khi bạn gọi get (), nó sẽ trả lại cho bạn mục ưu tiên cao nhất.. The priority queue only guarantees that when you call get() , it returns you the highest priority item.

Là chủ đề hàng đợi ưu tiên python

Python Hàng đợi ưu tiên là an toàn cho luồng, nhưng FEAPQ không đảm bảo an toàn cho luồng.PriorityQueue is thread-safe, but heapq doesn't guarantee thread safety.