performance - 最高效率

标签 performance algorithm traveling-salesman nonlinear-optimization

<分区>

最大效率问题

有N个城市,有一个流浪者。

已知他从一个城镇到另一个城镇所需的时间 - Txy(从城镇 x 到城镇 y)。

他可以从任何城镇到任何其他城镇,因此这是一个完整的图。

在每个城镇中,流浪者想要收集的金额为 Mx。

时间不够通过所有城市。

有总可用时间 T 和起点 i,问题是找到最佳路线,使他收集的钱最多。

输入数字范围:

  • N 在 400 到 600 之间
  • Mx(M1, M2, ...) 介于 100 和 500 之间,x 介于 1 和 N 之间
  • Txy在80到200之间,x和y在1到N之间
  • Txy 是最佳时间距离,因此对于介于 1 和 N 之间的任何 x、y 和 z,Txy < Txz + Tzy。
  • T 在 3500 到 5000 之间

最佳答案

看起来是动态的:

表示 a[ x ] - 从城市 x 收取的钱。

dp[ x ][ t ] 表示他花费时间 t 并在城市 x 完成可以获得的最大金额。初始化和更新如下:

  1. 起点 x0dp[ x0 ][ 0 ] := a[ x0 ]。对于其他城市 x dp[ x ][ 0 ] := -1 (无效);
  2. 对于1T的每次t:
    每个城市 x:
    每个城市 y s.t. 边[y][x]<=t:
    表示 p := t - edge[ y ][ x ];
    if dp[ y ][ p ] >= 0//有可能在时间 p 到达 y
    然后 dp[ x ][ t ] = max( dp[ x ][ t ], dp[ y ][ t - edge[ x ][ y ]] + a[ x ] )
  3. 返回所有 dp[ x ][ t ] 的最大值。

总复杂度为 O( T*N^2 )

关于performance - 最高效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14708655/

相关文章:

algorithm - 进行数据库查询 "Intelligent"?

algorithm - 使用模拟退火的旅行商邻居选择的性能差异

performance - 列出缓存行为

python - numpy "lock"跨进程占用什么资源?

javascript - 迭代树序列化函数

algorithm - 使用旅行商求解器确定哈密顿路径

algorithm - 有多个推销员的旅行推销员?

java - 使用 Spring Boot 负载测试 tomcat 7 时出现连接异常

c# - 使用异步代码测量 CPU 密集型时间

c - 面试谜题 : array size-n contains numbers from [i, i + n)