首页
学习
活动
专区
圈层
工具
发布

序变换
EN

Stack Overflow用户
提问于 2016-06-03 05:45:24
回答 1查看 70关注 0票数 0

假设我有两个订单ABCDE和EDCBA,我想从一个改变到另一个。但是我一次只能换两组订单,每组都有相关的成本。

因此,在这种情况下,我可以从(A)(BCDE)到(BCDE)(A)到(CDE)(B)(A)到(C)(DE)BA到(DE)(C)(B)(A),成本将是成本(A)*成本(BCDE)+成本(B)*成本(CDE)+成本(C)*成本(DE)+成本(D)*成本(E)

在另一种情况下,如果我想从ABCD转到CDBA,我可以将(AB)(CD)到(CD)(BA)与成本(AB)*成本(CD)一步到位。

我想问的是,我可以使用哪些算法来(1)最小化将一个订单转换成另一个订单所需的步骤,(2)如果我也希望将成本降到最低呢?(最小化成本并不一定意味着步骤最小化)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-03 07:00:20

对我来说,这就像一个最短路径问题,类似于其他“如何从一种状态获得到另一种状态”,比如15-拼图

当将其作为最短路径问题求解时,您可以将问题建模为一个图,其中所有有效状态(在您的例子中,所有字符的排列)都是顶点,所有有效的转换都是边。正式:

代码语言:javascript
复制
G = (V,E)
V = { p | p is a permutation of the start/end state }
E = { (u,v) | can transform u to become v in one step }

在加权版本(最小成本)中,也有一个权重函数:w(u,v),这是进行转换的代价。

在建立了一个图形模型之后,这基本上是从一个源(起始状态)到一个目标(目标)的最短路径。

例如,可以通过以下方法解决这一问题:

未加权(最短距离):

加权(最小费用):

重要提示:

您不需要在开始之前生成图形,您可以有一个函数next:V->2^V,该函数给定某种状态-从它生成所有可能的转换。然后,您可以在这个next()函数中使用这些算法中的任何一个,并且只生成(动态)解决方案期间所需的图的部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37606758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档