具有最大機率的路徑
1514。具有最大機率的路徑
難度:中
主題:陣列、圖、堆疊(優先權佇列)、最短路徑
給你一個由n 個節點(0 索引)組成的無向加權圖,由邊列表表示,其中edges[i] = [a, b] 是連接節點a 和b 的無向邊,有成功的機率遍歷該邊succProb[i].
給定兩個節點的起點和終點,找到從起點到終點成功機率最大的路徑,並返回其成功機率。
如果沒有從起點到終點的路徑,返回0。如果您的答案與正確答案相差最多 1e-5.
,我們將接受您的答案。範例1:

- 輸入: n = 3,edges = [[0,1],[1,2],[0,2]],succProb = [0.5,0.5,0.2],start = 0,end = 2
- 輸出: 0.25000
- 說明:從開始到結束有兩條路徑,一條成功機率 = 0.2,另一條成功機率 0.5 * 0.5 = 0.25。
範例2:

- 輸入: n = 3,edges = [[0,1],[1,2],[0,2]],succProb = [0.5,0.5,0.3],start = 0,end = 2
- 輸出: 0.30000
範例 3:

- 輸入: n = 3,edges = [[0,1]],succProb = [0.5],start = 0,end = 2
- 輸出: 0.00000
- 解釋: 0 和 2 之間沒有路徑。
約束:
- 2
- 0
- 開始! =結束
- 0
- a != b
- 0
- 0
- 每兩個節點之間最多有一條邊
提示:
- 機率相乘會導致精度誤差。
- 採用對數機率對數字進行求和而不是相乘。
- 使用 Dijkstra 演算法求否定所有成本後兩個節點之間的最小路徑。
解:
我們可以使用 Dijkstra 演算法的修改版本。您將最大化成功的可能性,而不是尋找最短路徑。
讓我們用 PHP 實作這個解:1514。機率最大的路徑
<?php
/**
* @param Integer $n
* @param Integer[][] $edges
* @param Float[] $succProb
* @param Integer $start_node
* @param Integer $end_node
* @return Float
*/
function maxProbability($n, $edges, $succProb, $start_node, $end_node) {
...
...
...
/**
* go to ./solution.php
*/
}
// Example usage:
$n1 = 3;
$edges1 = [[0,1],[1,2],[0,2]];
$succProb1 = [0.5,0.5,0.2];
$start_node1 = 0;
$end_node1 = 2;
echo maxProbability($n1, $edges1, $succProb1, $start_node1, $end_node1);//Output: 0.25000
$n2 = 3;
$edges2 = [[0,1],[1,2],[0,2]];
$succProb2 = [0.5,0.5,0.3];
$start_node2 = 0;
$end_node2 = 2;
echo maxProbability($n2, $edges2, $succProb2, $start_node2, $end_node2);//Output: 0.30000
$n3 = 3;
$edges3 = [[0,1]];
$succProb3 = [0.5;
$start_node3 = 0;
$end_node3 = 2;
echo maxProbability($n3, $edges3, $succProb3, $start_node3, $end_node3); //Output: 0.00000
?>
解釋:
圖表示:圖表示為鄰接列表,其中每個節點都指向其鄰居以及連接它們的邊的成功機率。
最大機率數組:陣列maxProb用於儲存起始節點到達每個節點的最大機率。
優先權佇列:最大堆(SplPriorityQueue)用於首先探索機率最高的路徑。這對於確保當我們到達目標節點時,找到機率最大的路徑至關重要。
-
演算法:
- 將起始節點的機率初始化為1(因為停留在起始點的機率為1)。
- 使用優先權佇列來探索節點,更新到達每個鄰居的最大機率。
- 如果到達目的節點,則傳回機率。
- 如果不存在路徑,則回傳0。
輸出:
對於提供的範例:
$n = 3; $edges = [[0,1],[1,2],[0,2]]; $succProb = [0.5,0.5,0.2]; $start_node = 0; $end_node = 2;
輸出將為 0.25。
這種方法確保了使用 Dijkstra 演算法的有效解決方案,同時處理機率計算的細節。
聯絡連結
如果您發現本系列有幫助,請考慮在 GitHub 上給 存儲庫 一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大!
如果您想要更多類似的有用內容,請隨時關注我:
- 領英
- GitHub
以上是具有最大機率的路徑的詳細內容。更多資訊請關注PHP中文網其他相關文章!
熱AI工具
Undress AI Tool
免費脫衣圖片
Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片
AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。
Clothoff.io
AI脫衣器
Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!
熱門文章
熱工具
記事本++7.3.1
好用且免費的程式碼編輯器
SublimeText3漢化版
中文版,非常好用
禪工作室 13.0.1
強大的PHP整合開發環境
Dreamweaver CS6
視覺化網頁開發工具
SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)
我如何了解最新的PHP開發和最佳實踐?
Jun 23, 2025 am 12:56 AM
TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource
什麼是PHP,為什麼它用於Web開發?
Jun 23, 2025 am 12:55 AM
PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti
如何設置PHP時區?
Jun 25, 2025 am 01:00 AM
tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()
我如何驗證PHP中的用戶輸入以確保其符合某些標準?
Jun 22, 2025 am 01:00 AM
TovalidateuserinputinPHP,usebuilt-invalidationfunctionslikefilter_var()andfilter_input(),applyregularexpressionsforcustomformatssuchasusernamesorphonenumbers,checkdatatypesfornumericvalueslikeageorprice,setlengthlimitsandtrimwhitespacetopreventlayout
編寫清潔和可維護的PHP代碼的最佳實踐是什麼?
Jun 24, 2025 am 12:53 AM
寫乾淨、易維護的PHP代碼關鍵在於清晰命名、遵循標準、合理結構、善用註釋和可測試性。 1.使用明確的變量、函數和類名,如$userData和calculateTotalPrice();2.遵循PSR-12標準統一代碼風格;3.按職責拆分代碼結構,使用MVC或Laravel式目錄組織;4.避免麵條式代碼,將邏輯拆分為單一職責的小函數;5.在關鍵處添加註釋並撰寫接口文檔,明確參數、返回值和異常;6.提高可測試性,採用依賴注入、減少全局狀態和靜態方法。這些做法提升代碼質量、協作效率和後期維護便利性。
什麼是php(serialize(),Unserialize())中的數據序列化?
Jun 22, 2025 am 01:03 AM
thephpfunctionserize()andunSerialize()redustoconvertComplexdatStructDestoresToroStoroStoroSandaBackagagain.1.Serialize()
如何將PHP代碼嵌入HTML文件中?
Jun 22, 2025 am 01:00 AM
可以將PHP代碼嵌入HTML文件中,但需確保文件以.php為擴展名,以便服務器能正確解析。使用標準的標籤包裹PHP代碼,可在HTML中任意位置插入動態內容。此外,可在同一文件中多次切換PHP與HTML,實現條件渲染等動態功能。務必注意服務器配置及語法正確性,避免因短標籤、引號錯誤或遺漏結束標籤導致問題。
如何使用PHP執行SQL查詢?
Jun 24, 2025 am 12:54 AM
Yes,youcanrunSQLqueriesusingPHP,andtheprocessinvolveschoosingadatabaseextension,connectingtothedatabase,executingqueriessafely,andclosingconnectionswhendone.Todothis,firstchoosebetweenMySQLiorPDO,withPDObeingmoreflexibleduetosupportingmultipledatabas


