[問題] 檔案深度搜尋 BFS / DFS
檔案搜尋這問題有點老了,只是 聽說 通常 BFS 效率較 DFS 為佳,
(有誤的話請指正),故拿來做 DFS / BFS 練習與比較。
練習中有另外一個衍生問題,請不吝指教。
----------------
衍生問題 : Macro Comment
#define NO_OUTPUT
#ifdef NO_OUTPUT
#define printf //
#define puts //
#endif
上面這段 code 是因在 travel 時方便切換是否要輸出,
但我 "印象" 在以前有點年代的 C 書籍裡面似乎有提到,
不能將一些函式 re-define 成 comment,
妙的是手邊 vc / gcc 都可以吃這種東西,
不知這個是否合法?
----------------
掃資料夾問題
先附上完整程式碼,http://codepad.org/SGj2ihfk
下面是概述流程,最後有提問( 效能上問題 )
DFS 上流程大概是
void DFS(const char * Path , const char * Filter)
{
char FullPath[MAX_PATH] ; /* sprintf(FullPath, "%s\\%s",Path,Filter); */
WIN32_FIND_DATA FileData;
HANDLE hHandle = FindFirstFile(....);
do{
/*
sprintf(FullPath, "%s\\%s", Path, FileData.cFileName);
輸出 FileData.cFileName
若 FileData 是資料夾,且非 "." ".." 則進行 DFS(FullPath, Filter)
*/
}while(FindNextFile(....));
FindClose(hHandle);
}
BFS 小弟寫的流程大概如下
void BFS(const char* Path, const char* Filter)
{
char FullPath[MAX_PATH] ; /* sprintf(FullPath, "%s\\%s",Path,Filter */
WIN32_FIND_DATA FileData;
HANDLE hHandle = FindFirstFile(....);
char Folder[][MAX_PATH] ; /* 儲存 Path 底下之資料夾 */
do{
/*
sprintf(FullPath, "%s\\%s", Path, FileData.cFileName);
If ( IsFolder(FileData) ) FileData 加入 Folder;
else 輸出 FullPath
*/
}while(FindNextFile(....));
for(i=0; i< FolderCnt; ++i) {
輸出 Folder[i]
BFS(Folder, Filter)
}
FindClose(hHandle);
}
-------------
為了測時,所以把輸出拿掉,避免 compiler opt 沒跑函式,所以沒加優化。
測試結果,BFS 反而較慢一點,
請問是否為我對 BFS / DFS 效能認知上有所誤失?
還是我 BFS 根本是寫錯的?
最後謝謝各位細心閱讀、耐心指導,
小弟感激不盡。
--
就算把新鮮的肝拿回去,還是一樣寫碼到禿頭,加班到天亮。
你是不是想這麼做?是的話你就拿回去~ 拿啊!!
九世宅男 : 下輩子不要再讓我幹工程師了 ~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.76.161
→
11/02 15:46, , 1F
11/02 15:46, 1F
→
11/02 15:49, , 2F
11/02 15:49, 2F
→
11/02 15:50, , 3F
11/02 15:50, 3F
→
11/02 15:50, , 4F
11/02 15:50, 4F
→
11/02 15:52, , 5F
11/02 15:52, 5F
→
11/02 15:53, , 6F
11/02 15:53, 6F
→
11/02 15:55, , 7F
11/02 15:55, 7F
→
11/02 16:04, , 8F
11/02 16:04, 8F
→
11/02 16:07, , 9F
11/02 16:07, 9F
→
11/02 16:08, , 10F
11/02 16:08, 10F
→
11/02 16:12, , 11F
11/02 16:12, 11F
→
11/02 16:13, , 12F
11/02 16:13, 12F
推
11/02 16:19, , 13F
11/02 16:19, 13F
一開始真的完全忽略它是函式所帶來之 slide effect .
→
11/02 16:25, , 14F
11/02 16:25, 14F
→
11/02 16:28, , 15F
11/02 16:28, 15F
→
11/02 16:28, , 16F
11/02 16:28, 16F
fclose(stdout) 在這篇文章應沒出現,想請教是否是我漏看了?
推
11/02 16:57, , 17F
11/02 16:57, 17F
→
11/02 16:57, , 18F
11/02 16:57, 18F
→
11/02 16:58, , 19F
11/02 16:58, 19F
→
11/02 16:58, , 20F
11/02 16:58, 20F
→
11/02 16:59, , 21F
11/02 16:59, 21F
→
11/02 17:08, , 22F
11/02 17:08, 22F
已修正,謝謝指正。
→
11/02 17:57, , 23F
11/02 17:57, 23F
感謝 LPH66、linotwo 給的建議,後來查一下網路,原來 macro 那段已不算小事,
再擴充下去大概會討論到 dprintf 吧,和原題意相差有點遠了,
或許再開主題做技術性的討論會較恰當。
另想請教的是 #define cerr /##/ 是什麼 ??
初步猜測 /##/ 最後相黏會變 // 吧?是用在 C++ 部份嗎?
cerr << "Hello, world!!"
謝謝各位熱心的賜教
※ 編輯: EdisonX 來自: 180.177.76.161 (11/02 19:28)
→
11/02 19:57, , 24F
11/02 19:57, 24F
→
11/03 14:32, , 25F
11/03 14:32, 25F
推
11/06 00:18, , 26F
11/06 00:18, 26F
→
11/06 00:18, , 27F
11/06 00:18, 27F
→
11/06 00:18, , 28F
11/06 00:18, 28F
→
11/06 00:20, , 29F
11/06 00:20, 29F
→
11/06 00:21, , 30F
11/06 00:21, 30F
→
11/06 00:46, , 31F
11/06 00:46, 31F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章