Math 至少包含3个连续元素的{1,2,3,…,N}子集的数目
假设我们有一个像Math 至少包含3个连续元素的{1,2,3,…,N}子集的数目,math,combinatorics,Math,Combinatorics,假设我们有一个像{1,2,3}这样的集合,那么只有一种方法可以选择3个连续的数字。。。这是集合{1,2,3} 对于一组{1,2,3,4}我们有3种方法:1232341234 (从技术上讲,这些是无序的数字集,但连续书写它们会有所帮助) f(5);{1,2,3,4,5}->8种方式:123123412351234523423453451345 f(6);{1,2,3,4,5,6}->20种方式: f(7);{1,2,3,4,5,6,7}->47种方式: 对于给定的N,我可以通过施加蛮力得到答案
{1,2,3}
这样的集合,那么只有一种方法可以选择3个连续的数字。。。这是集合{1,2,3}
对于一组{1,2,3,4}我们有3种方法:123
234
1234
(从技术上讲,这些是无序的数字集,但连续书写它们会有所帮助)
- f(5);{1,2,3,4,5}->8种方式:
1234123
1235
12345
234
2345
345
1345
- f(6);{1,2,3,4,5,6}->20种方式:
- f(7);{1,2,3,4,5,6,7}->47种方式:
这个问题进一步推广到……在一组大小为N的数据中发现m个连续数。这听起来像是我的家庭作业,所以我就让你开始吧。一种方法是考虑运行的最低和最高成员,L和H。如果设置的大小为N,最小运行长度为M,那么对于L的每个可能位置P,您可以计算出H有多少个位置….
不确定您的意思是连续还是不连续。如果没有,那么对于{1,2,3,4}有4种可能性:{1,2,3,3}{2,3,4}{1,3,4}{1,2,3,4}
我想你可以用N来计算解/3.N!=N*(N-1)(N-2).*1.通过一点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)
y=set()
def cons(li,num):
如果len(li)
这个解决方案会很慢(实际上,它的复杂性是指数级的),但请尝试一些小的列表大小,我认为您应该能够找到这种模式。在这个问题和“在某个地方一行中至少有三个连续的
1
s的N位二进制数之间有一个双射。”(如果在子集中排除,则作为数字的双射为0,如果在子集中包含,则为1)
这是一个已知的问题,应该有足够的信息供google搜索结果,如果您搜索具有m个连续1s的n位二进制字符串的数量,第二个点击是
或者,您也可以将其查找为(基于您在前几个术语中所做的暴力强迫),从而得出2^n-Tribonaci(n+3)
,有关Tribonaci数的显式公式,请参阅。它还提供了一个递归关系。给出的类比是“概率(2^n中的一个)”在一枚普通硬币的n次投掷中至少获得1次3个头的跑步”
我只能假设一般问题的答案是2^n-Fm(n+m),其中Fm是mth(编辑:确实如此)快速回答:
长答覆:
首先,我要重新陈述这个问题,因为你的问题陈述不够清楚
- 规则1:对于所有连续数字集1..n,其中n为2或更多
- 规则2:计算连续数m..m+q的子集S(n),其中q为2或更多
- 规则3:S(n)=S(n-1)+T(n)…对于某些T
- 规则4:T(n)包含长度为3到n的以n结尾的所有序列
- S(3)=S(3)
- S(4)=S(3)+T(4)
- S(5)=S(4)+T(5)=S(3)+T(4)+T(5)
- 对于从4到n的所有f,S(n)=S(3)+T(f)
S(n) = (n-1)*(n-2) / 2
让我们检查一下它的工作原理:
S(3) = 2*1/2 = 1
S(4) = 3*2/2 = 3
S(5) = 4*3/2 = 6
S(6) = 5*4/2 = 10
我很满意。如何有20种方法选择长度>=3的12345子字符串?我只数6。如果是作业,请将问题标记为
作业
,并说明您尝试了什么。谢谢!有6种以上。要列出一些:123 234 345 124 125 235 245 135 1234 2345 1245 134512345@DrBards124、125等等不是连续的ve数sequences@ninjagecko也许更多:1232343451234123513451345234545这不是一个家庭作业…这是我通过写算法问题的解决方案发现的模式…我相信一定有一些数学证明的解决方案在那里。嘿,我也要发同样的帖子:)。递归关系是a(n)=3*a(n-1)-a(n-2)-a(n-3)-2*a(n-4),a(0)=0,a(1)=0,a(2)=1,a(3)=3。
S(6) = T(6) + T(5) + T(4) + S(3)
10 = 4 + 3 + 2 + 1
S(n) = (n-1)*(n-2) / 2
S(3) = 2*1/2 = 1
S(4) = 3*2/2 = 3
S(5) = 4*3/2 = 6
S(6) = 5*4/2 = 10