最短路徑 The Shortest Path.

Slides:



Advertisements
Similar presentations
不知者無罪嗎 ? 【本報台北訊】國內知名大學胡姓研究 生進口豬籠草在網路上販售,涉嫌違反 植物防疫檢疫法,胡姓研究生表示不知 道豬籠草是違禁品並當場認錯道歉 台北地檢署檢察官念他初犯,昨 天處分緩起訴,但命他繳交六萬 元緩起訴處分金作公益。 豬籠草有潛移性線蟲寄生,一旦植物感 染後,輕則枯萎凋零,重則危害農業經.
Advertisements

說 劍 《莊子‧雜篇》─ 第 一 組 賴泊錞 謝孟儒 張維真 羅苡芸
大學入學考試中心 九十六學度學科能力測驗試題 國文科 -哈利波特番外篇-
中小学教育网课程推荐网络课程 小学:剑桥少儿英语 小学数学思维训练 初中:初一、初二、初三强化提高班 人大附中同步课程
2011级高考地理复习(第一轮) 第三篇 中国地理 第一章 中国地理概况 第五节 河流和湖泊.
第一章 十六世紀中葉以前的臺灣與原住民 第一節 考古發掘與史前文化.
行政法 之 行政救济篇.
職務法庭與 法官退場機制 行政訴訟及懲戒廳報告
量化vs質性研究分析 量化vs質性研究分析 報告人:王秀民.
國中基本能力測驗 (基測) 報告人:魏麗琴老師.
唐宋傳奇、筆記小品和史書、論著中的寓言 中碩二 吳佳樺.
兒童期 7 青春期 兩性圓舞曲 乘客:七年級同學 司機:張立杰老師.
建筑业2007年年报 2008年定报培训会 及 工交城建科 蔡婉妮
中國古典文獻學 主講:羅積勇教授.
指導老師 : 葉義生 老師 組 員 : 郭保儀 方若恩 莊靜雯
第一章 运动的描述  .
VS 兒童及少年身心發展 幼保三甲 幼兒期 青少年期 4A1I0014 陳佳瑩 4A1I0023 尤秀惠
社会保险计划 私人经营社会保障的可能性 联邦健康保险制度系统的资金融通仍是一个亟待解决的问题 医疗费用的风险是一个基本风险吗?
星星知我心 談古話今….. ……..觀星望斗 主講人: 陽光青春美少男.
反垃圾掩埋場相關報告 組長:文煊 組員:鄭侃文 李浩暐 胡育睿 李瑞耘 朱祐賢 林承宇.
2016届高三期初调研 分析 徐国民
06学年度工作意见 2006年8月30日.
2013 澎湖自助旅行講座 澎湖,其實就是一片海洋 主辦:沿著菊島旅行 協辦: 台北澎湖同鄉會、台中澎湖同鄉會、高雄澎湖同鄉會
第八課 蓼莪.
"性"不"性"由你 性別平等之探討 北屯國小 張文陵.
組員:4A140013張瓊云 4A1I0039石宜芬 4A1I0909許峻綱 指導老師:王立杰老師
組員: 洪暐翔、 賴峻毅 侯家豪、 賴琦穎 指導老師: 王惠鈴 老師
了解太平天国运动的主要史实,认识农民起义在民主革命时期的作用与局限性。
走自立自强之路 自己的事情自己做.
人類的循環系統.
第1节 光的干涉 (第2课时).
群組未知 水蜜桃每4個裝一盒,爸爸買了5盒,一共買了幾個水蜜桃? 爸爸想把20個水蜜桃平分給他的5個朋友,每個朋友可以得到幾個水蜜桃?
勾股定理 说课人:钱丹.
第4章 种群和群落 第3节 群落的结构 自主学习案   合作探究案 课后练习案. 第4章 种群和群落 第3节 群落的结构 自主学习案   合作探究案 课后练习案.
指導老師:陳韻如 班級:幼保二甲 姓名:林靜宜 學號:4A0I0033
普及组近5年NOIP试题分析 安徽师大附中 叶国平.
证券投资基金 投资121 06号余煜欢 09号陈秋婷 33号陈柔韵 08号潘晓峰 10号曾杰 34号谭锐权.
成才之路 · 语文 人教版 · 必修2 路漫漫其修远兮 吾将上下而求索.
台中市不動產經紀人職業工會 不動產經紀營業員 複訓班
Chap5 Graph.
第8章 圖形結構(Graphs) 8-1 圖形的基本觀念 8-2 圖形的表示法 8-3 圖形的走訪 8-4 擴張樹
第八章 图 图的基本概念 图的存储结构 图的遍历与连通性 最小生成树 最短路径 活动网络.
Graph Theory Graph theory is the study of the properties of graph structures. It provides us with a language with which to talk about graphs.
101北一女中 資訊選手培訓營 最短路徑 Shortest Path Nan.
(Circular Linked Lists)
資料結構 第7章 圖形結構.
人教版数学四年级(下) 乘法分配律 单击页面即可演示.
Ch 3 Dynamic Programming (動態規劃).
数据结构概论 第7章 图 董黎刚 浙江工商大学信电学院 2019年4月8日.
经典算法之 冒 泡 排 序.
计算机算法基础 周中成 苏州科技学院应用数学系 2019/4/18.
本章結構 網路簡介 最短路徑問題 最小展開樹問題 最大流量問題 10-1.
教学建议 学习目标 § 6.1 矩阵的概念 § 6.2 矩阵运算 § 6.3 矩阵的初等行变换与矩阵的秩 § 6.4 线性方程组的消元解法
第1章 绪论(二) 教学目标 理解算法的特性及评价标准 掌握算法时间复杂度和空间复杂度的分析方法 1/
Welcome 实验:筷子提米.
貪婪演算法 /5/6 演算法 _ 第三章.
鄧姚文 資料結構 第八章:圖(Graph) 鄧姚文
网络模型 Network Modeling Operations Research 运 筹 学
线段 射线 直线.
第四章 基本平面图形 线段、射线、直线.
第三章 贪心方法 (Greedy Technique)
介入及追蹤紀錄表 編號: 姓/稱謂: 初次103年 月 日 追蹤 月 日 問題型態 (可複選) □ 1. 覺得西藥都很傷胃
矩陣教學網頁規畫 組員:陳姿帆 黃美倫 林芳羽.
分配律 ~ 觀念 15 × 15 × + 15 × 乘法公式 蘇德宙 老師 台灣數位學習科技股份有限公司
在直角坐標平面上兩點之間 的距離及平面圖形的面積
All Sources Shortest Path The Floyd-Warshall Algorithm
Advanced Competitive Programming
國立政治大學 96學年度學雜費調整 第二次公聽會
第7章 图.
Array(陣列) Anny
Presentation transcript:

最短路徑 The Shortest Path

The Shortest Path(最短路徑) 由某節點到其他各個節點之最短路徑。 各個節點之間最短路徑。 最短路徑的定義 : 一條從節點S到節點D最短路徑P,它的總權重最少:

單一起點到其他節點最短路徑 採用貧婪(Greedy)策略 如圖是沒有負權重的網路 設起點為0,求節點0到節點1 最短路徑 節點0到 1,路徑長原為50, 經由節點2,路徑 0 -> 2 -> 1 ,路徑為45 ,然不滿足, 繼續尋找得到路徑0 -> 2 -> 3 -> 1 ,路徑長40為最短。

Dijkstra’s演算法則 要找出某一頂點到其他節點的最短路徑,可利用Dijkstra’s演算法求得。 其過程如下:

D = A [F, I] ( I =1, N ) S = {F} V = {1, 2, … , N} D為N個位置的陣列,用來儲存某一頂點到其他頂點的最短距離,F表示由某一起始點開始,A [F, I]是表示F點到I點的距離,V是網路中所有頂點的集合,S也是頂點的集合。 從V-S集合中找一頂點t,使得D [t]是最小值,並將t放入S集合,一直到V-S是空集合為止。 根據下面的公式調整D陣列中的值: D [I] = min ( D [I], D [t] +A [t, I; ] ((I , t )E) 其中I是指t的相鄰各頂點。 繼續回到(2)執行。

演算法 =>圖解演算法

=>演算虛擬碼 若Procedure SHORTEST_PATH (v, COST, DIST, n) Declare S (1 : n ) for j ← 1 to n S( j )← 0 ; DIST( j )←COST( v , j ) End S( v )←1 ; DIST( v )←0 ; num←2 While num < n do Choose u : DIST(u) = min{DIST(w)} S(u)←1 ; num←num+1 For all w with S(w) = 0 do DIST(w) ←min {DIST(w), DIST(u) + COST(u , w ) } end end SHORTEST_PATH

=>演算程式碼 同樣的,我們可以將Dijkstra演算法,以C語言表達如下: #define N 6 #define MAX_I 10000 int adj_matrix [N][N] int path [N], dist [N], s[N];

dijkstra ( int v) { int i , j , m , min , s[N] ; for ( i = 0 ; i < N ; i ++) dist [i] = adj_matrix [v][i] ; s [i] = 0 ; path [i] = v ; } s [v] = 1 ;

for ( i = 0 ; i < N – 2 ; i ++ ) min = MAX_I ; for ( j = 0 ; j < N ; j ++) if ( dist [j] < min && s [j] = = 0) { min = dist [j] ; m = j ; }

s [m] = 1 ; for ( j = 0 ; j < N ; j ++) { if ( dist [j] > dist [m] + adj_matrix [m][j]) dist [j] = dist [m] + adj_matrix [m][j] ; path [j] = m ; }

範例 Iteration S Vertex Selected DIST Initial 1 2 3 4 5 6 5,6 5,6,7 5,6,7,4 5,6,7,4,8 5,6,7,4,8,3 5,6,7,4,8,3,2 - 7 8 ∞ 3350 3250 2450 1500 1250 250 1150 1650

各節點之最短路徑 前面所探討的是固定一點為起點,而其他節點為終點節點。 任何兩點之間的最短距離(All-pairs shortest paths),其公式如下: Ak [i][j] = min { Ak-1 [i][j],Ak-1 [i][k]+Ak-1 [k][j] } , k≧1 A0 [i][j] = length [i][j] 其中k表示經過節點的名稱, Ak [i][j]表示由i到j經由k節點的最短距離。

演算法則 Dijkstra演算法: 依序分別以每一個頂點為起始節點,利用Dijkstra演算法即可獲得任一節點的最短路徑和距離。 Floyd演算法:假設節點編號為0、1、2、...、N-1, 並且令Ai-1(i , j )=Length(i , j), 並求出Ai(i , j ),Ai(i , j )=min{ Ai-1(i , k)+Ai-1(k , j )},0≦k≦N-1。 因為 Ai(i , j )是節點i至節點j之直通距離。 A0(i , j )走節點i至節點j之最短距離,但這條最路徑通過節點的編號不超過0。 Ai(i , j )走節點i至節點j之最短距離,且這條最路徑通過節點的編號不超過k。 因此 只需算出Ak-1(i , j ),便可知任一節點之最短距離。

演算法 =>圖解 Floyd 演算法 起始矩陣A-1: A-1[i][j] = length [i][j]表示由i到j的最短距離,其間不經由任何節點。 矩陣A0: A0[i][j]由i到j,經由節點0的最短距離;其中2→1的距離已由∞更新成7。 矩陣A1: A1[i][j]由i到j,經由節點1的最短距離;其中0→2的距離已由11更新成6。 矩陣A2: A2[i][j]由i到j,經由節點2的最短距離;其中1→0的距離已由6更新成5。

=>演算虛擬碼 Procedure FLOYD(W) N ←rows[W] D(0) ←W for k←1 to n do for i ←1 to n do for j←1 to n do end for return D(n) end FLOYD

=>演算程式碼 int dist [N][N] ; floyd ( ) { int i , j , k ; for ( i = 0 ; i < N; i ++) for (j = 0 ; j < N ; j ++) for (k = 0 ; k < N ; k ++) if ( dist [i] [j] > dist [I ][k] + dis [k][j]; }

範例 設在註有各地距離之地圖上 求各地間之最短距離。 利用矩陣方式表示。 A B C 3 10 2 6 5 網路圖

A→B是5, A→C是6,   B→A是10, B→C是16, C→A是3, C→B是2。