假设我们有一个像{1,2,3}这样的集合,那么只有一种选择三个连续数字的方法.这是集合{1,2,3}..。
对于一组{1,2,3,4},我们有三种方法:123 234 1234
(从技术上讲,这些都是无序的数字集,但连续地编写它们会有所帮助)
123 1234 1235 12345 234 2345 345 1345所以对于给定的N,我可以通过施加蛮力来得到答案,并计算出所有这类子集都有3个或更多的连续数。
这里我只是想找出一种模式,一种获得给定N的所有这类子集的数目的技术。
该问题进一步推广到N的一组.....discover m连续数中。
发布于 2012-09-07 05:00:55
对我来说这听起来像是家庭作业,所以我就让你开始吧。FoOne方法是考虑运行的最低和最高成员,L和H。如果集合大小为N,最小运行长度为M,那么对于L的每一个可能的位置P,您可以计算出H有多少个位置.
发布于 2012-09-07 05:03:37
不确定你指的是连续还是不连续。如果没有,则对于{1,2,3,4}有4种可能性:{1,2,3} {2,3,4} {1,3,4} {1,2,3,4}
我想你可以用N!/3计算出这个解!其中N!= N*(N-1)(N-2)...*1.
发布于 2012-09-07 05:09:07
使用一些python代码,我们可以研究以下内容:
y = set()
def cons(li, num):
if len(li) < num:
return
if len(li) == num:
y.add(tuple([i for i in li]))
else:
y.add(tuple([i for i in li]))
cons(li[1:], num)
cons(li[:-1], num)这个解决方案将非常慢(实际上,它的复杂性是指数级的),但是尝试一下,对于一些小的列表大小,我认为您应该能够获得这种模式。
https://stackoverflow.com/questions/12311918
复制相似问题