老虎过河的后续问题。
请问请问Index类是什么作用?first和second分别代表的是什么?,privatestaticList<Index>getIndex(intlen)这个方法是什么...
请问请问Index类是什么作用?first和second分别代表的是什么?,private static List<Index> getIndex(int len)这个方法是什么原理?非常感谢!!!
展开
2个回答
展开全部
实在不好意思,回复晚了。
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的二进制数来表示。
希望以上解释能过帮上忙。-_-
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的二进制数来表示。
希望以上解释能过帮上忙。-_-
来自:求助得到的回答
展开全部
代码??? 程序里面的JAVA
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询