Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Priority Queue:A Guide

คิวลำดับความสำคัญของ Python:คำแนะนำ

คิวลำดับความสำคัญของ Python เก็บข้อมูลในลำดับเฉพาะ มีสองวิธีในการใช้ลำดับความสำคัญของคิวใน Python:การใช้คลาสคิวและการใช้โมดูล heapq

คุณอาจต้องการสั่งซื้อข้อมูลตามค่าของแต่ละรายการในรายการ ตัวอย่างเช่น คุณอาจต้องการให้ค่าสูงสุดปรากฏก่อนในรายการ และค่าต่ำสุดจะปรากฏสุดท้ายในรายการ

นั่นคือที่มาของคิวลำดับความสำคัญ คิวลำดับความสำคัญคือโครงสร้างข้อมูลที่จัดเก็บข้อมูลตามค่าของคีย์ในลำดับจากน้อยไปมาก วิธีนี้ช่วยให้คุณเข้าถึงค่าที่เล็กและใหญ่ที่สุดในคิวได้อย่างง่ายดาย

บทช่วยสอนนี้จะอธิบายว่าทำไมคุณไม่ควรใช้รายการเพื่อสร้างคิวที่มีลำดับความสำคัญ เราจะแสดงให้คุณเห็นถึงสองวิธีที่มีประสิทธิภาพมากขึ้นซึ่งคุณสามารถใช้เพื่อสร้างคิวลำดับความสำคัญของ Python

คิวลำดับความสำคัญของ Python คืออะไร

คิวลำดับความสำคัญเป็นเวอร์ชันที่แก้ไขของคิวที่จัดเก็บข้อมูลตามลำดับองค์ประกอบที่มีลำดับความสำคัญสูงสุด ลำดับความสำคัญของแต่ละองค์ประกอบในคิวลำดับความสำคัญจะขึ้นอยู่กับค่าขององค์ประกอบ

ในวิทยาการคอมพิวเตอร์ คิวคือโครงสร้างข้อมูลที่จัดเก็บรายการในลำดับเข้าก่อนออกก่อน (FIFO) มีบางสถานการณ์ที่อาจเป็นประโยชน์ในการใช้โครงสร้างนี้

ตัวอย่างเช่น สมมติว่าคุณกำลังสร้างแอปติดตามคำสั่งซื้อสำหรับร้านอาหาร ผู้ที่สั่งอาหารก่อนควรได้รับบริการก่อนผู้ที่สั่งอาหารในลำดับต่อไป หากต้องการติดตามคำสั่งซื้อ คุณจะต้องใช้คิว

มีสองวิธีในการกำหนดลำดับความสำคัญใน Python:

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

  • การใช้คลาสคิว PriorityQueue
  • การใช้โมดูล heapq

คุณสามารถกำหนดลำดับความสำคัญของคิวโดยใช้โครงสร้างรายการ แต่กลยุทธ์นี้มีประสิทธิภาพน้อยกว่าการใช้คลาสคิว PriorityQueue หรือโมดูล heapq

Priority Queue Python:queue.PriorityQueue

queue.PriorityQueue คลาสสร้างคิวลำดับความสำคัญของ Python คลาสนี้เป็นส่วนหนึ่งของไลบรารีคิว Python คุณต้องนำเข้าไลบรารีคิวเพื่อใช้คลาสนี้ หากต้องการดึงรายการจาก PriorityQueue คุณสามารถใช้เมธอด get()

ในการเข้าถึงคลาส PriorityQueue เราจำเป็นต้องนำเข้าไปยังโค้ดของเรา ซึ่งสามารถทำได้โดยใช้คำสั่งการนำเข้า Python นี้:

from queue import PriorityQueue

สมมติว่าเราต้องการสร้างคิวลำดับความสำคัญสำหรับผู้ถือตั๋วในคอนเสิร์ตท้องถิ่น เราสามารถทำได้โดยใช้รหัสนี้:

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)

รหัสของเราส่งคืน:

(1, 'Miles')
(2, 'Dani')
(3, 'Paul')

ในโค้ดของเรา ขั้นแรกเราจะนำเข้าคลาส PriorityQueue จาก queue ห้องสมุด จากนั้นเราจะเริ่มต้นคิวลำดับความสำคัญที่เรียกว่า ticket_holders . ต่อไป เราแทรกทูเพิลสามตัวลงในคิวลำดับความสำคัญ ซึ่งเก็บหมายเลขตั๋วและชื่อที่เกี่ยวข้องกับตั๋ว

เราใช้ Python while วนซ้ำเพื่อเรียกใช้แต่ละรายการใน ticket_holders คิวลำดับความสำคัญ จากนั้น เราดึงไอเท็มนั้นโดยใช้ get() .

queue.PriorityQueue เมธอดมีประสิทธิภาพและใช้งานง่าย ซึ่งเป็นตัวเลือกที่ดีเมื่อคุณต้องการสร้างคิวที่มีลำดับความสำคัญ

ลำดับความสำคัญของคิว Python heapq โมดูล

โมดูล heapq ให้คุณกำหนดลำดับความสำคัญของคิว Python โครงสร้างข้อมูล heapq จะลบรายการตามลำดับความสำคัญ ค่าต่ำสุดมีลำดับความสำคัญต่ำสุด และค่าสูงสุดมีลำดับความสำคัญสูงสุดในโครงสร้าง heapq

ก่อนที่เราจะสามารถใช้โมดูล heapq เราต้องนำเข้าโค้ดของเราโดยใช้คำสั่งนำเข้าต่อไปนี้:

import heapq

กลับไปที่ตัวอย่างก่อนหน้านี้ของเรา สมมติว่าเราต้องการสร้างคิวลำดับความสำคัญเพื่อเก็บข้อมูลเกี่ยวกับผู้ถือตั๋วในคอนเสิร์ต เราสามารถทำได้โดยใช้โมดูล heapq และโปรแกรมนี้:

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)

รหัสของเราส่งคืน:

(1, 'Miles')
(2, 'Dani')
(3, 'Paul')

ขั้นแรก เรานำเข้าไลบรารี heapq จากนั้นจึงเริ่มต้นตัวแปร Python ที่เรียกว่า ticket_holders . เราใช้ heappush() วิธีการดันทูเพิลสามตัวไปยังคิวลำดับความสำคัญของเรา คิวนี้เก็บหมายเลขตั๋วสำหรับผู้ถือตั๋วแต่ละรายและชื่อผู้ถือตั๋วแต่ละราย

จากนั้นเราสร้างลูป while ซึ่งวนรอบแต่ละรายการในคิวลำดับความสำคัญของเรา ลูปนี้จะลบรายการที่ด้านบนของคิวโดยใช้ heappop() . จากนั้น รายการที่นำออกจะถูกพิมพ์ไปยังคอนโซล อย่างที่คุณเห็น รายการทั้งหมดในคิวของเราจะถูกพิมพ์ออกมาตามลำดับความสำคัญ

ทำไมคุณไม่ควรเก็บรายการไว้

ในทางเทคนิค คุณสามารถสร้างลำดับความสำคัญได้โดยใช้โครงสร้างข้อมูลรายการ Python ในการทำเช่นนั้น คุณจะต้องสร้างรายการ จากนั้นเรียงลำดับจากน้อยไปมาก

อย่างไรก็ตาม นี่เป็นวิธีที่ค่อนข้างไม่มีประสิทธิภาพในการรักษาลำดับความสำคัญของคิว เมื่อคุณเปลี่ยนรายการในรายการ คุณจะต้องเรียงลำดับรายการใหม่ ซึ่งต้องใช้เวลา

คุณสามารถใช้รายการดั้งเดิมเป็นคิวลำดับความสำคัญได้ หากคุณต้องการเก็บค่าเพียงไม่กี่ค่า แต่ถ้าคุณต้องการสร้างคิวที่ใหญ่ขึ้น รายการไม่ใช่ตัวเลือกที่ดี

สำหรับการอ้างอิง มาดูตัวอย่างของลำดับความสำคัญโดยใช้รายการ สมมติว่าเราต้องการสร้างคิวลำดับความสำคัญที่เก็บลำดับของผู้ถือตั๋วที่ควรให้เข้าสู่คอนเสิร์ตก่อน เราสามารถใช้รหัสต่อไปนี้เพื่อสร้างคิวนี้:

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)

รหัสของเราส่งคืน:

(1, 'Miles')
(2, 'Dani')
(3, 'Paul')

เราได้สร้างรายชื่อ ผู้ถือตั๋ว_ผู้ถือบัตร จากนั้นเราได้เพิ่ม tuples สามรายการในรายการ ทูเพิลแต่ละตัวมีหมายเลขตั๋วของผู้ถือตั๋วและชื่อของพวกเขา จากนั้น เราใช้ Python sort() ฟังก์ชันเพื่อจัดเรียงรายชื่อผู้ถือตั๋วของเราในลำดับที่กลับกัน

เราได้สร้าง a while loop ที่วนซ้ำทุกรายการใน ticket_holders รายการและรายการที่ด้านบนของรายการ จากนั้น รหัสของเราจะพิมพ์รายการที่ถูกลบไปยังคอนโซล

บทสรุป

สองสิ่งที่พบบ่อยที่สุดในการสร้างคิวลำดับความสำคัญคือการใช้โมดูล heapq หรือ queue.PriorityQueue ระดับ. แม้ว่าในทางเทคนิคแล้วคุณสามารถใช้รายการเป็นคิวลำดับความสำคัญได้ แต่วิธีการนี้ไม่สามารถปรับขนาดได้ดี

บทช่วยสอนนี้กล่าวถึงวิธีการสร้างคิวลำดับความสำคัญใน Python โดยมีการอ้างอิงถึงตัวอย่าง ตอนนี้คุณมีความรู้ที่จำเป็นในการเริ่มสร้างลำดับความสำคัญของคุณเองอย่างผู้เชี่ยวชาญ Python!

สำหรับคำแนะนำเพิ่มเติมเกี่ยวกับวิธีการเรียนรู้ Python โปรดดูคู่มือ How to Learn Python ฉบับสมบูรณ์