Que sait-on de la complexité du problème suivant:
- Étant donné: nombres rationnels .
- Sortie: entiers .
- Objectif: minimiser où
Autrement dit, nous aimerions arrondir les nombres rationnels en nombres entiers afin de minimiser la somme des erreurs dans les distances par paires. Pour chaque paire nous aimerions avoir la distance arrondie aussi proche que possible de la vraie distance .
Motivation: un voyage en métro ennuyeux, et une affiche qui montre les «emplacements» des stations à la résolution d'une minute de temps de déplacement. Ici, nous minimisons l'erreur que les gens font s'ils utilisent l'affiche pour rechercher le temps de trajet entre les stations et , en faisant la moyenne sur toutes les paires .
Par exemple, ici, nous pouvons lire les approximations suivantes des distances par paire entre les quatre stations (en utilisant A, B, C, D pour plus de concision):
- A – B ≈ 1 minute, B – C ≈ 2 minutes, C – D ≈ 2 minutes
- A – C ≈ 3 minutes, B – D ≈ 4 minutes
- A – D ≈ 5 minutes
Est-ce la meilleure approximation possible? Si vous connaissiez les temps de déplacement réels, pourriez-vous trouver une meilleure solution?
Au début, cela ressemblait à un simple exercice de programmation dynamique, mais maintenant il semble qu'une certaine réflexion soit nécessaire.
Quelqu'un reconnaît-il ce problème? Ou voir un algorithme intelligent pour le résoudre?
Edit: Il existe des variantes naturelles de la question qui ont été mentionnées dans les commentaires; donnons-leur quelques noms:
version plancher / plafond : il est nécessaire que pour tout .i
version entière : il suffit que pour tout . i
version monotone : il est nécessaire que .
version non monotone : on peut avoir pour . i < j
La question d'origine considère la version entière monotone, mais les réponses liées à l'une de ces versions sont les bienvenues.
la source
Réponses:
D'ACCORD. L'algorithme DP semble être inutilement compliqué. Après avoir lu les commentaires, je pense que cela pourrait résoudre la version monotone du problème (mais je n'ai pas vérifié tous les détails).
Supposons d'abord que chaque , où est la partie intégrale, est la partie fractionnaire. Supposons que est arrondi à , où est un entier non négatif (bien sûr, en général, peut être négatif, mais nous pouvons toujours déplacer de sorte que le plus petit soit 0).xi=⌊xi⌋+{xi} { x i } x i ⌊ x i ⌋ + v i v i v i v i⌊xi⌋ {xi} xi ⌊xi⌋+vi vi vi vi
Maintenant, considérez le coût d'une paire , lors de cet arrondi. Le coût devrait êtrex jxi xj
L'expression est compliquée à cause des valeurs absolues. Cependant, notez que nous avons la monotonie, donc les choses à l'intérieur des deux valeurs absolues intérieures devraient avoir le même signe. Puisque nous avons une valeur absolue extérieure, peu importe ce que ce signe est, l'expression se simplifie simplement pour
À partir de maintenant, nous ne supposons pas que la solution est monotone, mais à la place, nous changeons l'objectif pour minimiser la somme du terme ci-dessus pour toutes les paires. Si la solution à ce problème se trouve être monotone, alors bien sûr, c'est aussi la solution optimale pour la version monotone. (Considérez ceci comme: le problème d'origine a une pénalité infinie lorsque la solution n'est pas monotone, le nouveau problème a une pénalité plus petite, si une solution monotone gagne même dans la nouvelle version, elle doit être la solution à la version monotone)
Maintenant, nous voudrions prouver, si , dans la solution optimale, nous devons avoir .v i ≥ v j{xi}>{xj} vi≥vj
Supposons que ce ne soit pas vrai, que nous avons une paire mais . Nous montrerons que si nous échangeons la solution devient strictement meilleure.v i < v j v i v j{xi}>{xj} vi<vj vi vj
Nous comparons d'abord le terme entre et , ici, il est vraiment clair que l'échange est strictement meilleur car dans la version non-swap, et a le même signe, l'absolu valeur sera la somme des deux valeurs absolues.j v i - v j { x j } - { x i }i j vi−vj {xj}−{xi}
Maintenant, pour tout , nous comparons la somme des paires et . Autrement dit, nous devons comparer( i , k ) ( j , k )k (i,k) (j,k)
| v j - v k - ( { x i } - { x k } ) | + | v|vi−vk−({xi}−{xk})|+|vj−vk−({xj}−{xk})| et.|vj−vk−({xi}−{xk})|+|vi−vk−({xj}−{xk})|
Utilisation , , , pour désigner les quatre termes à l' intérieur de la valeur absolue, il est clair que . Il est également clair que. Par convexité de la valeur absolue, nous savons. Prenez la somme sur tous les , nous savons que l'échange ne peut être que mieux.B C D A + B = C + D | A - B | ≥ | C - D | | A | + | B | ≥ | C | + | D | x kA B C D A+B=C+D |A−B|≥|C−D| |A|+|B|≥|C|+|D| xk
Notez que maintenant nous avons déjà une solution pour la version plancher / plafond monotone: il doit y avoir un seuil, quand est plus grand toujours arrondi, quand il est plus petit toujours arrondi, quand il est égal arrondi et certains vers le bas, tandis que la qualité de la solution ne dépend que du nombre. Nous énumérons toutes ces solutions et choisissons celle qui a la plus petite fonction objective. (Toutes ces solutions sont nécessairement monotones).{xi}
Enfin, nous aimerions passer à la version entière monotone du problème. Nous pouvons en fait prouver que la solution optimale est la même que la version Monotonic sol / plafond.
Comme nous l'avons supposé, le plus petit est 0. Regroupez tous les fonction de leurs et appelez-les groupe . Nous allons d'abord prouver qu'il n'y a pas de groupes vides, mais c'est simple, si le ème groupe est vide, pour tout suffit de laisser . Il est facile de voir que la fonction objectif s'améliore toujours (essentiellement parce que ).ix i Iv i 0 , 1 , 2 , . . . , max { v i }vi xi vi 0,1,2,...,max{vi} v i > k v i = v i - 1 | { x i } - { x j } | < 1k vi>k vi=vi−1 |{xi}−{xj}|<1
Nous allons maintenant prouver que la moyenne de dans le groupe est au moins la moyenne de dans le groupe plus . Si ce n'est pas vrai, laissez simplement pour tout , le calcul montre à nouveau que la fonction objectif s'améliore.k + 1 { x i } k 1 / deux v i = v i - 1 v i > k{xi} k+1 {xi} k 1/2 vi=vi−1 vi>k
Puisque la moyenne de est dans l'intervalle , il y a vraiment au plus deux groupes, ce qui correspond à la version plancher / plafond.[ 0 , 1 ){xi} [0,1)
la source
Juste un commentaire étendu ... (peut-être trivial et / ou faux :)
Si et est le plus petit multiple commun des s, alors on peut se débarrasser des : . M b i x ′ i = M ∗ x ixi=ai/bi M bi x′i=M∗xi
Si (plancher, restriction de plafond) alors nous pouvons utiliser des variables binaires pour exprimer utilisant sa distance de ( ou ):v i y ′ i x ′ iyi∈{⌈xi⌉,⌊xi⌋} vi y′i x′i R i = x ′ i - M ∗ ⌈ x i ⌉Li=x′i−M∗⌊xi⌋ Ri=x′i−M∗⌈xi⌉
Et le problème d'origine devrait (?!?) Être équivalent à trouver le qui minimise:vi
avecvi∈{0,1},Di∈Z
la source
Un autre commentaire étendu ... pourrait être faux.
J'envisage également le cas des restrictions de plancher / plafond, et j'essaie de le résoudre en utilisant la programmation dynamique (je ne peux pas, mais peut-être que cela fonctionne lorsque le diviseur commun est petit).
Soit la partie fractionnaire de , nous considérons les choses du plus petit au plus grand. Supposons que le plus grand soit , et parce que nous faisons de la programmation dynamique, nous savons déjà "quelque chose" (je vais expliquer ce qu'est ce quelque chose) sur la solution optimale pour tout le reste sauf .x i { x i } { x k } x k{xi} xi {xi} {xk} xk
Considérons maintenant la différence de fonction objective lorsque nous arrondissons vers le haut ou vers le bas. Si à l'origine certains sont arrondis, alors la différence est simplement de 1 (n'ont pas vraiment été vérifiés très attentivement mais il semble que ce soit le cas, il est vraiment important que peu importe que soit à gauche ou à droite de , la différence est toujours le même); si à l'origine certains sont arrondis, alors la différence est . Donc: nous savons quelle décision nous devons prendre si les trois quantités suivantes sont connues:xk x i x k x i 2 { x k } - 2 { x i } - 1xi xi xk xi 2{xk}−2{xi}−1
OK, 1 et 2 sont essentiellement les mêmes, nous pouvons laisser f [N, Ndown, Sdown] la solution optimale pour les N premiers points (lorsque les points sont triés par ordre croissant de ), le nombre de vers le bas arrondi de Ndown est, et la somme de pour ceux qui sont en bas arrondi est Sdown. Il n'est alors pas difficile d'écrire comment passer de f [N-1] à f [N].x i { x i{xi} xi {xi}
Le problème est bien sûr que Sdown peut avoir de nombreuses valeurs exponentielles. Mais cela fonctionne lorsque le diviseur commun est petit ou que nous pouvons tout arrondir à un point de grille en premier et obtenir un FPTAS (si le programme dynamique ci-dessus est correct ...)
la source