Ridurre al minimo la variazione totale di una sequenza di scelte discrete


8

La mia configurazione è simile a questa: ho una sequenza di insiemi di numeri interi , conrelativamente piccolo - nell'ordine di quattro o cinque articoli per tutti . Voglio scegliere una sequenza con ogni tale che la variazione totale (o o , cioè o ) è ridotto a icona. Mentre sembra che la scelta per ogni sia "locale", il problema è che le scelte possono propagarsi e avere effetti non locali e quindi il problema sembra intrinsecamente globale in natura.Ci(1in)|Ci|ixi(1in)xiCi12i=1n1|xixi+1|i=1n1(xixi+1)2xi

La mia preoccupazione principale è in un algoritmo pratico per il problema; in questo momento sto usando metodi di ricottura basati su brevi sottosequenze mutanti, e mentre dovrebbero andare bene sembra che dovrei essere in grado di fare meglio. Ma sono anche interessato alla complessità astratta - il mio sospetto sarebbe che la versione di query standard ('esiste una soluzione di variazione totale ?') Sarebbe NP-completa tramite una riduzione da qualche problema di vincolo come 3- SAT ma non riesco proprio a vedere la riduzione. Qualsiasi suggerimento a uno studio precedente sarebbe il benvenuto - sembra un problema così naturale che non riesco a credere che non sia mai stato esaminato prima, ma le mie ricerche finora non hanno prodotto nulla di simile.k


Bella domanda! Solo una domanda chiarificatrice: la lunghezza di è , ma devi scegliere qualche elemento da ogni ? O va bene avere un numero di set da cui non scegli affatto? xinCi
Juho,

@mrm Ci deve essere un elemento da ciascuna - i s sono direttamente indicizzati da come i s sono. Cix1nC
Steven Stadnicki,

Risposte:


4

Ecco un programma dinamico. Supponiamo che per tutti per motivi di chiarezza; quanto segue può essere adattato per funzionare se il ha cardinalità diverse. Sia il costo minimo di una sequenza rispetto al primo set di , che termina con . La seguente ricorsione descrive :Ci={Ci1,,Cim}i[n]CiCost(i,j)iCijCost

Cost(1,j)=0,1jmCost(i,j)=mink=1m(Cost(i1,k)+|C(i1)kCij|) ,2in,1jm.

Il costo minimo complessivo è ; l'attuale sequenza di scelte può essere determinata esaminando gli argmins lungo il percorso. Il runtime è .minj=1mCost(n,j)O(nm)


Ho cercato di migliorare la chiarezza della tua risposta sia nella formattazione che nella presentazione; per favore controlla che non ho fatto confusione. Sarebbe bello se includessi un argomento sul perché ciò che proponi sia corretto.
Raffaello

Considerando la risposta di Nicholas , questo è simile all'algoritmo Bellman-Ford, adattato al problema in questione.
Raffaello

Entrambe le risposte sono davvero eccellenti (e come nota Raphael, molto simili), ma mentre mi piace l'ampia applicabilità dell'altra, preferisco davvero questa per la sua diretta applicazione alla mia domanda particolare. Grazie!
Steven Stadnicki,

4

Sembra che ciò possa essere risolto semplicemente calcolando un percorso più breve in un grafico aciclico diretto. Il ragionamento è che la tua funzione obiettivo minimizza la distanza totale tra "vicini" selezionati nei tuoi insiemi .C={C1,,Cn}

Costruisci un grafico stage dove ogni corrisponde a un elemento univoco . Per ogni , aggiungi un bordo diretto il costo è la distanza o .nG=(i=1nVi,E)vVixCiuVi,vVi+1(u,v)12

Ora aggiungere un vertice sorgente con bordi 0-cost per e un vertice lavandino con bordi 0-cost diretti da . Dato che è un DAG ed entrambe le funzioni di distanza impongono che i costi del bordo siano non negativi, è possibile calcolare il percorso più breve in con ordinamento topologico e programmazione dinamica (simile alla descrizione qui ).sV1tVnGO(V+E)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.