Les règles de Golomb sont des ensembles d'entiers non négatifs de sorte qu'il n'y a pas deux paires d'entiers dans l'ensemble à la même distance.
Par exemple, [0, 1, 4, 6]
est une règle de Golomb car toutes les distances entre deux entiers dans cet ensemble sont uniques:
0, 1 -> distance 1
0, 4 -> distance 4
0, 6 -> distance 6
1, 4 -> distance 3
1, 6 -> distance 5
4, 6 -> distance 2
Par souci de simplicité dans ce défi (et comme la traduction est triviale), nous imposons qu'une règle de Golomb contienne toujours le nombre0
(ce que fait l'exemple précédent).
Puisque cet ensemble est de longueur 4
, nous disons qu'il s'agit d'une règle d' ordre de Golomb 4
. La plus grande distance dans cet ensemble (ou élément, car il 0
est toujours dans l'ensemble) est 6
, donc nous disons qu'il s'agit d'une règle de Golomb de longueur 6
.
Ta tâche
Trouvez des règles d' ordre de Golomb 50
à 100
(inclus) qui ont des longueurs aussi petites que possible. Les règles que vous trouvez n'ont pas besoin d'être optimales (voir ci-dessous).
L'optimalité
Une règle d'ordre de Golomb N
est dite optimale s'il n'y a pas d'autre règle d'ordre de Golomb N
qui a une longueur plus petite.
Les règles optimales de Golomb sont connues pour les commandes inférieures à 28 , bien que trouver et prouver l'optimalité est de plus en plus difficile à mesure que la commande augmente.
Par conséquent, il n'est pas prévu que vous trouviez la règle de Golomb optimale pour l'un des ordres compris entre 50
et 100
(et encore moins attendu que vous puissiez prouver qu'ils sont optimaux).
Il n'y a pas de limite de temps dans l'exécution de votre programme.
Référence
La liste ci-dessous est la liste des longueurs de règles de Golomb de 50
à 100
(dans l'ordre) évaluées avec une stratégie de recherche naïve (Merci à @PeterTaylor pour cette liste):
[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]
La somme de toutes ces longueurs est 734078
.
Notation
Votre score sera la somme des longueurs de tous vos chefs de Golomb entre 50
et 100
, divisé par la somme des longueurs des règles de Golomb entre 50
et 100
dans la ligne de base: 734078
.
Si vous n'avez pas trouvé de règle de Golomb pour un ordre spécifique, vous devez calculer votre score de la même manière, en utilisant le double de la longueur dans la ligne de base pour cet ordre spécifique.
La réponse avec le score le plus bas l'emporte.
En cas d'égalité, les longueurs de l'ordre le plus élevé où les deux réponses diffèrent sont comparées et la plus courte l'emporte. Dans le cas où les deux réponses ont les mêmes longueurs pour toutes les commandes, la réponse qui a été publiée en premier l'emporte.
la source
n
estn(n-1)/2
, car c'est le nombre de différences positives. Par conséquent, le score le plus petit possible dans ce défi est147050/734078 > 0.2003193
.Réponses:
C #, 259421/734078 ~ = 0,3534
Les méthodes
J'ai finalement trouvé une explication plus ou moins lisible de la méthode du champ projectif (méthode de Singer) dans Constructions of Generalized Sidon Sets , bien que je pense toujours qu'elle peut être légèrement améliorée. Elle s'avère être plus similaire à la méthode du champ affine (méthode de Bose) que les autres articles que j'ai lus l'avaient communiqué.
Cela suppose une connaissance des champs finis . Considérons que est une puissance première, et que F ( q ) soit notre champ de base.q= pune F(q)
La méthode du champ affine fonctionne sur . Prenons un générateur g 2 de F ( q 2 ) et un élément non nul k de F ( q ) et considérons l'ensemble { a : g 2F( q2) g2 F( q2) k F( q) Ces valeurs forment une règle modulaire de Golomb mod q 2 - 1 . D'autres règles peuvent être obtenues en multipliant modulo q 2 - 1 par n'importe quel nombre qui est coprime avec le module.
La méthode du champ projectif fonctionne sur . Prenons un générateur g 3 de F ( q 3 ) et un élément non nul k de F ( q ) et considérons l'ensemble { 0 } ∪ { a : g 3F( q3) g3 F( q3) k F( q) Ces valeurs forment une règle modulaire de Golomb mod q 2 + q + 1 . D'autres règles peuvent être obtenues par multiplication modulaire de la même manière que pour la méthode du champ affine.
Notez que ces méthodes entre elles donnent les valeurs les plus connues pour chaque longueur supérieure à 16. Tomas Rokicki et Gil Dogon offrent une récompense de 250 $ à toute personne qui les bat pour des longueurs de 36 à 40000. Par conséquent, toute personne qui bat cette réponse est dans une monnaie prix.
Code
Le C # n'est pas très idiomatique, mais j'en ai besoin pour compiler avec une ancienne version de Mono. De plus, malgré la vérification des arguments, ce n'est pas un code de qualité de production. Je ne suis pas satisfait des types, mais je ne pense pas qu'il existe une très bonne solution à cela en C #. Peut-être en F # ou C ++ avec des modèles insensés.
Résultats
Malheureusement, l'ajout des règles me prendrait environ 15k caractères au-delà de la limite de taille de publication, ils sont donc sur pastebin .
la source
Python 3, score 603001/734078 = 0,82144
Recherche naïve combinée à la construction Erdős – Turan:
Pour les nombres premiers impairs p, cela donne une règle de golomb asymptotiquement optimale.
la source
p
et de longueur environ2p^2
, alors qu'il existe des règles de Golomb d'ordren
et de longueur environn^2
asymptotiquement.2p^2
etp^2
.Mathematica, score 276235/734078 <0,376302
La fonction
ruzsa
implémente une construction d'une règle Golobm (également appelée ensemble Sidon) trouvée dans Imre Z. Ruzsa. Résolution d'une équation linéaire dans un ensemble d'entiers. I. Acta Arith., 65 (3): 259-282, 1993 . Étant donné n'importe quel nombre premierp
, cette construction donne une règle de Golomb avec desp-1
éléments contenus dans les entiers modulop(p-1)
(c'est une condition encore plus forte que d'être une règle de Golomb dans les entiers eux-mêmes).Un autre avantage du travail dans les entiers modulo
m
est que toute règle de Golomb peut être tournée (la même constante ajoutée à tous les éléments modulom
), et mise à l'échelle (tous les éléments multipliés par la même constante, tant que cette constante est relativement premièrem
), et le résultat est toujours une règle de Golomb; parfois, le plus grand entier est considérablement diminué en procédant ainsi. La fonctionscaledRuzsa
essaie donc toutes ces échelles et enregistre les résultats.manyRuzsaSets
contient les résultats de cette construction et mise à l'échelle pour tous les 32 premiers nombres premiers (choisis un peu arbitrairement, mais le 32ème nombre premier, 131, est bien plus grand que 100); il y a près de 57 000 dirigeants Golomb dans cet ensemble, ce qui prend plusieurs bonnes minutes à calculer.Bien sûr, les premiers
k
éléments d'une règle de Golomb forment eux-mêmes une règle de Golomb. Ainsi, la fonctiontryGolomb
examine une telle règle faite à partir de l'un des ensembles calculés ci-dessus. La dernière ligneTable...
sélectionne la meilleure règle de Golomb possible, de chaque ordre de50
à100
, parmi toutes les règles de Golomb trouvées de cette manière.Les longueurs trouvées étaient:
J'allais à l'origine combiner cela avec deux autres constructions, celles de Singer et de Bose; mais il semble que la réponse de Peter Taylor a déjà mis en œuvre cela, donc je suppose que je récupérerais simplement ces longueurs.
la source
m
vous pouvez faire pivoter / mettre à l'échelle librement. Regardez le[0, 1, 4, 6]
mod 7. Si j'ajoute 1, nous obtenons[0, 1, 2, 5]
, ce qui n'est pas une règle de Golomb.[0, 1, 4, 6]
n'est pas une règle de Golomb mod-7 car elle1 – 0
est égale à0 – 6
modulo 7, par exemple.