Performance 最大效率
最大效率问题 有N个城市,有一个流浪者 他从一个城镇到另一个城镇所花的时间是众所周知的——Txy(从x镇到y镇) 他可以从任何一个城镇前往任何其他城镇,因此这是一个完整的图表 在每个镇上都有流浪者想要收集的一笔钱 没有足够的时间穿越所有的城市 有了总可用时间T和起点i,问题是找到最佳路线,这样他收集的资金将达到最大 输入数字范围:Performance 最大效率,performance,algorithm,traveling-salesman,nonlinear-optimization,Performance,Algorithm,Traveling Salesman,Nonlinear Optimization,最大效率问题 有N个城市,有一个流浪者 他从一个城镇到另一个城镇所花的时间是众所周知的——Txy(从x镇到y镇) 他可以从任何一个城镇前往任何其他城镇,因此这是一个完整的图表 在每个镇上都有流浪者想要收集的一笔钱 没有足够的时间穿越所有的城市 有了总可用时间T和起点i,问题是找到最佳路线,这样他收集的资金将达到最大 输入数字范围: N在400到600之间 Mx(M1,M2,…)在100和500之间,x在1和N之间 Txy在80和200之间,x和y在1和N之间 Txy是最佳时间距离,因此对于1和
- 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
- T在3500和5000之间
- 似乎是动态的:
表示a[x]-从x市收取的款项
让dp[x][t]表示他可以收集的最大金额,花时间t并在城市x完成。初始化和更新如下:
- 对于起始点x0,dp[x0][0]:=a[x0]。对于其他城市xdp[x][0]:=-1(无效)李>
- 每次t从1到t:
对于每个城市x:
对于每个城市ys.t.edge[y][x]=0//有可能及时到达y p
然后dp[x][t]=max(dp[x][t],dp[y][t-边[x][y]]+a[x]) - 所有dp[x][t]上的最大返回值
总复杂度为O(T*N^2)这是一个众所周知的问题的变体,通常称为旅行商问题。 您可以在此处找到有关此问题和类似问题的详细说明以及wikipedia上的更多链接:
我正在考虑一种基于回溯的解决方案。 你应该定义一个算法来找到最佳的解决方案(一个得到更多的钱)。 当您已前往所有城市或超过您已到达的时间时,您将结束该算法。 忽略非盈利的候选人:你必须测试,根据剩余的最少参观城市数量,你赚的钱是否至少是当前的最佳解决方案;还要检查从一个城市到所有剩余城市的最短时间 要想知道你能挣多少钱,你必须将一个城市的最低收入乘以仍有多少城市需要参观 这同样适用于您访问所有剩余城市所需的最短时间 编辑:我忘了告诉你这个算法的代价是O(a^n),其中a是图的出现者的数目(即n*(n-1)),而n是顶点的数目(即n)。
如果您定义好的函数来了解实际候选对象何时不能成为解决方案,以及何时不能比当前最佳解决方案更好,那么成本可能会更好(如果您幸运地在迭代过程中找到了解决方案,这确实有助于减少操作时间).每个城镇的资金数额不得而知,因此最好的路线是从一个城镇到下一个城镇的最短路线 如果我使用递归在Javascript中编程,我会这样做:c=[“伦敦”、“曼彻斯特”、“利物浦”]//城市 t={ “利物浦”:{ “曼彻斯特”:130, “伦敦”:260 }, “伦敦”:{ “曼彻斯特”:250, “利物浦”:260 }, “曼彻斯特”:{ “伦敦”:250, “利物浦”:130 } }//城市之间的时间 cn=‘伦敦’//当前城市 var最短距离=500, 分配的时间=300, 下一个城市, 时间=0, 总时间=0, 路径=[cn]; 最优=函数(cn){ 对于(t[cn]中的i){ //为了不去参观我们已经参观过的城市 if(路径索引of(i)=-1){ next_city=t[cn][i]
分配的时间){ 写下(“城市之间的最佳路线是:“+路径”); }否则{ 最佳(下一个城市); } } 最优(cn);
对不起,没有关于算法的帮助,这是从编程的角度来看的,因为我认为这是一个有趣的挑战。以上不是最佳思维。这是一个问题吗?公开的挑战?你在哪里需要帮助?这不是挑战,这是我面临的真正问题。问题是在另一个上下文中,但我这样写是为了更容易阅读/理解。我在寻找最佳解决方案。他从哪里开始?在任何一个城市?起点被定义为一个城市。每个城市的货币数量是已知的还是随机的,介于100到500之间?不是。旅行推销员问题需要访问所有的城市,是NP难问题,而这个问题没有,并且有多项式解,请看我的回答。我说这个问题是一个与旅行推销员问题不同的变体。那么我不明白P问题怎么可能是NP问题的变体。那么“变体”是什么意思呢?变体的意思是相似的,但在某些方面不同。所描述的问题类似于定向越野记分赛。定向运动员在访问控制点时获得分数。每个控件具有不同数量的点(已知)。有一个时间限制,超过时间限制完成比赛将失去分数。没有足够的时间访问所有控件。赢家是获得最多分数的定向运动员。这个问题c = ['london', 'manchester', 'liverpool']; //Cities t = { 'liverpool': { 'manchester': 130, 'london': 260 }, 'london': { 'manchester': 250, 'liverpool': 260 }, 'manchester': { 'london': 250, 'liverpool': 130 } } //Time between cities cn = 'london'; //Current city var shortestDistance = 500, allottedTime = 300, next_city, time = 0, totalTime = 0, path = [cn]; optimal = function (cn) { for (i in t[cn]) { //So as not to visit cities that we have already visited if(path.indexOf(i)===-1) { next_city = t[cn][i] < shortestDistance ? i : next_city; shortestDistance = t[cn][i]; totalTime = Math.min(t[cn][i] , shortestDistance); } } time += totalTime; path.push(next_city); if(time > allottedTime){ document.write("The most optimal route between cities is: " + path); } else { optimal(next_city); } } optimal(cn);