老虎过河的后续问题。

请问请问Index类是什么作用?first和second分别代表的是什么?,privatestaticList<Index>getIndex(intlen)这个方法是什么... 请问请问Index类是什么作用?first和second分别代表的是什么?,private static List<Index> getIndex(int len)这个方法是什么原理?非常感谢!!! 展开
 我来答
飞尼思
2013-09-05
知道答主
回答量:11
采纳率:0%
帮助的人:12.8万
展开全部
实在不好意思,回复晚了。

Index 类用来描述划船过河的老虎的序号。first 是船里第一只老虎,second 是船里第二只老虎。(船里最多只能有两只老虎)

second 老虎的序号是-1 的情况下表示没有第二只老虎,即船里只有一只老虎。

private static List<Index> getIndex(int len) 这个方法是len 个数中任意选出2个数,总共有多少种不同的可能性。

这里没有做优化,先做的是求出长度为len 的集合a全部的子集,然后再a的全部子集中筛选出长度为2的子集。

关于获取长度为 len 的集合全部子集的原理:

假设一个集合{a,b,c},它的全部子集数目应该是 2^3 = 8 (包括空集),这个是数学公式(集合{a1,a2,....an} 全部子集的数目是2^n),就不证明了。

对于我们而言例如集合{a,b} 和 集合{b,a}是同一个子集,对于计算集合子集的时候是不需要用来分开来计算两次的。

所以人为上可以假设元素a 默认就出现在第一位,元素b默认出现在第二位,元素c 默认出现在第三位。

有了上述的假设,计算集合{a,b,c} 全部子集的问题就可以简化成每个位置有没有元素出现了,并且如果某个位置有元素出现,这个元素必然是已知,并且唯一的。例如第一位置有元素,那么一定是a,不可能是b 或者c

在计算机中判断有,或者没有最好的方法就是二进制数。我们可以将集合{a,b,c}全部子集用以下二进制数来表示(1表示有,0表示没有):
000({空集}), 001{c},010{b},011{bc},100{a},101{ac},110{ab},111{abc}

把这些二进制数转换成十进制数会发现:这些数就是0~7。

因此可以总结: 对于任何长度为len 的集合,它的全部子集可以用0~len-1的二进制数来表示。

希望以上解释能过帮上忙。-_-
来自:求助得到的回答
penguin1314520
2013-09-03 · TA获得超过207个赞
知道小有建树答主
回答量:866
采纳率:0%
帮助的人:245万
展开全部
代码??? 程序里面的JAVA
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式