如何判断k-server动态解决方案的最佳路径在数组成本[i] [j] [k] [t]中的位置?

时间:2016-11-30 18:20:23

标签: c++ c arrays algorithm dynamic-programming

您可以通过动态编程类型参数找到最优策略:如果输入序列是n个请求点long(p1,...,pn),则创建一个n×n×n×n数组;入口成本[i] [j] [k] [t]是从给定起始位置开始的最便宜的移动序列的成本,并且在时间步骤t之前提供请求,并且最终在pi处以黄色服务器结束,pj的红色服务器和pk的蓝色服务器。 ijk中的一个必须是t,因为pt的最后一个请求被提供,所有其他表条目的成本为∞。必须通过从步骤t-1的位置移动三个服务器之一来达到任何可能的表条目。

现在说我有一个名为position的数组,其中包含点(x,y)坐标值,位置0,1和2的数组分别是服务器1,2,3的初始位置,以及来自索引为3到数组末尾的数组是请求点。

如果我使用此算法并计算所有3台服务器可以采用的所有可能路径,我如何知道k-server问题的最佳路径位于何处?

如果位置的大小是10,为什么成本[9] [9] [9] [9]不是解决方案,我在哪里可以找到解决方案?

1 个答案:

答案 0 :(得分:0)

要在计算成本后找到最佳解决方案,您可以这样:

  1. i的最终值找到jkt的最佳组合(只需尝试所有三元组)。

  2. 使用(i, j, k, t)初始化当前状态。

  3. 继续寻找父状态,直到达到初始状态为止。

  4. 要查找父级,您可以遍历可能导致当前状态的所有状态,并确保从先前状态到当前状态的转换确实产生当前状态的成本(如果有几个选项,你可以选择其中任何一个。)

  5. 您还可以存储父数组并在计算cost函数时填充它。

  6. 一旦您了解了导致最终最优解的状态序列,您就可以通过检查每个转换的哪个服务器移动来轻松获取路径。