【问题标题】:Accessing Values In Matrix (Haskell Newbie)访问矩阵中的值(Haskell 新手)
【发布时间】:2015-04-07 10:17:51
【问题描述】:

我正在尝试在 haskell 中基本做到这一点

for (int i = 0; i < city_Permutation_Route.length - 1; i++) {
        route_Distance = route_Distance + city_Distance_Matrix[city_Permutation_Route[i]][city_Permutation_Route[i + 1]];

    }

我得到每条路线的权重,将其与其他每条路线进行比较,以便我打印出权重最低的路线,如下所示

路线权重 = 453.4 路线 = 0,1,2,3,4,5,6,7,8

我有获取总路线和所有其他数据的功能,但不明白如何从矩阵中获取值

问题:我如何在 haskell 中做到这一点

我希望能够使用排列值作为它的索引从我的距离矩阵中获取值

【问题讨论】:

  • 当心getperm [[]]:这仅适用于长度为 1 的列表,其中包含一个空列表。这可能不是您想要的。
  • 你的问题是什么?

标签: arrays algorithm list haskell


【解决方案1】:

给定一个排列,例如[3, 2, 7, 5, 4, 6, 0, 1],您可以通过zipping 它自己的tail 来计算所有的腿。

zip [3, 2, 7, 5, 4, 6, 0, 1]
    (tail [3, 2, 7, 5, 4, 6, 0, 1])

zip [3, 2, 7, 5, 4, 6, 0, 1]
    [2, 7, 5, 4, 6, 0, 1]

[(3,2),(2,7),(7,5),(5,4),(4,6),(6,0),(0,1)]

这些是距离矩阵中两点之间旅行成本的索引。如果我们使用列表索引函数!!city_Distance_Matrix 中查找这些,我们会得到每条腿的成本

map (\(c0, c1) -> city_Distance_Matrix !! c0 !! c1)
    [(3,2),(2,7),(7,5),(5,4),(4,6),(6,0),(0,1)]

    [97.4, 71.6, 111.0,138.0,85.2 ,86.3 ,129.0]

如果我们把这些加起来,我们就得到了沿着这个排列的路径旅行的总成本。

sum [97.4, 71.6, 111.0,138.0,85.2 ,86.3 ,129.0] = 718.5

将所有这些放在一起,我们可以定义一个函数来计算城市排列的所有腿的总长度。我们可以使用zipWith 来简化函数,它是zipmap 的组合。

totalLength :: [Int] -> Double
totalLength cities = sum $ zipWith (\c0 c1 -> city_Distance_Matrix !! c0 !! c1) cities (tail cities)

您应该能够使用它来找到totalLength 最小的排列。

【讨论】:

  • 谢谢伙计,我只是看看 zip 函数,我现在完全理解了,我已经完成了求和之类的函数,但感谢你为我澄清它。 PS你的救命稻草我现在可以使用矩阵查找实现NN和RNN upthanks
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多