Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 至少包含3个连续元素的{1,2,3,…,N}子集的数目_Math_Combinatorics - Fatal编程技术网

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种方式:
    123
    1234
    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,我可以通过施加蛮力得到答案,并计算所有这样的子集有3个或更多的连续数

在这里,我只是想找出一种模式,一种获得给定N的所有此类子集的数量的技术


这个问题进一步推广到……在一组大小为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或更多

S(n=3) 经检查,我们只发现一个-123

S(n=4) 通过检查我们发现了3!-123 234和1234

请注意,S(4)包含S(3),加上两个新的数字…都包括新的数字4…嗯

S(n=5) 通过检查,我们发现……S(n=4)以及345 2345和12345。总共是3+3=6

我认为这里形成了一种模式。让我们定义一个新的函数T

  • 规则3:S(n)=S(n-1)+T(n)…对于某些T
我们知道S(n)包含数字n,现在应该已经发现S(n)也包含(作为子组件)所有长度为3到n的序列,包括数字n。我们知道它们不能在S(n-1)中,所以它们必须在T(n)中

  • 规则4:T(n)包含长度为3到n的以n结尾的所有序列
S(n)中有多少个序列? 让我们回顾s(3)s(4)和s(5),并合并T(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)
那么在一个给定的T中有多少个呢

回顾规则5——它描述了多少序列

对于T(4),它描述了所有以4结尾的序列3和更长的序列

对于T(5),它描述了以5结尾的所有序列3和更长的序列。(即345 2345=2)

看起来很像T(n)就是n-2

所以

及 S(7)=15=5+4+3+2+1 S(8)=21=6+5+4+3+2+1

把它变成一个公式 2*s(8)是多少

42=6+5+4+3+2+1+1+2+3+4+5+6

将每对最大值和最小值相加:

42=7+7+7+7+7+7+7

42=7*6

但这是2*s(8),所以

S(8)=42/2=21=7*6/2

这概括了:

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