首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有邻域搜索的子集和- java

具有邻域搜索的子集和- java
EN

Stack Overflow用户
提问于 2016-06-20 20:58:41
回答 2查看 312关注 0票数 1

我正在尝试使用邻域算法实现子集和问题。下面是伪代码:给定一个包含10个元素的集合X (+ve和-ve),我必须找到X的一个子集,使得和尽可能接近于0。

在伪代码之后,我生成了一个随机的解决方案S,但我在构建邻居S时遇到了一些困难。

如何计算S的邻域?S的邻域是什么?

例如。

X= x0、x1、x2、x3、x4、x5、x6、x7、x8、x9

S= x1、x7、x2、x3

S的邻域是什么?

EN

回答 2

Stack Overflow用户

发布于 2016-06-20 21:13:53

邻里关系没有一个独特的定义,它取决于问题。在您的例子中,一个好的定义可能是all the tuples that have (at most) n different elements from the current solution,其中n可能是1, 2 , size - 1 (如果您使用n = size,您正在考虑整个解决方案空间,并且谈论邻域没有更多的意义)。

在您的示例中,采用与当前解决方案不同一步的所有解决方案在以下一组解决方案中结束:

D=[ x0,x7,x2,x3,x4,x7,x2,x3,x5,x7,x2,x3,x6,x7,x2,x3,x8,x7,x2,,... ]

票数 0
EN

Stack Overflow用户

发布于 2016-06-20 21:33:48

让我们使用下面的例子:

S是一个解决方案,让我们看看如何从它生成另一个解决方案:

  • 我们可以向其中添加另一个x_i,例如创建x1、x2、x3、x7、x8
  • ,也可以从其中删除一个x_i创建例如x2、x3、x7

使用上述操作之一从S获得的每一个这样的解都是S的邻域。所有这些解都来自邻域。

请记住,x1、x3、x2和x1、x2、x3是相同的解决方案,因为元素的顺序并不重要。

形式上,如果相应的解包含x_i,则每个解都是长度为10的二进制向量v,它由0和1组成,例如vi == 1。

与示例中的S对应的向量将如下所示:S= 0,1,1,1,0,0,0,0,1,0,0

每一个这样的向量都是解图中的一个顶点。如果可以使用某种简单的操作将一个顶点转换为另一个顶点,则存在两个这样的顶点之间的边。

我希望这能帮到你。

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

https://stackoverflow.com/questions/37923241

复制
相关文章

相似问题

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