簡體   English   中英

如何使用DFS算法找到最小的產品?

[英]How to use a DFS algorithm to find the smallest product?

我以前從未使用過DFS,並且想知道如果要遍歷以下“樹”,如何使用DFS查找路徑的最小乘積:

        3
      4   5
    7   6   4
  3   5   7   8
1   2   3   4   4

請參閱以下評論,以消除任何混淆(:

您需要構造一個有向圖,其中的節點是數字,每個節點在下一級上的數字/節點都有2條邊。 這個特定問題中的圖將是有向無環圖。

然后,您只需在構造的圖形上運行DFS。 但是,由於要重新訪問節點,因此您不會跟蹤/檢查您是否曾經訪問過該節點。 取而代之的是,您只需要檢查當前節點是否具有0 out-degree或node(因為底部的節點將具有0 out-degree ),並在到達底部的節點時更新當前的min。 (您也可以跟蹤當前深度,並在達到該深度時更新當前最小值)。 我們可以針對這個特定問題執行此操作,因為所有乘積都是乘以5個數字而得的結果,每個數字一個。

我上面描述的被稱為DFS的樹搜索變體,而普通的圖搜索變體則可以跟蹤以前是否訪問過節點。 當圖中有一個循環時,樹搜索DFS將卡住,但是由於這是有向無環圖,因此我們不會遇到這種問題。


如果這些數字均為非負數 ,則可以觀察到:無論我們如何從根到達節點,前面的最佳路徑每次都將是相同的。

在這種情況下,從底部節點向后工作會更快。 對於與同一“父”節點相鄰的每一對,選擇較小的一對並與“父”節點相乘。 繼續這樣做,直到到達根節點,您將獲得結果。


如果數字可以是正數或負數或0 ,則需要跟蹤4個數字:絕對值最大和最小的負數,正數最大和最小的負數。 而且,您還需要跟蹤是否可以形成0個產品。 對於正x負,最大2個絕對值。 對於正x正負x負,最小的2個絕對值。 在算法開始時,所有這5個字段都未定義。

如何更新的細節留給讀者。 應按以下順序檢查結果:絕對值最大的負數,0,絕對值最小的正數。 如果該字段未定義,請跳過該字段並檢查下一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM