Sobre a formação de sequĂȘncias na hipĂłtese de Collatz (3n + 1)

Sinto-me atraĂ­do por tarefas como o problema de Collatz. Eles sĂŁo fĂĄceis de formular e treinar perfeitamente, especialmente o pensamento algorĂ­tmico, o que Ă© muito Ăștil para o programador.

A tarefa Ă© formulada de maneira bastante simples:
Tome qualquer nĂșmero natural n. Se for par, divida-o por 2 e, se for Ă­mpar, multiplique por 3 e adicione 1 (obtemos 3n + 1). Realizamos as mesmas açÔes no nĂșmero resultante, e assim por diante.

A hipĂłtese de Collatz Ă© de que, independentemente do nĂșmero inicial n que tomarmos, mais cedo ou mais tarde obteremos um.

Algoritmicamente, fica assim:

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

Por exemplo, considere n = 5. É Ă­mpar, o que significa que realizamos a ação no Ă­mpar, ou seja, 3n + 1 => 16. 16 Ă© par, significa que realizamos a ação no par, ou seja, n / 2 => 8 => 4 => 2 => 1.
A sequĂȘncia formada em n = 5: 16, 8, 4, 2, 1.

Peço que vocĂȘ me perdoe pela minha matemĂĄtica, deixe-me saber se eu cometer algum erro em algum lugar.

Vamos destacar o nĂșmero total de informaçÔes na unidade e o nĂșmero real de informaçÔes na unidade. Indique estas etapas.

Considere a sequĂȘncia para n = 7:
22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1.
Existem 16 etapas no total, e as verdadeiras etapas que sĂŁo realmente lançadas em outro conjunto de nĂșmeros sĂŁo 5:
7, 11, 17, 13, 5.
O verdadeiro passo Sa (n) Ă© o nĂșmero de operaçÔes 3n + 1 no nĂșmero necessĂĄrio para alcançar a unidade.

A ideia Ă© claramente demonstrada pelo exemplo de uma tabela:
Sn (0)Sn (1)Sn (2)Sn (3)Sn (4)Sn (5)Sn (6)Sn (7)Sn (8)Sn (9)Sn (10)Sn (11)Sn (12)
2531711792533435739.105
41063422141849.658659.78203
820123523151950.66.8711479209
162113684428.36.516789115153210.
32.40.2469452937.98130182118156211
6442.267046.3038.99131173119157406
1288048.758856.72100132174228158407
25684521369058.74101133177229305409
5128553138926077102134178230306418

Nessa tabela, a ordem, seu prĂłprio padrĂŁo, jĂĄ estĂĄ visĂ­vel.
Como vocĂȘ pode ver, o poder de dois nunca se tornarĂĄ estranho, entĂŁo tudo se resume a uma divisĂŁo simples.
Uma sequĂȘncia de Sa (0) Ă© formada por apenas 1 fĂłrmula.

P(0,k)=2∗2k.


NĂŁo Ă© preciso dar passos verdadeiros: pela simples divisĂŁo tudo serĂĄ reduzido Ă  unidade.
Sabendo disso, vocĂȘ pode soltar da tabela todos os nĂșmeros que sĂŁo mĂșltiplos de dois.
Sn (0)Sn (1)Sn (2)Sn (3)Sn (4)Sn (5)Sn (6)Sn (7)Sn (8)Sn (9)Sn (10)Sn (11)Sn (12)
531711792533435739.105
21133523151949.658759.79203
855369452937.516789115153209
3411137593617799131173119157211
136521314118111781101133177229305407

Agora Ă© mais difĂ­cil entender o padrĂŁo, mas existe um. O mais interessante agora Ă© a formação de sequĂȘncias. NĂŁo apenas assim, o prĂłximo dĂ­gito apĂłs 5 Ă© 21 e depois Ă© 85.
Na verdade, Sa (1) Ă© a sequĂȘncia A002450 (0, 1, 5, 21, 85, 341, 1365, 5461, 21845, 87381 ...). É formado pela fĂłrmula:

P(k)=4k−1 acimade3.


A mesma sequĂȘncia pode ser descrita por uma fĂłrmula recursiva:

P(k)=4k0+1,com k0=1.


P(1)=4∗1+1=5;
P(5)=4∗5+1=21;
P(21)=4∗21+1=85;
E assim por diante ...

Uma série do primeiro passo é construída, embora possa continuar indefinidamente. Vamos para o passo dois. A fórmula de transição para a etapa 2 pode ser expressa a partir de uma fórmula ímpar.
Sabendo que vamos compartilhar o resultado 3n+1vĂĄrias vezes, pode ser escrito como 22 alphaonde  alpha- nĂșmero de divisĂ”es.

P(k)=3n+1 over22 alpha;22 alphaP(k)=3n+1;3n=22 alphaP(k)−1;


A fĂłrmula final assume a forma:

n(P(k), alpha)=22 alphaP(k)−1 over3;


TambĂ©m introduzimos um ajuste para  betacomo 22 alpha+ betapara que a opção de dividir o nĂșmero nĂŁo um mĂșltiplo de 3 por 3 aconteça.

n(P(k), alpha, beta)=22 alpha+ betaP(k)−1 over3;


Vamos verificar a fĂłrmula, jĂĄ que o alfa Ă© desconhecido, verifique 5 alfa consecutivos:

n(5, alpha, beta)=22 alpha+ beta∗5−1 over3;


n(5,0,1)=(20+1∗5−1)/3=3.
n(5,1,1)=(22+1∗5−1)/3=13.
n(5,2,1)=(25∗5−1)/3=53.
n(5,3,1)=(27∗5−1)/3=213.
n(5,4,1)=(29∗5−1)/3=853.

Assim, a sequĂȘncia do segundo passo começa a se formar. No entanto, pode-se notar que 113 nĂŁo estĂĄ em sequĂȘncia, Ă© importante lembrar que a fĂłrmula foi calculada a partir de 5 .

n = 113 de fato:
n(85,0,2)=(20+2∗85−1)/3=113.

Para resumir:
Lote de Sa(n+1)gerado por função n(P(k), alpha, beta)de cada elemento do conjunto de Sa(n).
EntĂŁo, sabendo disso, vocĂȘ ainda pode reduzir a tabela removendo todos os mĂșltiplos de alfa.
Sn (0)Sn (1)Sn (2)Sn (3)Sn (4)Sn (5)Sn (6)Sn (7) ...
53171179...
11375201267715...
22715140110731425...

Para deixar claro, aqui estĂĄ um exemplo de como os elementos de um conjunto de Sa(2)gerar elementos do conjunto de Sa(3)para alfa de 0 a 4.
P (k) = 3P (k) = 113P (k) = 227
3 de α = 0 gera:
Nada

13 de α = 1 gera:
17
69
277
1109
4437

53 de α = 2 gera:
35
141
565
2261
9045

213 de α = 3 gera:
Nada

853 de α = 4 gera:
1137
4549
18197
72789
291157

113 de α = 0 gera:
75
301
1205
4821
19285

453 de α = 1 gera:
Nada

1813 de α = 2 gera:
2417
9669
38677
154709
618837

7253 de α = 3 gera:
4835
19341
77365
309461
1237845

29013 de α = 4 gera:
Nada

227 de α = 0 gera:
151
605
2421
9685
38741

909 de α = 1 gera:
Nada

3637 de α = 2 gera:
4849
19397
77589
310357
1241429

14549 de α = 3 gera:
9699
38797
155189
620757
2483029

58197 de α = 4 gera:
Nada


Combinando esses conjuntos, obtemos o conjunto de Sa (3):
17, 35, 69, 75, 141, 151, 277, 301, 565, 605, 1109, 1137, 1205, 2261, 2275, 2475, 2417, 2421, 4437, 4549, 4821, 4835, 4849, 9045, 9101, 9669, 9685, 9699, 17749, 18197, 19285, 19341, 19397, 19417 ...
AlĂ©m disso, remover o grau  alpha>0nĂłs obtemos:
17, 75, 151 ...
Ou seja, tudo se resume a:

n(P(k), beta)=2 betaP(k)−1 over3;



Por que em algum lugar  beta=2e em algum lugar  beta=1?

Voltar Ă  sequĂȘncia A002450. Existe uma dependĂȘncia interessante:

P(m)=(43m−1)/3- nĂŁo produz seqĂŒĂȘncias filho.
P(m)=(43m+1−1)/3- produz seqĂŒĂȘncias filho quando  beta=2.
P(m)=(43m+2−1)/3- produz seqĂŒĂȘncias filho quando  beta=1.

Existem apenas trĂȘs matrizes filho em potencial para um nĂșmero.
Se aplicado a uma fĂłrmula recursiva, entĂŁo:
Função n( gama, alpha, beta)onde  gama- qualquer nĂșmero mĂșltiplo de 3 forma um conjunto vazio ⹂.

A(n( gama), alpha, beta)=⹂.
Função n( lambda, alpha, beta)onde  lambda- qualquer nĂșmero gerado  gamaĂ s  beta=2forma o conjunto de nĂșmeros K pertencentes ao conjunto de nĂșmeros naturais N.

K(n(P( gama), alpha,2))⊆N.
Função n(P( lambda), alpha, beta)Ă s  beta=1forma o conjunto de nĂșmeros L pertencentes ao conjunto de nĂșmeros naturais N.

L(n(P( lambda), alpha,1))⊆N.

Obviamente, isso pode ser reduzido de alguma forma a uma formulação mais rigorosa e baseada em evidĂȘncias.

Na verdade, Ă© assim que as seqĂŒĂȘncias sĂŁo formadas na hipĂłtese de Collatz.
Ainda há um detalhe. É necessário restaurar conjuntos completos de etapas absolutas dos conjuntos que obtivemos.

Fórmula para Ímpar:

n(P(k), alpha, beta)=22 alpha+ betaP(k)−1 over3;


AlĂ©m dos estranhos, vocĂȘ precisa restaurar muitos pares. Para fazer isso, lembre-se da fĂłrmula:

P(0,k)=2∗2k.


Resta apenas correlacionar todos juntos:

n(P(k), alpha, beta, epsilon)=22 alpha+ betaP(k)−1 over3∗2 epsilon.


A versĂŁo final:

n(k, alpha, beta, epsilon)=2 epsilon22 alpha+ beta(4k+1)−1 over3;


Assim, qualquer k pode gerar uma sequĂȘncia.
É o inverso verdade que qualquer um dos nĂșmeros naturais definitivamente pertence a qualquer sequĂȘncia de n(k)?
Nesse caso, Ă© perfeitamente possĂ­vel que Collatz estivesse certo.

Para o exemplo final da implementação da função 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/pt419075/


All Articles