关于Collat​​z假设(3n +1)中序列的形成

我被诸如Collat​​z问题之类的任务所吸引。 它们很容易制定和完善您的头脑,尤其是算法思维,这对程序员非常有用。

该任务的制定非常简单:
取任何自然数n。 如果是偶数,则将其除以2,如果是奇数,则将其乘以3并加1(我们得到3n +1)。 我们对结果编号执行相同的操作,依此类推。

Collat​​z的假设是,无论我们采用什么初始数字n,迟早我们都会得到一个。

从算法上看,它看起来像这样:

while (number > 1) { if (number % 2 === 0) number = number / 2; else number = 3 * number +1; } 

例如,取n = 5。 它是奇数,这意味着我们将对奇数执行操作,即3n +1 =>16。16是偶数,即我们将对偶数执行操作,即n / 2 => 8 => 4 => 2 => 1。
在n = 5处形成的序列:16、8、4、2、1。

我请你原谅我的数学知识,如果我在某个地方犯了错误,请告诉我。

让我们挑出关于单元的信息总数和关于单元的真实信息数。 表示这些步骤。

考虑n = 7的序列:
22、11、34、17、52、26、13、40、20、10、5、16、8、4、2、1。
一共有16个步骤,而实际投入另一个数字集的实际步骤是其中的5个:
7、11、17、13、5。
真正的步数Sa(n)是达到整数所需的操作数3n +1

表格示例清楚地说明了这个想法:
锡(0)锡(1)锡(2)锡(3)锡(4)锡(5)锡(6)锡(7)锡(8)锡(9)锡(10)锡(11)锡(12)
2531711792533435739105
410634221418岁4965岁865978203
820123523151950668711479209
16211368442836516789115153210
324024694529日3798130182118156211
6442267046303899131173119157406
128804875885672100132174228158407
2568452136905874101133177229305409
5128553138926077102134178230306418

在这样的表中,订单及其自身的模式已经可见。
如您所见,两个的幂永远不会变成奇数,因此归结为简单的除法。
Sa(0)的序列仅由1个公式形成。

P0k=22k


无需采取真正的步骤;通过简单的划分,一切都会减少为统一。
知道这一点后,您可以从表中删除所有为2的倍数的数字。
锡(0)锡(1)锡(2)锡(3)锡(4)锡(5)锡(6)锡(7)锡(8)锡(9)锡(10)锡(11)锡(12)
531711792533435739105
2113352315194965岁875979203
8553694529日37516789115153209
3411137593617799131173119157211
136521314118111781101133177229305407

现在,要抓住模式变得更加困难,但是只有一种。 现在最有趣的是序列的形成。 不仅如此,5之后的下一个数字是21,之后是85。
实际上, Sa(1)是序列A002450 (0、1、5、21、85、341、1365、5461、21845、87381 ...)。 它由以下公式组成:

Pk=4k1 over3


可以通过递归公式描述相同的序列:

Pk=4k0+1 k0=


P1=41+1=5;
P5=45+1=21;
P21=421+1=85;
依此类推...

尽管可以无限期地进行,但已建立了一系列第一步。 让我们继续第二步。 可以从奇数公式表达到步骤2的过渡公式。
知道我们将分享结果 3n+1几次,它可以写成 22 alpha在哪里  alpha-师数。

Pk=3n+1 over22 alpha;22 alphaPk=3n+1;3n=22 alphaPk1;


最终公式采用以下形式:

nPk alpha=22 alphaPk1 over3;


我们还针对  beta喜欢 22 alpha+ beta这样就发生了将数字不是3的倍数除以3的选择。

nPk alpha beta=22 alpha+ betaPk1 over3;


让我们检查一下公式,因为alpha未知,请检查5个连续的alpha:

n5 alpha beta=22 alpha+ beta51 over3;


n5,0,1=20+151/3=3.
n5,1,1=22+151/3=13.
n5,2,1=2551/3=53.
n5,3,1=2751/3=213.
n5,4,1=2951/3=853.

因此,第二步的顺序开始形成。 但是,应该注意的是113不是按顺序排列的,重要的是要记住该公式是从5计算得出的。

n = 113实际上:
n85,0,2=20+2851/3=113.

总结一下:
来自很多 San+1由功能产生 nPk alpha beta来自集合中的每个元素 San
知道这一点后,您仍然可以通过删除所有alpha倍数来缩短表格。
锡(0)锡(1)锡(2)锡(3)锡(4)锡(5)锡(6)锡(7)...
53171179...
11375201267715...
22715140110731425...

为了清楚起见,下面是一个示例,说明如何从 2从产生集合的元素 3对于从0到4的alpha。
P(k)= 3P(k)= 113P(k)= 227
3从α= 0生成:
没事

从α= 1得到的13产生:
17
69
277
1109
4437

来自α= 2的53生成:
35
141
565
2261
9045

213从α= 3生成:
没事

α= 4的853生成:
1137
4549
18197
72789
291157

从α= 0产生的113
75
301
1205
4821
19285

α= 1的453生成:
没事

1813从α= 2生成:
2417
9669
38677
154709
618837

7253从α= 3生成:
4835
19341
77365
309461
1237845

来自α= 4的29013生成:
没事

从α= 0产生227:
151
605
2421
9685
38741

从α= 1生成909:
没事

3637从α= 2生成:
4849
19397
77589
310357
1241429

14549从α= 3生成:
9699
38797
155189
620757
2483029

来自α= 4的58197生成:
没事


结合这些集合,我们从Sa(3)得到集合:
17,35,69,75,141,151,277,301,565,605,1109,1137,1205,2261,2275,2417,2421,4437,4549,4821,4835,4849,9045,9101,9669, 9685、9699、17749、18197、19285、19341、19397、19417 ...
而且,去除度  alpha>0我们得到:
17、75、151 ...
也就是说,它可以归结为:

nPk beta=2 betaPk1 over3;



为什么在某个地方  beta=2在某处  beta=1

返回序列A002450。 有一个有趣的依赖项:

Pm=43m1/3-不产生子序列。
Pm=43m+11/3-产生子序列  beta=2
Pm=43m+21/3-产生子序列  beta=1

一个数字只有3个潜在的子数组。
如果应用于递归公式,则:
功能介绍 n gamma alpha beta在哪里 \伽-3的任意倍数构成一个空集⨂。

An gamma alpha beta=
功能介绍 n lambda alpha beta在哪里  lambda-生成的任何数字 \伽 beta=2形成属于自然数N的数字K的集合。

KnP gamma alpha2N
功能介绍 nP lambda alpha beta beta=1形成属于自然数N的数字L的集合。

LnP lambda alpha1N.

显然,这可以某种程度上简化为更严格和基于证据的表述。

实际上,这就是在Collat​​z假设中形成序列的方式。
剩下一个细节。 有必要从我们获得的集合中的绝对步骤中恢复完整的集合。

赔率公式:

nPk alpha beta=22 alpha+ betaPk1 over3;


除了奇数以外,还需要还原很多偶数。 为此,请回忆公式:

P0k=22k


剩下的只是将所有关联在一起:

nPk alpha beta epsilon=22 alpha+ betaPk1 over32 epsilon


最终版本:

nk alpha beta epsilon=2 epsilon22 alpha+ beta4k+11 over3;


因此,任何k都可以生成一个序列。
反之亦然,任何自然数绝对属于 nk
如果是这样,那么Collat​​z完全有可能是正确的。

对于javascript函数实现的最终示例:

 function collatsSequence( number, sequenceLength, alpha, epsilon ) { //     , //  number let set = []; //    while (number % 2 === 0) number /= 2; //    , //   number,  sequenceLength for (let k = 0; k < sequenceLength; k++) { //    alpha for (let a = 0; a < alpha; a++) { //  ,  if (number % 3 === 0) break; //   beta = 1 let numWithBeta = (number * 2 ** (2 * a + 1) - 1) / 3; //      3  beta === 1 //     3  beta === 2 if (Math.floor(numWithBeta) !== numWithBeta) //   beta = 2 numWithBeta = (number * 2 ** (2 * a + 2) - 1) / 3; //      epsilon for (let e = 0; e < epsilon; e++) set.push(numWithBeta * 2 ** e); } //      number = number * 4 + 1; } return set; } console.log( collatsSequence(5, 5, 2, 2) ); // [ 3, 6, 13, 26, 113, 226, 453, 906, 227, 454, 909, 1818 ] 

Source: https://habr.com/ru/post/zh-CN419075/


All Articles