Hàng đợi ưu tiên Python:Hướng dẫn
Hàng đợi ưu tiên trong Python lưu trữ dữ liệu theo một thứ tự cụ thể. Có hai cách để triển khai hàng đợi ưu tiên trong Python:sử dụng lớp hàng đợi và sử dụng mô-đun heapq.
Bạn có thể muốn sắp xếp dữ liệu dựa trên giá trị của từng mục trong danh sách. Ví dụ:bạn có thể muốn giá trị cao nhất xuất hiện đầu tiên trong danh sách và giá trị thấp nhất xuất hiện cuối cùng trong danh sách.
Đó là nơi hàng đợi ưu tiên xuất hiện. Hàng đợi ưu tiên là cấu trúc dữ liệu lưu trữ dữ liệu dựa trên giá trị của các khóa theo thứ tự tăng dần. Điều này cho phép bạn dễ dàng truy cập giá trị nhỏ nhất và lớn nhất trong hàng đợi.
Hướng dẫn này sẽ thảo luận về lý do tại sao bạn không nên sử dụng danh sách để tạo hàng đợi ưu tiên. Chúng tôi sẽ chỉ cho bạn hai cách tiếp cận hiệu quả hơn mà bạn có thể sử dụng để tạo hàng đợi ưu tiên Python.
Hàng đợi ưu tiên Python là gì?
Hàng đợi ưu tiên là phiên bản sửa đổi của hàng đợi lưu trữ dữ liệu theo thứ tự phần tử nào có mức độ ưu tiên cao nhất. Mức độ ưu tiên của mỗi phần tử trong hàng đợi ưu tiên được quyết định tùy thuộc vào giá trị của phần tử.
Trong khoa học máy tính, hàng đợi là cấu trúc dữ liệu lưu trữ các mục theo thứ tự nhập trước, xuất trước (FIFO). Có một số trường hợp sử dụng cấu trúc này có thể hữu ích.
Ví dụ:giả sử bạn đang xây dựng một ứng dụng theo dõi đơn đặt hàng cho một nhà hàng. Người đặt hàng trước phải được phục vụ trước những người đặt hàng tiếp theo. Để theo dõi các đơn đặt hàng, bạn nên sử dụng một hàng đợi.
Có hai cách để xác định hàng đợi ưu tiên trong Python:
81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.
Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.
- Sử dụng lớp hàng đợi PriorityQueue
- Sử dụng mô-đun heapq
Bạn có thể xác định hàng đợi ưu tiên bằng cách sử dụng cấu trúc danh sách. Tuy nhiên, chiến lược này kém hiệu quả hơn so với việc sử dụng lớp hàng đợi PriorityQueue hoặc mô-đun heapq.
Hàng đợi ưu tiên Python:queue.PinentQueue
queue.PinentQueue lớp tạo một hàng đợi ưu tiên Python. Lớp này là một phần của thư viện hàng đợi Python. Bạn cần nhập thư viện hàng đợi để sử dụng lớp này. Để truy xuất một mục từ PriorityQueue, bạn có thể sử dụng phương thức get ().
Để truy cập lớp PriorityQueue, chúng ta cần nhập nó vào mã của mình, điều này chúng ta có thể thực hiện bằng cách sử dụng câu lệnh nhập Python này:
from queue import PriorityQueue
Giả sử chúng ta muốn tạo một hàng đợi ưu tiên cho những người có vé tại một buổi hòa nhạc địa phương. Chúng tôi có thể làm như vậy bằng cách sử dụng mã này:
from queue import PriorityQueue ticket_holders = PriorityQueue() ticket_holders.put((3, 'Paul')) ticket_holders.put((1, 'Miles')) ticket_holders.put((2, 'Dani')) while not ticket_holders.empty(): item = ticket_holders.get() print(item)
Mã của chúng tôi trả về:
(1, 'Miles') (2, 'Dani') (3, 'Paul')
Trong mã của chúng tôi, trước tiên chúng tôi nhập lớp PriorityQueue từ hàng đợi thư viện, sau đó chúng tôi khởi tạo hàng đợi ưu tiên có tên là ticket_holder . Tiếp theo, chúng tôi chèn ba bộ giá trị vào hàng đợi ưu tiên của chúng tôi, nơi lưu trữ số vé và tên được liên kết với một vé.
Chúng tôi sử dụng vòng lặp while trong Python để chạy qua từng mục trong ticket_holder hàng đợi ưu tiên. Sau đó, chúng tôi truy xuất mục đó bằng get () .
queue.PinentQueue phương pháp này hiệu quả và dễ sử dụng, điều này làm cho nó trở thành một lựa chọn tuyệt vời khi bạn cần tạo hàng đợi ưu tiên.
Mô-đun heapq Python trong hàng đợi ưu tiên
Mô-đun heapq cho phép bạn xác định hàng đợi ưu tiên Python. Cấu trúc dữ liệu heapq loại bỏ các mục theo thứ tự ưu tiên của chúng. Giá trị thấp nhất có mức độ ưu tiên thấp nhất và giá trị cao nhất có mức độ ưu tiên cao nhất trong cấu trúc heapq.
Trước khi chúng ta có thể sử dụng mô-đun heapq, trước tiên chúng ta phải nhập nó vào mã của mình bằng cách sử dụng câu lệnh nhập sau:
import heapq
Hãy quay lại ví dụ trước đó của chúng tôi. Giả sử chúng ta muốn tạo một hàng đợi ưu tiên để lưu trữ thông tin về những người có vé tại một buổi hòa nhạc. Chúng tôi có thể làm như vậy bằng cách sử dụng mô-đun heapq và chương trình này:
import heapq ticket_holders = [] heapq.heappush(ticket_holders, (3, 'Paul')) heapq.heappush(ticket_holders, (1, 'Miles')) heapq.heappush(ticket_holders, (2, 'Dani')) while ticket_holders: item = heapq.heappop(ticket_holders) print(item)
Mã của chúng tôi trả về:
(1, 'Miles') (2, 'Dani') (3, 'Paul')
Đầu tiên, chúng tôi đã nhập thư viện heapq và sau đó chúng tôi khởi tạo một biến Python có tên là ticket_holder . Chúng tôi đã sử dụng heppush () phương pháp để đẩy ba bộ giá trị vào hàng đợi ưu tiên của chúng tôi. Hàng đợi này lưu trữ số vé của từng người có vé và tên của từng người được giữ vé.
Sau đó, chúng tôi tạo một vòng lặp while lặp lại từng mục trong hàng đợi ưu tiên của chúng tôi. Vòng lặp này xóa mục ở đầu hàng đợi bằng cách sử dụng heppop () . Sau đó, mục đã loại bỏ được in ra bảng điều khiển. Như bạn có thể thấy, tất cả các mục trong hàng đợi của chúng tôi được in ra theo thứ tự ưu tiên của chúng.
Tại sao bạn không nên giữ danh sách
Về mặt kỹ thuật, bạn có thể tạo hàng đợi ưu tiên bằng cách sử dụng cấu trúc dữ liệu danh sách Python. Để làm như vậy, bạn sẽ tạo một danh sách, sau đó sắp xếp nó theo thứ tự tăng dần.
Tuy nhiên, đây là một cách tương đối kém hiệu quả để duy trì một hàng đợi ưu tiên. Khi bạn thay đổi các mục trong danh sách, bạn cần phải sắp xếp lại danh sách, việc này sẽ mất thời gian.
Bạn có thể sử dụng danh sách truyền thống làm hàng đợi ưu tiên nếu bạn chỉ cần lưu trữ một vài giá trị. Tuy nhiên, nếu bạn đang tìm cách tạo một hàng đợi lớn hơn, danh sách không phải là một lựa chọn tốt.
Để tham khảo, hãy xem qua một ví dụ về hàng đợi ưu tiên sử dụng danh sách. Giả sử chúng ta muốn tạo một hàng đợi ưu tiên để lưu trữ thứ tự của những người có vé sẽ được tham gia một buổi hòa nhạc trước. Chúng tôi có thể sử dụng mã sau để tạo hàng đợi này:
ticket_holders = [] ticket_holders.append((3, 'Paul')) ticket_holders.append((1, 'Miles')) ticket_holders.append((2, 'Dani')) ticket_holders.sort(reverse=True) while ticket_holders: item = ticket_holders.pop() print(item)
Mã của chúng tôi trả về:
(1, 'Miles') (2, 'Dani') (3, 'Paul')
Chúng tôi đã tạo một danh sách có tên là ticket_holder , sau đó chúng tôi đã thêm ba bộ giá trị vào danh sách. Mỗi tuple chứa số vé của người giữ vé và tên của họ. Sau đó, chúng tôi sử dụng Python sort () chức năng sắp xếp danh sách những người có vé của chúng tôi theo thứ tự ngược lại.
Chúng tôi đã tạo một vòng lặp trong khi lặp lại mọi mục trong ticket_holder danh sách và mục ở đầu danh sách. Sau đó, mã của chúng tôi in ra mục đã xóa vào bảng điều khiển.
Kết luận
Hai cách phổ biến nhất để tạo hàng đợi ưu tiên là sử dụng mô-đun heapq hoặc queue.PinentQueue lớp. Mặc dù về mặt kỹ thuật, bạn có thể sử dụng danh sách làm hàng đợi ưu tiên, nhưng phương pháp này không mở rộng quy mô tốt.
Hướng dẫn này đã thảo luận, có tham chiếu đến các ví dụ, cách tạo hàng đợi ưu tiên trong Python. Giờ đây, bạn đã được trang bị kiến thức cần thiết để bắt đầu tạo hàng đợi ưu tiên của riêng mình như một chuyên gia Python!
Để biết thêm hướng dẫn về cách học Python, hãy xem hướng dẫn Cách học Python đầy đủ của chúng tôi.