Ma configuration est quelque chose comme ceci: j'ai une séquence d'ensembles d'entiers , avec relativement petit - de l'ordre de quatre ou cinq articles pour tous . Je veux choisir une séquence avec chaque de telle sorte que la variation totale (soit ou , c'est à dire ou ) est minimisé. Bien qu'il semble que le choix pour chaque est «local», le problème est que les choix peuvent se propager et avoir des effets non locaux et donc le problème semble intrinsèquement mondial par nature.
Ma principale préoccupation est dans un algorithme pratique pour le problème; en ce moment, j'utilise des méthodes de recuit basées sur la mutation de courtes sous-séquences, et bien qu'elles devraient être correctes, il semble que je devrais pouvoir faire mieux. Mais je suis également intéressé par la complexité abstraite - mon intuition serait que la version de requête standard ('existe-t-il une solution de variation totale? ') serait NP-complet via une réduction d'un problème de contrainte comme 3-SAT mais je ne vois pas vraiment la réduction. Tout pointeur sur une étude précédente serait le bienvenu - cela semble être un problème si naturel que je ne peux pas croire qu'il n'ait pas été examiné auparavant, mais mes recherches n'ont jusqu'à présent rien trouvé de tel.
la source
Réponses:
Voici un programme dynamique. Suppose queCi={Ci1,…,Cim} pour tous i∈[n] pour plus de clarté; ce qui suit peut être adapté au travail si leCi ont des cardinalités différentes. LaisserCost(i,j) être le coût minimum d'une séquence sur le premier i ensembles, se terminant par Cij . La récursivité suivante décritCost :
Le coût minimum global estminmj=1Cost(n,j) ; l'ordre réel des choix peut être déterminé en examinant les argmins en cours de route. Le runtime estO(nm) .
la source
Il semble que cela puisse être résolu en calculant simplement le chemin le plus court dans un graphique acyclique dirigé. Le raisonnement est que votre fonction objectif minimise la distance totale entre les "voisins" sélectionnés dans vos ensemblesC={C1,…,Cn} .
Construire unn graphique en plusieurs étapes G=(⋃ni=1Vi,E) où chacun v∈Vi correspond à un élément unique x∈Ci . Pour chaqueu∈Vi,v∈Vi+1 , ajoutez un bord dirigé (u,v) le coût étant soit le ℓ1 ou ℓ2 distance.
Ajoutez maintenant un sommet sources avec des bords à 0 V1 et un sommet d'évier t avec des bords à 0 coût de Vn . Étant donné queg est un DAG et les deux fonctions de distance forcent les coûts de bord à être non négatifs, vous pouvez calculer le chemin le plus court dans O ( V+ E) avec tri topologique et programmation dynamique (similaire à la description ici ).
la source