Cominciamo con la seguente osservazione:
Lascia che denoti il massimo della sequenza , e indica il minimo. Se , scegliere è ottimale.un 1 , . . . , a n m i n a 1 = m a x b 1 = b 2 = . . . = b n = ⌊ ( m a x + m i n ) / 2 ⌋m a xun'1, . . . , anm i nun'1= m a xB1= b2= . . . = bn=⌊(max+min)/2⌋
Perché è così? Bene, poiché la sequenza inizia con il massimo, o scegliamo grande e subiamo una grande deviazione dal minimo della sequenza (poiché ogni successivo deve essere maggiore o uguale a ), oppure scegliamo piccolo e soffriamo del deviazione a . La media minimizza la deviazione massima.b i b 1 b 1 m a xb1bib1b1max
Ora possiamo provare a generalizzare questa osservazione da usare sulle sequenze generali . Ad esempio, possiamo suddividere qualsiasi sequenza in sottosequenze, in modo che ciascuna inizi con il massimo della rispettiva sottosequenza.a1,...,an
Esempio: è suddiviso in , e .( 2 ) ( 6 , 4 , 1 , 5 , 2 ) ( 8 , 7 , 5 , 1 )(2,6,4,1,5,2,8,7,5,1)(2)(6,4,1,5,2)(8,7,5,1)
Dato questo partizionamento, ora possiamo risolvere ciascuna di queste sottosequenze separatamente e ottenere un'assegnazione di , che tuttavia potrebbe violare la condizione non decrescente. Questo può essere risolto senza perdere l'ottimalità.bi
Osserva che l'ultima sottosequenza contiene sempre il massimo dell'intera sequenza (altrimenti, ci sarebbe un'altra sottosequenza successiva). Sia i valori che abbiamo assegnato alle . Ora, per raggiungere la non decrescita in , partiamo da dietro a e ci verso il fronte. Se è maggiore di , impostiamo semplicemente . Se è più piccolo, lo manteniamo. Quindi, procediamo con il confronto di con e così via. Nota che abbassando qualsiasi al valore diw 1 , w 2 , . . . , W k k w 1 , . . . , w k w k w k - 1 w k w k - 1 : = w k w k - 2 w k - 1 w i w i + 1 w i w i + 1m a xw1,w2,...,wkkw1,...,wkwkwk−1wkwk−1:=wkwk−2wk−1wiwi+1non aumenta mai la deviazione, poiché il valore massimo nella sottosequenza assegnata con è sempre inferiore al massimo nella assegnata con .wiwi+1
Questo algoritmo dovrebbe essere corretto, credo. Per quanto riguarda il tempo di esecuzione, il passaggio chiave è calcolare i massimi crescenti per le sottosequenze, che è possibile in ? Non sono sicuro di dove contribuisca.lO(n)l