As réguas de Golomb são conjuntos de números inteiros não negativos, de modo que não existem dois pares de números inteiros no conjunto à mesma distância.
Por exemplo, [0, 1, 4, 6]
é uma régua de Golomb porque todas as distâncias entre dois números inteiros neste conjunto são únicas:
0, 1 -> distance 1
0, 4 -> distance 4
0, 6 -> distance 6
1, 4 -> distance 3
1, 6 -> distance 5
4, 6 -> distance 2
Por uma questão de simplicidade neste desafio (e como a tradução é trivial), impomos que uma régua de Golomb sempre contenha o número0
(como o exemplo anterior).
Como esse conjunto é longo 4
, dizemos que este é um governante da ordem Golomb 4
. A maior distância deste conjunto (ou elemento, já que 0
está sempre no conjunto) é 6
, portanto, dizemos que este é um governante de Golomb de comprimento 6
.
Sua tarefa
Encontre réguas de Golomb da ordem 50
de 100
(inclusive) com o menor comprimento possível. As réguas encontradas não precisam ser ótimas (veja abaixo).
Optimalidade
Uma régua de Golomb de ordem N
, é dito ser o ideal, se não houver outra régua de Golomb de ordem N
que tem um comprimento menor.
Os governantes ideais de Golomb são conhecidos por encomendas inferiores a 28 , embora encontrar e provar a otimização seja cada vez mais difícil à medida que a ordem aumenta.
Portanto, não é esperado que você encontre a régua Golomb ideal para qualquer uma das ordens entre 50
e 100
(e menos ainda que você possa provar que elas são ótimas).
Não há limites de tempo na execução do seu programa.
Linha de base
A lista abaixo é a lista dos comprimentos das réguas de Golomb de 50
até 100
(em ordem) avaliadas com uma estratégia de pesquisa ingênua (Agradecemos a @PeterTaylor para esta lista):
[4850 5122 5242 5297 5750 5997 6373 6800 6924 7459 7546 7788 8219 8502 8729 8941 9881 10199 10586 10897 11288 11613 11875 12033 12930 13393 14046 14533 14900 15165 15687 15971 16618 17354 17931 18844 19070 19630 19669 20721 21947 22525 23290 23563 23880 24595 24767 25630 26036 26254 27218]
A soma de todos esses comprimentos é 734078
.
Pontuação
Sua pontuação será a soma dos comprimentos de todos os seus governantes Golomb entre 50
e 100
, dividido pela soma dos comprimentos dos governantes Golomb entre 50
e 100
na linha de base: 734078
.
Caso você não tenha encontrado uma régua de Golomb para uma ordem específica, calcule sua pontuação da mesma maneira, usando o dobro do comprimento na linha de base para essa ordem específica.
A resposta com a menor pontuação vence.
Em caso de empate, os comprimentos da maior ordem em que as duas respostas diferem são comparados e a mais curta vence. Caso ambas as respostas tenham o mesmo tamanho para todos os pedidos, a resposta que foi lançada primeiro vence.
fonte
n
én(n-1)/2
, já que é quantas diferenças positivas existem. Portanto, a menor pontuação possível nesse desafio é147050/734078 > 0.2003193
.Respostas:
C #, 259421/734078 ~ = 0,3534
Métodos
Finalmente encontrei uma explicação mais ou menos legível do método do campo projetivo (método de Singer) em Construções de conjuntos generalizados de Sidon , embora eu ainda ache que pode ser melhorado um pouco. Acontece ser mais semelhante ao método do campo afim (método de Bose) do que os outros trabalhos que li tinham comunicado.
Observe que esses métodos entre eles fornecem os valores mais conhecidos para todos os comprimentos maiores que 16. Tomas Rokicki e Gil Dogon estão oferecendo uma recompensa de US $ 250 para quem os vencer por comprimentos de 36 a 40000. Portanto, qualquer um que vencer essa resposta recebe um valor monetário. prêmio.
Código
O C # não é muito idiomático, mas preciso compilar com uma versão antiga do Mono. Além disso, apesar da verificação de argumentos, esse não é um código de qualidade de produção. Não estou feliz com os tipos, mas acho que não há uma solução muito boa para isso em c #. Talvez em F # ou C ++ com modelos insanos.
Resultados
Infelizmente, adicionar as réguas levaria cerca de 15 mil caracteres além do limite de tamanho da postagem, então eles estão no pastebin .
fonte
Python 3, pontuação 603001/734078 = 0,82144
Pesquisa ingênua combinada com construção de Erdős – Turan:
Para números primos ímpares p, isso fornece uma régua de golomb assintoticamente ideal.
fonte
p
e comprimento de2p^2
Golomb, enquanto existem réguas de ordemn
e comprimento de Golomb sobren^2
assintoticamente.2p^2
ep^2
.Mathematica, pontuação 276235/734078 <0,376302
A função
ruzsa
implementa a construção de uma régua Golobm (também chamada de conjunto Sidon) encontrada em Imre Z. Ruzsa. Resolvendo uma equação linear em um conjunto de números inteiros. I. Acta Arith., 65 (3): 259-282, 1993 . Dada qualquer primop
, essa construção produz uma régua de Golomb comp-1
elementos contidos no módulo inteirop(p-1)
(que é uma condição ainda mais forte do que ser uma régua de Golomb nos próprios inteiros).Outra vantagem de trabalhar no módulo de números inteiros
m
é que qualquer régua de Golomb pode ser girada (a mesma constante adicionada a todos os elementos do módulom
) e dimensionada (todos os elementos multiplicados pela mesma constante, desde que essa constante seja relativamente privilegiadam
), e o resultado ainda é um governante de Golomb; Às vezes, o maior número inteiro diminui significativamente ao fazer isso. Então a funçãoscaledRuzsa
tenta todas essas escalas e registra os resultados.manyRuzsaSets
contém os resultados dessa construção e dimensionamento para todos os primeiros 32 primos (escolhidos um pouco arbitrariamente, mas o 32º primo, 131, é bem maior que 100); existem quase 57.000 governantes de Golomb neste conjunto, o que leva alguns minutos para ser computado.Obviamente, os primeiros
k
elementos de uma régua de Golomb formam eles mesmos uma régua de Golomb. Portanto, a funçãotryGolomb
analisa uma régua feita com qualquer um dos conjuntos computados acima. A última linhaTable...
seleciona a melhor régua de Golomb que puder, de todas as ordens de50
até100
, de todas as réguas de Golomb encontradas dessa maneira.Os comprimentos encontrados foram:
Eu originalmente combinaria isso com duas outras construções, as de Singer e de Bose; mas parece que a resposta de Peter Taylor já implementou isso, então presumivelmente eu simplesmente recuperaria esses comprimentos.
fonte
m
você pode girar / escalar livremente. Veja o[0, 1, 4, 6]
mod 7. Se eu adicionar 1, obtemos[0, 1, 2, 5]
, que não é uma régua de Golomb.[0, 1, 4, 6]
não é uma régua Golomb mod-7 porque1 – 0
é igual ao0 – 6
módulo 7, por exemplo.