聯合查找
“Union Find”問題的詳細指南和 Python 實作。
1. 學習
「並集查找」問題是圖表部分的關鍵挑戰。
此實作著重於 Python 中的簡單層級邏輯。
在我們提供的解決方案中,我們優先考慮技術準確性和程式碼可讀性。
2. Real-World Applications
3. Visual Intuition
可視化並集查找的邏輯流程。
4. Prerequisites
5. Step-by-Step Thinking
1. Understand the problem
仔細閱讀 Union Find 的問題陳述。
2. Formulate brute force
起草一個簡單的迭代解決方案。
3. Identify inefficiency
尋找冗餘計算。
4. Optimize search path
使用散列或排序來加速該過程。
5. Final Implementation
清理生產標準代碼。
問題陳述
寫一個函數 detect_cycle_union_find(V, edges) ,使用並查資料結構偵測 V 頂點和邊列表 edges 的無向圖中是否有循環,該邊列表表示為對 (u, v) 。如果存在循環,則傳回 True,否則傳回 False。
- •1 <= V <= 1000
- •0 <= len(edges) <= 2000
範例
V = 3, edges = [(0, 1), (1, 2), (2, 0)]
True
Edge (2, 0) connects vertices 2 and 0 which are already in the same subset, detecting a cycle.
V = 3, edges = [(0, 1), (1, 2)]
False
No subset connections merge vertices already in the same subset.
Need a Hint?
Edge Cases to Watch
- 空輸入結構
- 單元素輸入
- 大數值範圍
準備好解決了嗎?
Open the problem in PyRun's browser-based Python editor. Your code runs fully offline — no server required.
面試見解和變化
複雜度分析分解
為什麼時間: Directly evaluates all possibilities.
為什麼選擇太空: Uses standard local memory.
為什麼時間: Optimized paths reduce total operations.
為什麼選擇太空: May trade memory for speed.
最佳化解決方案Python程式碼
最佳化解決方案Python程式碼
class UnionFindOpt:
def __init__(self, n):
self.parent = list(range(n))
self.rank = [0] * n
def find(self, i):
if self.parent[i] == i: return i
self.parent[i] = self.find(self.parent[i])
return self.parent[i]
def union(self, i, j):
root_i = self.find(i)
root_j = self.find(j)
if root_i != root_j:
if self.rank[root_i] < self.rank[root_j]: self.parent[root_i] = root_j
elif self.rank[root_i] > self.rank[root_j]: self.parent[root_j] = root_i
else:
self.parent[root_i] = root_j
self.rank[root_j] += 1暴力破解代碼(劇透保護)
暴力破解代碼(劇透保護)
class UnionFindBrute:
def __init__(self, n):
self.parent = list(range(n))
def find(self, i):
if self.parent[i] == i: return i
return self.find(self.parent[i])
def union(self, i, j):
self.parent[self.find(i)] = self.find(j)Algorithm Pattern Checklist
When dealing with Graphs data patterns.
- Are constraints clear?
- Is there a linear or logarithmic optimization possible?
PyRun is built and maintained by an independent solo developer. If this helped your interview prep, consider buying a coffee!
推薦的 Python 資源
透過相關的互動式教學、備忘單和程式碼比較來擴展您的知識。
Python 迴圈:For 與 While 迴圈解釋
了解如何使用 Python 循環來迭代資料。透過互動式範例掌握 for 迴圈、while 迴圈、break、continue 和迴圈最佳實務。
如何在 Python 中找到列表的長度
了解如何使用 len() 函數在 Python 中尋找清單的長度。了解 O(1) 時間複雜度和檢查計數。
Python 字串方法備忘單
Python 字串操作的完整參考指南。掌握格式化、搜尋、拆分、取代和檢查字串屬性。
Python 與 JavaScript:哪種程式語言最好?
Python 和 JavaScript 的全面比較。探索語法差異、效能、用例(後端與前端)和編碼範例。