[理工] 107 交大 資演 10

作者: dumpling1234 (dumpling)   2019-01-27 03:01:15
https://imgur.com/Wt5ikwe
對了板上的答案 發現這題沒有答案
所以我想來確認一下我寫的方法有沒有問題
麻煩有答案 或 板上的大神們 幫我修正
Give a instance for HamEx(G,x) G = (V,E)
V = vertex in G E = edge in G
然後加入ㄧ點 h 不屬於 V and 加入ㄧ邊 (h,x) 不屬於 E
建造ㄧ個新的圖為G' = (V + {h}, E + {(h,x)})
然後可以設計ㄧ演算法:
0 if(HamP(G))return No; //確認有無 HP
1 if (HamP(G')) then return No; //確認有無 x 非頭尾 HP
2 else return Yes;
prove correctness:
已經由第0行確認有無 HP in G
所以只需檢查 if there is a HP in G from node u to v so that u,v! = x
Claim : if there isn't a hamiltonian path in G' then
there is a HP in G from node u to v so that u,v! = x
if there isn't a HP in G' 因為 deg(h) =1 所以 h 必定為起始點或終點
則不存在有ㄧ條HP的順序為 h,x,........ in G'
則在原圖 G 中不會存在ㄧ條 HP 為 x 為起點或終點
換種寫法
if there is a HP in G from node u to v so that u,v = x
所以將存在有ㄧ條HP的順序為 x,........ in G
則可以找到ㄧ條HP的順序為 h,x,........ in G'
所以得證
Time Complexity : O(n^7)+O(1)(加一點和一邊) = O(n^7)
預祝大家考試順利!
作者: FRAXIS (喔喔)   2019-01-27 05:54:00
這問題不是問 u != x and v != x 嗎?
作者: Leaving   2019-01-27 07:52:00
第0行怪怪的使HamEx(G, x)為true的G也會使HamP(G)為true吧我是想說把x和相對應的邊remove形成G'然後檢查3個bool b1, b2, b3b1 = HamP(G)b2 = (!HamP(G'))(說錯了好像不用b3)然後return b1 && b2原po加額外點進去的方法應該也可以 只是再要整理一下
作者: FRAXIS (喔喔)   2019-01-27 08:28:00
HamP(G') = true 不代表 HamEx(G, x) = false 吧
作者: Leaving   2019-01-27 08:38:00
歐對想到反例了 是錯的QQ感覺把我的G'改成原po的G'應該會對?
作者: FRAXIS (喔喔)   2019-01-27 08:56:00
應該也不對吧 同樣的道理HamP(G') = true 只代表存在有一個 HP 開頭或是結束在 x不代表 G 中不存在一條 HP 且 x 不在頭尾
作者: Leaving   2019-01-27 09:04:00
哦哦懂了 感謝樓上 我再想想

Links booklink

Contact Us: admin [ a t ] ucptt.com