[英]depth first search with 2D Array
我有一個像這樣的數組:
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 1 0 0 0 0
0 1 1 1 1 0 0 1 0 1 0
0 1 1 0 1 0 0 0 0 1 1
0 0 0 1 1 0 0 0 1 1 0
0 0 0 0 0 0 0 0 0 0 0
我想將元素分組為“ 1”。
所以您看到我通過使用堆棧獲得了經典的dfs。 問題是,如果我具有上述矩陣,該算法的時間復雜度是多少,其中n
是矩陣元素的數量。 (行*列)如果比O(N)
差(因為我必須遍歷整個2D數組),哪種方法將有助於我改進此算法?
(其中n是矩陣元素的數量)
該算法的思想如下。
其中過程DFS(u,U)使用矩陣探索u的'1'鄰居。
但是,需要注意的是, DFS(u,U)也會從U中刪除所有發現的元素。
很容易理解並證明該算法確實總是以O(n * log n)完成。 從樹集中刪除元素具有最壞情況的復雜度O(log n)。 每個DFS(u,U)運行最多可以訪問| U |。 元素,並且隨着執行的進行,從U中刪除通過任何方式訪問的每個元素。 當U變空時,算法終止。
例如,不管您先前獲得的知識如何,都可以通過在每個元素上運行DFS來生成O(n ^ 2)算法。 使用任何機制確保不在已發現的組/島上運行DFS可能會產生更好的算法。
抱歉,我無法直接分析您自己的算法,但這可能會幫助您自己進行操作。
您需要設計的算法的下限應該是O(m+n)
-我正在考慮將行數和列n
分別設置為m
和n
。 這是因為無論如何您都需要遍歷整個2D數組。 如果使用兩個for循環解決此問題,則也將花費O(m+n)
。 對於矩陣中的每個元素,您都將與其他四個相鄰元素進行比較,因此,總體檢查大小為<= 4mn
。
我認為沒有比O(m+n)
時間更好的方法來解決這個問題了。
請注意,在您的問題中,如果您考慮m+n = N
那么我指的復雜度是O(N)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.