一、使用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-hant/n/157668.html