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. Show
Hàng đợi trong PythonHà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ế.
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ú 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 PythonTrong 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 4 tích hợp. Lớp này hỗ trợ tất cả các chức năng cơ bản như 5 và 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ú Việc triển khai Python sườn của lớp ưu tiên mở rộng mô -đun Python 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 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 4 của nó, hãy xem tài liệu Python.Nhập khẩu ưu tiênLớp 4 là một phần của mô -đun 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.
Đ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.
Nếu bạn yêu cầu các chức năng khác trong thư viện 2, có thể nhập toàn bộ gói.
Trong trường hợp này, tên của mô -đun phải đi trước hàm tạo 4. Dòng sau đây tạo ra hàng đợi ưu tiên tương tự, ví dụ đầu tiên đã làm.
Cách sử dụng lớp ưu tiênLớp 4 chia sẻ hầu hết các phương pháp giống như lớp phụ huynh 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 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.
Ghi chú Giao diện 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.
Ghi chú Giao diện 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.ĐẦY ĐỦ: Hàm này trả về 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.
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 01.Thận trọngTệp: pri_queue.py
Bạn có thể chạy tệp bằng lệnh sau: 4Nhậ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 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.
Sự kết luậnHà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 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 5 và truy xuất bằng 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 tinBạ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 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ôngPython 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 pythonPython 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. |