一、使用deque代替list
Python提供了兩種結構來實現隊列:list和deque。list在 Python 中實現的是一個支持動態數組大小的順序表,而deque實現了一個雙向隊列,它除了實現了普通隊列的所有方法外,還實現了在線性時間複雜度內在隊列兩端插入(也就是說在最左邊插入和在最右邊插入)元素的方法。
對比list,在進行任何元素的插入或者取出操作時,都會導致一些元素的「移動」,這樣就會帶來O(n)的複雜度,雖然對於小規模的數據並不會有很大的影響,但是當數據規模變大時就會變得不太優秀,更進一步,雙向隊列的實現有利於各種類型的算法。
下面是使用deque代替list的示例代碼:
from collections import deque queue = deque() queue.append(1) queue.append(2) queue.append(3) queue.popleft()
二、使用隊列實現廣度優先搜索(BFS)
BFS(廣度優先搜索)是一種在樹、圖等數據結構中很常見的搜索算法,廣泛應用於最短路徑、拓撲排序等領域。BFS基於隊列先進先出的特性,使用隊列可幫助我們快速且高效地實現BFS算法。
下面是使用隊列實現BFS的示例代碼:
from collections import deque
def bfs(graph, start_node):
visited = []
queue = deque([start_node])
while queue:
node = queue.popleft()
if node not in visited:
visited.append(node)
queue += graph[node] - set(visited)
return visited
三、使用隊列實現多線程
在Python中,使用了`Threading`、`Asyncio`等包來開發多線程程序,然而這些包的底層都是使用了隊列來實現多線程操作,這是因為Python中的隊列擁有高並發和高吞吐率的特性,是實現多線程高效的必備利器。
下面是使用有限制的隊列(queue)實現多線程程序的示例代碼:
import queue
import threading
q = queue.Queue()
def worker(q, n):
while True:
item = q.get()
if item is None:
break
print("任務 %s 開始處理 %s" % (n, item))
q.task_done()
# 啟動線程,開啟多次任務並行處理
threads = []
for i in range(5):
t = threading.Thread(target=worker, args=(q, i))
t.start()
threads.append(t)
# 入隊任務
for i in range(20):
q.put(i)
# 阻塞,直到所有任務完成
q.join()
# 停止線程,退出任務
for i in range(5):
q.put(None)
for t in threads:
t.join()
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/157668.html
微信掃一掃
支付寶掃一掃