【问题标题】:How to solve Traveling Salesman in SML? [closed]如何解决 SML 中的旅行推销员? [关闭]
【发布时间】:2010-03-11 02:12:40
【问题描述】:

有没有人在标准 ML 中有旅行商问题的解决方案,请告诉我。

我尝试了很多,但没有成功。

【问题讨论】:

    标签: algorithm sml traveling-salesman


    【解决方案1】:

    旅行推销员的蛮力解决方案非常简单。您填充可能路径的列表并选择最小的路径。

    至于在 SML 中执行此操作有无数种方法。这首先取决于您使用什么数据结构来执行此操作,其次取决于您是否希望使用“惰性”函数/流。

    我的建议是先编写一个简单的路径查找器,然后将其扩展为将所有路径生成为列表或其他数据结构。最后对该列表进行排序以获得最小的行程长度。在考虑如何解决此问题时,请使用 wiki 上的 TSP 作为有用的资源。

    很抱歉,我不负责为别人做作业。

    良好的SML 参考和another

    【讨论】:

      【解决方案2】:

      我不知道如何在 SML 中使用二维数组。这是一个 F# 解决方案:

      let salesman2 (g:int array array) = 
          let n = Array.length g
          let rec salesman' visited last acc = 
              if Set.count visited = n then acc
              else 
                  {0..n-1} 
                  |> Seq.filter (fun i->not (Set.contains i visited)) 
                  |> Seq.map (fun i->salesman' (Set.add i visited) i (acc + g.[last].[i]))
                  |> Seq.min
          salesman' Set.empty 0 0 
      
      let g = [|[|0;1;2;4|]; [|1;0;2;2;|]; [|2;2;0;3|]; [|4;2;3;0|] |]
      salesman2 g
      

      如果您了解 SML,将其翻译成 SML 应该很简单。

      【讨论】:

      • 我很高兴我忘记了爱丁堡大学的部分理学硕士课程!
      猜你喜欢
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      • 2015-09-03
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 2019-09-04
      • 2011-09-08
      相关资源
      最近更新 更多