演算法基礎 第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完成書中的演算法樣例,期待大家多多關注,多挑毛病。
相關文章
- 蟻群演算法實現TSP(旅行商)問題(java)演算法Java
- 演算法基礎 第5版 第四章 最小生成樹Prim方法的Ruby實現演算法
- 《Ruby基礎教程(第4版)》:快樂程式設計程式設計
- 遺傳演算法解決旅行商問題(TSP)演算法
- hdu 4568 spfa 最短路演算法+旅行商問題演算法
- Ruby On Rails實踐—中文亂碼問題AI
- 買基金的基礎問題
- ACO蟻群演算法解決TSP旅行商問題演算法
- 基於css3動畫實現的旅行的小車CSSS3動畫
- 演算法基礎第三章搜尋與圖論演算法圖論
- 好書推薦——JavaScript基礎教程(第8版)JavaScript
- 使用matlab實現遺傳演算法解決飛行員偵查問題Matlab演算法
- 旅行商問題(TSP)概述
- 演算法導論C語言實現: 演算法基礎演算法C語言
- 深度學習入門:基於Python的理論與實現-第三章sys.path問題深度學習Python
- 問一個基礎的用例問題?
- 《Python程式設計與演算法基礎教程》第三章上機實踐Python程式設計演算法
- 基礎學習問題
- SQL基礎教程問題SQL
- Shopify如何使用Ruby實現每小時銷售1億美元?
- 併發基礎-第01章-實現執行緒的正確方式執行緒
- 【iOS – OC】OC基礎-單例的實現 & 提醒自己注意多執行緒問題iOS單例執行緒
- 推動和實現物聯網成功的6個問題
- 『現學現忘』Git基礎 — 23、Git中的撤銷操作Git
- 【JAVA】助力數字化營銷:基於協同過濾演算法實現個性化商品推薦Java演算法
- 15個基礎的jQuery面試問題jQuery面試
- 遞推演算法與遞推套路(演算法基礎篇)演算法
- 多執行緒基礎-基礎實現執行緒
- 01.Java基礎問題Java
- ios 基礎問題記錄iOS
- C#面試基礎問題C#面試
- vb基礎(列印問題) (轉)
- RSA演算法基礎->實踐演算法
- 模擬退火演算法Python程式設計(4)旅行商問題演算法Python程式設計
- [提問交流]求購:基於thinkphp的會員推廣系統PHP
- Ruby 探針的基本實現原理
- Ruby探針的基本實現原理
- 基礎揹包問題的一些題目!!