Supponiamo di avere una matrice di input di interi, come trovare sottosequenza convesso lungo che soddisfa la seguente condizione:più lunga sottosequenza convessa in un array
c[i] < (c[i-1] + c[i+1])/2
c[i-1]
, c[i]
e c[i+1]
sono tre elementi consecutivi nel sotto sequenza.
Ad esempio, se l'array di input è { 1, 2, -1, 0, 3, 8, 5 }
, la sottosequenza convessa più lunga deve essere: { 1, -1, 0, 3, 8 }
o { 2, -1, 0, 3, 8 }
.
Ho cercato di risolvere questo problema utilizzando la stessa idea di programmazione dinamica nel problema "Lest (Aumento crescente)". Ma poiché ogni elemento nella sottosequenza dipende dai due elementi precedenti, sembra che una soluzione O (n^2) sia impossibile. Grazie per l'aiuto.
Questo può essere fatto in O (n^3); dovrei pubblicare quella soluzione? –
Come si ottiene '(1, -1, 0, 3, 8)' per essere una soluzione? – noMAD
@noMAD, gli elementi in una "[sottosessione] (http://en.wikipedia.org/wiki/Subsequence)" non devono necessariamente essere consecutivi nella sequenza originale. – xan