Wie man

9

Ich sehe viele algorithmische Probleme, die die Zeilen von:

Sie haben ein ganzzahliges Array , Sie müssen so finden, dass in Zeit maximiert wird.h[1..n]0i,j(h[j]h[i])(ji)O(n)

Offensichtlich besteht die -Zeitlösung darin, alle Paare zu berücksichtigen. Gibt es jedoch eine Möglichkeit, den Ausdruck in zu maximieren, ohne etwas anderes über die Eigenschaften von zu wissen ?O(n2)O(n)h

Eine Idee, an die ich gedacht habe, ist, zu reparieren , dann müssen wir von bis , das gleich oder und da fest ist, brauchen wir .ji1j1argmaxi{(h[j]h[i])(ji)}argmaxi{h[j]jh[j]ih[i]j+h[i]i}jargmaxi{h[j]ijh[i]+ih[i]}

Ich sehe jedoch keine Möglichkeit, die darin enthaltenen abhängigen Begriffe loszuwerden . Irgendeine Hilfe?j

AspiringMat
quelle
Wird eine Ö(nLogn) -Lösung hilfreich sein?
xskxzr
@xskxzr sicher, wenn Sie welche haben
AspiringMat

Antworten:

5

Dies ist eine -Lösung. Eine O ( n ) -Lösung, auf die Willard Zhan hingewiesen hat, ist am Ende dieser Antwort angehängt.Ö(nLogn)Ö(n)


LösungÖ(nLogn)

Bezeichnen Sie aus Gründen der Übersichtlichkeit .f(ich,j)=(h[j]]- -h[ich]])(j- -ich)

Definiere und l i sei der kleinste Index, so dass l i > l i - 1 und h [ l i ] < h [ l i - 1 ] . In ähnlicher Weise definieren Sie r 1 = n und r i ist der größte Index, so dass r i < r i - 1 und h [ r i ] >l1=1lichlich>lich- -1h[lich]]<h[lich- -1]]r1=nrichrich<rich- -1 . Die Sequenzen l 1 , l 2 , . . . und r 1 , r 2 , sind in O ( n ) Zeitleicht zu berechnen.h[rich]]>h[rich- -1]]l1,l2,...r1,r2,Ö(n)

Der Fall, in dem es kein so dass h [ i ] < h [ j ] (dh f ( i , j ) > 0 ) ist trivial. Wir konzentrieren uns jetzt auf nicht triviale Fälle. In solchen Fällen müssen wir nur solche Paare berücksichtigen, um die Lösung zu finden.ich<jh[ich]]<h[j]]f(ich,j)>0

Für jedes , so daß h [ i ] < H [ j ] , lassen u der größte Index derart sein , dass L ui und v , den kleinsten Index derart , dass r vj , dann h [ l u ] h [ i ] (ansonsten l u + 1i per Definition von l u + 1ich<jh[ich]]<h[j]]uluichvrvjh[lu]]h[ich]]lu+1ichlu+1widerspricht somit der Definition von ) und in ähnlicher Weise h [ r v ] h [ j ] . Daher ( h [ r v ] - h [ l u ] ) ( R V - L u ) ( h [ j ] - H [ i ] ) ( R v - l u ) ( h [uh[rv]]h[j]] Das heißtwir müssen nur Paare betrachten ( L u , R v ) wobei l u < r v .

(h[rv]]- -h[lu]])(rv- -lu)(h[j]]- -h[ich]])(rv- -lu)(h[j]]- -h[ich]])(j- -ich).
(lu,rv)lu<rv

Bezeichne , haben wir das folgende Lemma.v(u)=argmaxv:: lu<rvf(lu,rv)

Ein Paar wobei l u < r v , und wo es vorhanden ist u 0 , so dass u < u 0 und v < v ( u 0 ) oder derart , dass u > u 0 und v > v ( u 0 ) kann keine endgültige optimale Lösung sein.(lu,rv)lu<rvu0u<u0v<v(u0)u>u0v>v(u0)

Beweis. Nach der Definition von , haben wir ( h [ r v ( u 0 ) ] - h [ l u 0 ] ) ( r v ( u 0 ) - l u 0 ) ( h [ r v ] - h [ l u 0 ] ) ( R V - Lv(u0) oder (h[rv]-h[r v ( u 0 ) ])l u 0 +h[l u 0 ](rv-r v ( u 0 ) )+h[r v ( u 0 ) ]r v ( u 0 ) -

(h[rv(u0)]]- -h[lu0]])(rv(u0)- -lu0)(h[rv]]- -h[lu0]])(rv- -lu0),
(h[rv]]- -h[rv(u0)]])lu0+h[lu0]](rv- -rv(u0))+h[rv(u0)]]rv(u0)- -h[rv]]rv(u0)0.

In dem Fall, in dem und v < v ( u 0 ) sind , notieren Sie h [ r v ] - h [ r v ( u 0 ) ] < 0 und r v - r v ( u 0 ) > 0 und auch l u < l u 0 und h [ l u ] > hu<u0v<v(u0)h[rv]]- -h[rv(u0)]]<0rv- -rv(u0)>0lu<lu0 , haben wir h[lu]]>h[lu0]]

(h[rv]]- -h[rv(u0)]])lu+h[lu]](rv- -rv(u0))> (h[rv]]- -h[rv(u0)]])lu0+h[lu0]](rv- -rv(u0)).

(h[rv]]- -h[rv(u0)]])lu+h[lu]](rv- -rv(u0))+h[rv(u0)]]rv(u0)- -h[rv]]rv(u0)>0,
(h[rv(u0)]]- -h[lu]])(rv(u0)- -lu)>(h[rv]]- -h[lu]])(rv- -lu).

(lu,rv(u0))(lu,rv)

v(/.2)l1,l2,Ö1(lu,rv)u=1,,/.2- -1v=v(/.2),v(/.2)+1,Ö2(lu,rv)u=/.2+1,/.2+2,v=1,,v(/.2){(l/.2,rv(/.2)),Ö1,Ö2}}


Ö(n)

f(lu,rv)=- -lurvu>u0v>v0f(lu0,rv0)f(lu0,rv)f(lu,rv0)>f(lu,rv)M.[x,y]]: =- -f(lx,rc- -y+1)cr1,r2,rc- -y+1yM.f

xskxzr
quelle
1
f(lu,rv)Ö(nLogn)f(lu,rv)Ö(n)