Userò numeri a partire da anziché , poiché lo trovo molto più naturale.01
Ecco due classi di problemi che possiamo risolvere in questo modo:
Funzioni in TFNP (ovvero, problemi di ricerca NP totali a valore singolo)
(Questo generalizza l'esempio con permutazioni unidirezionali. Include come caso speciale problemi di decisione da .)UP∩coUP
L'impostazione è che abbiamo un predicato del tempo polinomiale e un polinomio tale che per ogni di lunghezza , esiste un unico di lunghezza tale che tiene. Il compito computazionale è, dato , trovare .p ( n ) x n y m = p ( n ) R ( x , y ) x yR(x,y)p(n)xnym=p(n)R(x,y)xy
Ora supporrò wlog che sia pari, quindi . L'algoritmo è generare un uniformemente casuale e produrre2 m ≡ 1my ∈ [ 0 , 2 m )2m≡1(mod3)y∈[0,2m)
R ( x , y )y (come soluzione del problema di ricerca) se ;R(x,y)
{ 0 , 1 , 2 } y - y ′ ∈ { 1 , 2 } R ( x , y ′ )y−y′ (come elemento casuale di ) se e ;{0,1,2}y−y′∈{1,2}R(x,y′)
{ 0 , 1 , 2 } y ′ ∈ { y , y - 1 , y - 2 } R ( x , y ′ )ymod3 (come un elemento casuale di ) se no risolve .{0,1,2}y′∈{y,y−1,y−2}R(x,y′)
Se non ci fosse soluzione al problema di ricerca, le scelte casuali di darebbero e volte e volte (un'altra). Tuttavia, se risolve il problema di ricerca, armeggiamo con gli elementi (che colpiscono tutte e tre le classi di residui) in modo che producano solo residui e , il che uniforma il vantaggio di . (Sto assumendo qui wlog che .) 1 2 ( 2 m - 1 ) / 3 0 ( 2 m + 2 ) / 3 y y , y + 1 , y + 2 1 2 0 y < 2 m - 22m12 (2m−1)/30 (2m+2)/3yy,y+1,y+2120y<2m−2
PPA- problemi di ricerca3
Un modo conveniente per definire PPA- è come problemi di ricerca NP molti riducibili al seguente tipo di problemi. Abbiamo una funzione di tempo polinomiale fissa e un polinomio , tale che per qualsiasi input di lunghezza , la mappatura indotta limitata agli input di lunghezza è una funzione soddisfa per ogni . Il compito è, dato , trovare un punto fisso di : .f ( x , y ) p ( n ) x n f x ( y ) = f ( x , y ) y m = p ( n ) f x : [ 0 , 2 m ) → [ 0 , 2 m ) f x ( f x ( f x ( y ) ) )3f(x,y)p(n)xnfx(y)=f(x,y)ym=p(n)fx:[0,2m)→[0,2m)y x y f x f x ( y ) = yfx(fx(fx(y)))=yyxyfxfx(y)=y
Possiamo risolvere questo nel modo nella domanda come segue: dato di lunghezza , generiamo un casuale di lunghezza e outputn y m = p ( n )xnym=p(n)
f xy se è un punto fisso di ;fx
in caso contrario, , e sono elementi distinti. Possiamo etichettarli come con e generare tale che .f x ( y ) f x ( f x ( y ) ) { y , f x ( y ) , f x ( f x ( y ) ) } = { y 0 , y 1 , y 2 } y 0 < y 1 < y 2 i ∈ { 0 , 1 , 2yfx(y)fx(fx(y)){y,fx(y),fx(fx(y))}={y0,y1,y2}y0<y1<y2y = y ii∈{0,1,2}y=yi
Dalle definizioni si evince che ciò fornisce una distribuzione uniforme su , poiché il non-punto fisso viene in triplo.y{0,1,2}y
Consentitemi di dimostrare per la cronaca l'equivalenza del problema sopra con il problema completo di Papadimitriou per PPA- , poiché questa classe è per lo più trascurata in letteratura. Il problema è menzionato in Buss, Johnson: "Prove propositive e riduzioni tra problemi di ricerca NP", ma non indicano l'equivalenza. Per PPA, un problema simile (LONELY) è riportato in Beame, Cook, Edmonds, Impagliazzo e Pitassi: "La relativa complessità dei problemi di ricerca NP". Non c'è niente di speciale in , l'argomento che segue funziona mutatis mutandis per qualsiasi primo dispari.333
Proposizione: I seguenti problemi di ricerca NP sono molti-volte molti riducibili l'uno all'altro:
Dato un circuito che rappresenta un grafico non orientato bipartito e un vertice cui grado non è divisibile per , trova un altro vertice di questo tipo.u ∈ A ∪ B 3(A∪B,E)u∈A∪B3
Dato un circuito che rappresenta un grafico diretto e un vertice cui equilibrio di gradi (cioè, out-gradi meno in-gradi) non è divisibile per , trova un altro vertice.u ∈ V 3(V,E)u∈V3
Dato un circuito che calcola una funzione tale che , trova un punto fisso di .f 3 = i d ff:[0,2n)→[0,2n)f3=idf
Prova:
1≤p2 è ovvio, in quanto è sufficiente dirigere i bordi da sinistra a destra.
A B V A = { x A : x ∈ V } B = { x B : x ∈ V } x → y { x A , y B } 1 { x B , y A } - 1 grado ( x A ) = - deg ( x B ) x u2≤p1 : per prima cosa, costruiamo un grafico bipartito ponderato. Siano e copie di : , . Per ogni bordo originale da , inseriamo un bordo di peso e un bordo di peso . Ciò rende uguale al saldo in gradi di nel grafico originale. Se è la data del vertice di equilibrio , aggiungiamo un vantaggio in più di pesoABVA={xA:x∈V}B={xB:x∈V}x→y{xA,yB}1{xB,yA}−1deg(xA)=−deg(xB)xu{ u A , u B } b deg ( u A ) = 2 b ≢ 0b≢0(mod3){uA,uB}b, in modo che e . sarà il nostro vertice scelto.deg ( u B ) = 0 u Adeg(uA)=2b≢0(mod3)deg(uB)=0uA
Al fine di rendere il grafico un semplice grafico non ponderato non orientato, prima riduciamo tutti i pesi modulo e rilasciamo tutti i bordi del peso . Questo lascia solo i bordi dei pesi e . Quest'ultimo può essere sostituito con gadget adatti. Ad esempio, anziché un bordo di peso , includiamo nuovi vertici , per , con bordi , , , , : questo rende0 1 2 2 { x A , y B } w A i z B i i = 0 , … , 3 { x A , y B } { x A , z B i } { w A i , y B } { w A i , z B i } { w A i30122{xA,yB}wAizBii=0,…,3{xA,yB}{xA,zBi}{wAi,yB}{wAi,zBi}deg ( w A i ) = deg ( z B i ) = 3 5 ≡ 2{wAi,zB(i+1)mod4}deg(wAi)=deg(zBi)=3, E contribuisce per e .x A y B5≡2(mod3)xAyB
n 2 n ≡ 13≤p2 : Suppongo che per semplicità sia anche in modo che . Costruiamo un grafico diretto su come segue:nV = [ 0 , 2 n )2n≡1(mod3)V=[0,2n)
bordi e per ogni .3 x + 2 → 3 x x < 2 n / 3 - 13x+1→3x3x+2→3xx<2n/3−1
Se è un'orbita non fissa di , includiamo i bordi da e da . f x 0 → x 1 x 0 → x 2x0<x1<x2fx0→x1x0→x2
Il vertice scelto sarà . La prima clausola contribuisce al saldo o a ciascun vertice . Allo stesso modo, la seconda clausola contribuisce al saldo o ai vertici che non sono punti fissi. Quindi, supponendo che non sia già un punto fisso, è effettivamente un modulo sbilanciato , e qualsiasi altro vertice sbilanciato modulo è un punto fisso di .1 - 2 ≡ 1u=2n−11≠ u - 1 2 ≡ - 1−2≡1(mod3)≠u−1u 3 3 f2≡−1(mod3)u33f
A = B = [ 0 , 2 n ) n u ∈ A ≡ 21≤p3 : possiamo supporre che con pari, e il dato vertice ha grado .A=B=[0,2n)nu∈A≡2(mod3)
Possiamo etichettare in modo efficiente gli spigoli con un vertice come , dove . In questo modo, diventa un sottoinsieme di , che identifichiamo con . Definiamo una funzione su come segue.( y , j ) j < deg ( y ) E [ 0 , 2 n ) × [ 0 , 2 n ) [ 0 , 2 2 n ) f [ 0 , 2 n ) × [ 0 , 2 n )y∈B(y,j)j<deg(y)E[0,2n)×[0,2n)[0,22n)f[0,2n)×[0,2n)
Sul complemento di : per ogni e tale che , facciamo , , . Inoltre, , , per . Questo esclude il punto e punti per ogni cui grado non è divisibile per .y ∈ B j deg ( y ) ≤ 3 j < 2 n - 1 f ( y , 3 j ) = ( y , 3 j + 1 ) f ( y , 3 j + 1 ) = ( y , 3 j + 2 ) f ( y , 3 j + 2 ) =Ey∈Bjdeg(y)≤3j<2n−1f(y,3j)=(y,3j+1)f(y,3j+1)=(y,3j+2)f ( 3 i , 2 n - 1 ) = ( 3 i + 1 , 2 n - 1 ) f ( 3 i + 1 , 2 n - 1 ) = ( 3 i + 2 , 2 n - 1 ) f ( 3 i + 2 , 2 nf(y,3j+2)=(y,3j)f(3i,2n−1)=(3i+1,2n−1)f(3i+1,2n−1)=(3i+2,2n−1)3 i < 2 n - 1 ( 2 n - 1 , 2 n - 1 ) 3 - ( deg ( y ) mod 3 ) ( y , i ) y ∈ B 3f(3i+2,2n−1)=(3i,2n−1)3i<2n−1(2n−1,2n−1)3−(deg(y)mod3)(y,i)y∈B3
Su : per ogni , fissiamo enumerazione dei suoi bordi incidenti , dove . Mettiamo , , per . Questo esclude i punti per ciascun vertice cui grado non è divisibile per .x ∈ A ( y 0 , j 0 ) , … , ( y d - 1 , j d - 1 ) d = deg ( x ) f ( y 3 i , j 3 i ) = ( y 3 i + 1 , j 3 i + 1 ) f ( y 3 i +Ex∈A(y0,j0),…,(yd−1,jd−1)d=deg(x)f(y3i,j3i)=(y3i+1,j3i+1)f( y 3 i + 2 , j 3 i + 2 )=( y 3 i , j 3 i )i<⌊d / 3⌋deg(x)mod3x∈f(y3i+1,j3i+1)=(y3i+2,j3i+2)f(y3i+2,j3i+2)=(y3i,j3i)i<⌊d/3⌋deg(x)mod33x∈A3
Poiché , due dei suoi bordi degli incidenti sono stati lasciati fuori; li trasformiamo in un altro ciclo usando come terzo punto. I punti rimanenti vengono lasciati come punti fissi di . Per costruzione, ognuno di essi darà origine a una soluzione di (1).f ( 2 n - 1 , 2 n - 1 ) fdeg(u)≡2(mod3)f(2n−1,2n−1)f