演算法基礎 第5版 第三章 旅行推銷員問題的Ruby實現
演算法基礎 第5版
第三章 旅行推銷員問題
def travel(matrix_w)
n = matrix_w.size
array_v = (1..n).to_a # 所有頂點的集合
array_a = [[]] # array_v的子集
array_v.each do |x|
array_a.size.times do |y|
array_a << (array_a[y] + [x])
end
end
array_a.delete([])
array_a.each { |m| array_a.delete(m) if m.include?(1) }
hash_d = {} # 最短路徑的長度
hash_p = {} # 最短路徑的索引
array_v.each { |k| hash_d.store(k, {}) }
array_v.each { |v| hash_p.store(v, {}) }
(2..n).each { |i| hash_d[i].store([].to_s, matrix_w[i - 1][0]) }
(1..n - 2).each do |k|
array_a.find_all { |a_size| a_size.size == k }.each do |a|
minimum = {}
(2..n).each do |i|
if a.include?(i)
next
else
a.each { |j| minimum[j] = matrix_w[i - 1][j - 1] + hash_d[j][(a - [j]).to_s] }
end
hash_d[i][a.to_s] = minimum.values.min
hash_p[i][a.to_s] = minimum.key(hash_d[i][a.to_s]) # 取最小j值
end
end
end
minimum = {} # 最終計算最優旅程長度
(array_v - [1]).each { |j| minimum[j] = matrix_w[0][j - 1] + hash_d[j][(array_v - [1] - [j]).to_s] }
hash_d[1][(array_v - [1]).to_s] = minimum.values.min
hash_p[1][(array_v - [1]).to_s] = minimum.key(hash_d[1][(array_v - [1]).to_s])
minlength = hash_d[1][(array_v - [1]).to_s]
end
def path(hash_p)
n = hash_p.size
array_v = hash_p.keys
best_path = []
point = 1
best_path << "v#{point}"
array_v.delete(point)
(n - 1).times do
point = hash_p[point][array_v.to_s]
best_path << "v#{point}"
array_v.delete(point)
end
best_path << 'v1'
best_path
end
infinite = Float::INFINITY
adjacency_matrix = [[0, 2, 9, infinite], [1, 0, 6, 4], [infinite, 7, 0, 8], [6, 3, infinite, 0]]
p travel(adjacency_matrix)
P = {1=>{"[2, 3, 4]"=>3}, 2=>{"[3]"=>3, "[4]"=>4, "[3, 4]"=>3}, 3=>{"[2]"=>2, "[4]"=>4, "[2, 4]"=>4}, 4=>{"[2]"=>2, "[3]"=>3, "[2, 3]"=>2}}
p path(P)
同時我也在使用Ruby完成書中的演算法樣例,期待大家多多關注,多挑毛病。
相關文章
- 演算法基礎 第5版 第四章 最小生成樹Prim方法的Ruby實現演算法
- 遺傳演算法解決旅行商問題(TSP)演算法
- 深度學習入門:基於Python的理論與實現-第三章sys.path問題深度學習Python
- 演算法基礎第三章搜尋與圖論演算法圖論
- 《Python程式設計與演算法基礎教程》第三章上機實踐Python程式設計演算法
- 旅行商問題(TSP)概述
- 【iOS – OC】OC基礎-單例的實現 & 提醒自己注意多執行緒問題iOS單例執行緒
- 推動和實現物聯網成功的6個問題
- Ruby 探針的基本實現原理
- 併發基礎-第01章-實現執行緒的正確方式執行緒
- 模擬退火演算法Python程式設計(4)旅行商問題演算法Python程式設計
- Shopify如何使用Ruby實現每小時銷售1億美元?
- ios 基礎問題記錄iOS
- 01.Java基礎問題Java
- Python基礎面試題30問!Python基礎教程Python面試題
- python基礎之 python實現PID演算法及測試的例子Python演算法
- 遞推演算法與遞推套路(演算法基礎篇)演算法
- 演算法專項-基礎100題演算法
- 推薦系統中的EE問題——Bandit演算法演算法
- 多執行緒基礎-基礎實現執行緒
- [提問交流]求購:基於thinkphp的會員推廣系統PHP
- 【JAVA】助力數字化營銷:基於協同過濾演算法實現個性化商品推薦Java演算法
- python實現Dijkstra演算法之 最短路徑問題Python演算法
- 第12節 巧用Event發現問題
- 『現學現忘』Git基礎 — 23、Git中的撤銷操作Git
- 實現MVC基礎框架MVC框架
- 2021年土建方向-通用基礎(施工員)考試APP及土建方向-通用基礎(施工員)新版試題APP
- 前端基礎問題:CSS居中的幾種方式前端CSS
- 基礎夯實:基礎資料結構與演算法(一)資料結構演算法
- 演算法與資料結構系列 ( 二 ) - 實現前的基礎準備演算法資料結構
- iOS面試中經常問的點 - 基礎問題(一)iOS面試
- 蟻群演算法java實現以及TSP問題蟻群演算法求解演算法Java
- CRC演算法原理、推導及實現演算法
- CSS實現垂直居中的問題CSS
- 面試題-測試工程師常見的基礎問題面試題工程師
- 常見演算法及問題需注意的技巧與簡單實現演算法
- 01.Android之基礎元件問題Android元件
- 前面基礎問題小總結(二)