La description
Supposons qu'une permutation des nombres entiers {1, 2, ..., n}
soit appelée à interpolation minimale si aucun ensemble de k+2
points (avec leurs indices) ne tombe sur un polynôme de degré k
. C'est,
- Aucun point ne tombe sur une ligne horizontale (polynôme à 0 degré)
- Aucun point ne tombe sur une ligne (polynôme à 1 degré)
- Pas quatre points tombent sur une parabole (polynôme à 2 degrés)
- Etc.
Défi
Écrivez un programme qui calcule la séquence OEIS A301802 (n) , le nombre de permutations minimalement interpolables {1, 2, ..., n}
pour n
aussi grand que possible.
Notation
Je chronométrerai votre code sur mon ordinateur (Intel Core i5 2,3 GHz, 8 Go de RAM) avec des entrées croissantes. Votre score sera la meilleure entrée qui prendra moins de 1 minute pour sortir la valeur correcte.
Exemple
Par exemple, la permutation [1, 2, 4, 3]
est interpolable de façon minimale car
the terms together with their indices
[(1, 1), (2, 2), (3, 4), (4, 3)]
have the property that
(0) No two points have the same y-value.
(1) No three points lie on a line.
(2) No four points lie on a parabola.
Dans l'illustration, vous pouvez voir que les lignes horizontales (rouges) ont au plus un point sur elles, les lignes (bleues) ont au plus deux points sur elles et les paraboles (vertes) ont trois points sur elles.
Les données
Voici les permutations peu interpolables pour n=3
, n=4
et n=5
:
n = 3: [1,3,2],[2,1,3],[2,3,1],[3,1,2]
n = 4: [1,2,4,3],[1,3,2,4],[1,3,4,2],[1,4,2,3],[2,1,3,4],[2,1,4,3],[2,3,1,4],[2,4,1,3],[2,4,3,1],[3,1,2,4],[3,1,4,2],[3,2,4,1],[3,4,1,2],[3,4,2,1],[4,1,3,2],[4,2,1,3],[4,2,3,1],[4,3,1,2]
n = 5: [1,2,5,3,4],[1,3,2,5,4],[1,3,4,2,5],[1,4,2,3,5],[1,4,3,5,2],[1,4,5,2,3],[1,4,5,3,2],[1,5,3,2,4],[2,1,4,3,5],[2,3,1,4,5],[2,3,5,1,4],[2,3,5,4,1],[2,4,1,5,3],[2,4,3,1,5],[2,4,5,1,3],[2,5,1,3,4],[2,5,1,4,3],[2,5,3,4,1],[2,5,4,1,3],[3,1,4,5,2],[3,1,5,2,4],[3,1,5,4,2],[3,2,5,1,4],[3,2,5,4,1],[3,4,1,2,5],[3,4,1,5,2],[3,5,1,2,4],[3,5,1,4,2],[3,5,2,1,4],[4,1,2,5,3],[4,1,3,2,5],[4,1,5,2,3],[4,1,5,3,2],[4,2,1,5,3],[4,2,3,5,1],[4,2,5,1,3],[4,3,1,2,5],[4,3,1,5,2],[4,3,5,2,1],[4,5,2,3,1],[5,1,3,4,2],[5,2,1,3,4],[5,2,1,4,3],[5,2,3,1,4],[5,2,4,3,1],[5,3,2,4,1],[5,3,4,1,2],[5,4,1,3,2]
Si mon programme est correct, les premières valeurs de a(n)
, le nombre de permutations minimalement interpolables de {1, 2, ..., n}
:
a(1) = 1
a(2) = 2
a(3) = 4
a(4) = 18
a(5) = 48
a(6) = 216
a(7) = 584
a(8) = 2870
la source
Réponses:
C #
Prend des valeurs en
n
tant qu'arguments de ligne de commande, ou s'il est exécuté sans arguments, il se multiplie jusqu'àn=10
. Compiler comme "Release" dans VS 2017 et fonctionner sur un Intel Core i7-6700 je calculen=9
en 1,2 seconde etn=10
en 13,6 secondes.n=11
est un peu plus de 2 minutes.FWIW:
la source