深度優先搜索是搜索文件系統的一種可怕方式 - 實際上,可能位於非常接近根目錄的文件可能需要很長時間才能在DFS中找到,因爲DFS會被另一個文件系統分散注意力深層的,不相關的目錄層次結構。
然而,它的資源需求非常好 - 它需要保持打開的文件句柄的數量只與層次結構的深度成正比,而不是其大小。如何高效地搜索文件系統(算法)?
廣度優先搜索是顯而易見的解決方案 - 速度非常快。
(我最後一次測量,花了大約在同一時間,DFS我的系統上,約〜8秒。)
然而,BFS有自己的問題 - BFS需要保持開放非常大量目錄處理,可能在數百萬。 (在我的系統,它是10萬門左右的把手,這是高的離譜它可以很容易地多。)
這會導致幾個問題:
保持開放這麼多的句柄消耗不僅內存(這是但是還有很多其他類型的資源,例如處理虛擬文件系統(網絡,安裝目錄等)中的文件以及可能還有其他有限的內核級資源。
它也會導致用戶遇到其他實際問題:例如,保持打開的虛擬目錄不再可關閉!這意味着,例如,用戶可能無法關閉程序,彈出某個設備或關閉某種外部連接。這種方法可能會產生各種問題。
這似乎是迭代加深,那麼就是解決方案。
問題?這在實踐中非常緩慢。
我遇到的麻煩是,對於深度級別爲的大型目錄(例如Windows中的WinSxS)重新列舉,即使它們不需要。上次我嘗試這個時候,迭代加深比我的系統上的DFS慢了15倍。所以一個8秒鐘的搜索大約需要120秒左右,這是不可接受的。
當然,試圖跟蹤你不應該打開的目錄(可能是因爲你注意到你不需要打開它們),這首先破壞了使用迭代深化的目的,揭露了所有的資源問題我們曾與BFS合作過。
所以,問題很簡單:
如果您正在搜索你不熟悉的文件系統,你應該如何着手實現速度和可用性之間可接受的平衡?比BFS有更好的選擇嗎?
對於我剛剛拒絕編輯的人:我想我可能誤解了你的編輯;我確實有一個錯字。道歉,如果我搞砸了。 – Mehrdad