Permutation 找到选择项目的总方法,以确保没有两个项目是连续的
一行中有n个项目。我们必须找到在不允许选择两个连续项目的限制下选择项目的方式Permutation 找到选择项目的总方法,以确保没有两个项目是连续的,permutation,combinatorics,Permutation,Combinatorics,一行中有n个项目。我们必须找到在不允许选择两个连续项目的限制下选择项目的方式 我试着用递归关系来做这件事,但没有达到任何目的。请帮我解决这个问题。我想您可以通过构建一个长度为n的数组来实现这一点,数组中的每个位置表示可以选择的项目数量,如果该位置是第一个选择的位置。(从左到右选择。) Psuedo代码(未测试): int[]列表=新的int[n]; int-total=0; 对于(int位置=n-1;位置>=0;位置--) { 列表[位置]=1; 对于(int subPos=position+2
我试着用递归关系来做这件事,但没有达到任何目的。请帮我解决这个问题。我想您可以通过构建一个长度为n的数组来实现这一点,数组中的每个位置表示可以选择的项目数量,如果该位置是第一个选择的位置。(从左到右选择。) Psuedo代码(未测试):
int[]列表=新的int[n];
int-total=0;
对于(int位置=n-1;位置>=0;位置--)
{
列表[位置]=1;
对于(int subPos=position+2;subPos
说明:
此操作完成后,list[i]
中的值表示从行中拾取项目的方式数,其中项目i是拾取的最左侧项目
显然,只有一种方式可以拾取项目,即最右边的项目是拾取的最左边的项目。如果n=5,则在这种情况下可以这样表示拾取:00001
类似地,对于最右边的第二个项目,只有一种方法可以选择最左边的项目:00010
对于第三个最右边的项目,有一种方法可以拾取它,即您只拾取该项目,然后您必须添加拾取可能第二个拾取的每个项目的方法数(这就是第二个循环的目的)。因此该项将具有:00100
和00101
最右边的第四项:01000
,01010
,01001
最右边的第五项(左边的第一项):10000
,10100
,10101
,10010
,10001
因此n=5的数组将以以下值结束:{5,3,2,1,1}
然后总数是:5+3+2+1+1=12在网上搜索后,我得到了上述问题的答案 假设有N个项目。如果N是偶数,我们可以选择几乎N/2个项目,这样就没有两个是连续的;如果N是奇数,我们可以选择几乎(N+1)/2个项目。设K为可选择的最大项目数 我们可以选择1到K个项目
- 对于选择一个项目,我们可以选择任何项目
- 为了选择两个项目,我们将N-2个项目保持在一个序列中。下面的圆圈表示序列中的项目。从第一项的左边到最后一项的右边,总共有N-1个空格。空格用下划线“u”表示。如果我们从任何空格中选择两个,并用item替换它们,那么我们将有N个项目,并且所选的两个项目将不连续,因为没有两个空格是连续的
_ o _ o _ o _ o _ o _ o _ o _ o _ o _ o _
- 对于选择p项,我们将按顺序保留N-p项,这将导致N-p+1空格。我们可以从这些N-p+1空间中选择任意p空间
NC1+N-1C2+N-2C3+…+N-K+1CK是前N个斐波那契数(1,1,2,3,5,…)的和。
前N个斐波那契数之和也是F(N+2)-1,这是一个简单的解 假设您需要从前100个自然数中选择3个,这样就不会有两个是连续的
_ o _ o _ o _ o _ o _ o _ o _ o _ o _ o _
考虑前98个自然数,以98C3
的方式随机选择3个自然数(a、b、c)
我们知道0
,b
,c<99
和a-b
,b-c
,a-c>=1
(因为a,b,c是不同的)
设A=A+0
<代码>B=B+1<代码>C=C+2
所以我们现在知道A,B和C中任意两个之间的差异大于1(即A,B和C不能是连续的数字)
和
0
,B
,C你解释为什么它是斐波那契级数的方式似乎很难理解。
我有一个更简单的解释方法,如下所示。
假设我们将n项的组合数表示为T(n)。
如果我们不选择第一项,则组合数量与剩余n-1项的组合数量相同,即T(n-1)。
如果我们选择第一个项目(我们不能选择第二个项目,因为它与第一个位置连续),那么组合的数量与剩余n-2个项目的组合数量相同,即T(n-2)。
因此得出以下结论
T(n) = T(n-1) + T(n-2).
T(1) = 2 (1. selected and 2. not selected)
T(2) = 3 (1. both not selected, 2. only first selected, 3. only second selected)
这是一个斐波那契级数,可以用O(n)时间复杂度计算。Ans)(n+1-r)cr
假设我们有n项。我们要选择或选择r项,确保不连续选择两个对象。我们将用“0”表示对象。
现在我们有一个00000000……0000{upton terms}的序列,现在当我们从'i'位置i={1,…,n}选择一个项目时,让我们把它表示为1。因此,如果我们从位置2选择一个项目,新序列将变成01000000…000{upton terms}。现在如果我们必须选择r元素,在我们正在设计的二进制序列中会有r1s。但有趣的是,在两个连续的1之间,可以有任意自然数的0。所以,如果我们把n-r(r1也会存在!)个零放在一起,那么总的n-r+1间隙(每个零的左右两侧)。然后我们必须将R1放置到位。我们可以从n-r+1个位置中选择r1s的位置。这可以在(n+1-r)C r中完成。
希望您能理解。您能列举n=5的解决方案吗?我只找到了10种解决方案,13524
和4种这种模式的滚动变体('352