Esempi di problemi in cui gli algoritmi esponenziali funzionano più velocemente degli algoritmi polinomiali per dimensioni pratiche?


13

Conosci qualche problema (preferibilmente almeno in qualche modo ben noto), dove, per una dimensione pratica del problema , un algoritmo esponenziale corre molto più velocemente di una controparte temporale polinomiale più nota.

Ad esempio, supponiamo che un problema abbia una dimensione pratica * di e ci sono due algoritmi conosciuti: uno è 2 n e l'altro èn=1002nnc per una costante . Chiaramente per qualsiasi c > 15 , l'algoritmo esponenziale è preferito.cc>15

* Immagino che la dimensione pratica significherebbe qualcosa che si trova comunemente nel mondo reale. Come il numero di treni su una rete.


1
Penso che potresti trovare quello che cerchi nella letteratura sulla complessità parametrizzata.
Kaveh,

per gli algoritmi lineari c'è generalmente un moltiplicatore costante che non è generalmente significativo e spesso omesso dalla complessità, ma uno che ricordo che sembra molto alto era una fusione sul posto che era lineare, ma nel peggiore dei casi qualcosa come 5000 N ... quindi in in quello scenario c'è una grande area utilizzabile in cui N ^ 2 sarebbe inferiore a 5000 N dove la dimensione è inferiore a sqrt (5000) e un dominio più piccolo in cui 2 ^ n sarebbe ancora più veloce dove n è inferiore a log 5000
Grady Player

Risposte:


13

Che ne pensi dell'algoritmo simplex per la programmazione lineare? In molte occasioni viene utilizzato in pratica.

Modificato per aggiungere: penso che sia più un "algoritmo esponenziale nel caso peggiore" che funziona in modo efficiente su istanze / distribuzioni pratiche piuttosto che più veloce su istanze contraddittorie di dimensioni pratiche .


4
@diesalbla: dipende dal forum esatto. Citando Wikipedia, "nel 1972, Klee e Minty [32] hanno fornito un esempio che mostra che la complessità del caso peggiore del metodo simplex come formulata da Dantzig è il tempo esponenziale".
RB

12

Il O(n3)


5
In realtà il numero di minori proibiti non è un grande fattore (anche se ci fossero 250 milioni) ma la parte che dice che richiede tempo (non sono sicuro che sia esatto): , dove H è uno dei minori proibiti è male. In realtà è impossibile in pratica anche per | H | = 2. 2222|H|O(n3)H
Saeed

1
O(n2)|H|

1
Hsol|H|

-3

Ci sono alcuni esempi con il rilevamento / test della primalità (non problematico / esatto) . L' algoritmo AKS è stato il primo algoritmo per il test di primalità mostrato in P. Non compete in modo favorevole rispetto ad alcuni algoritmi di tempo esponenziale per input "piccoli". I dettagli sono in qualche modo complicati perché dimostrarlo richiede in genere l'implementazione degli algoritmi, il che è un esercizio impegnativo e può dipendere da aspetti specifici dell'implementazione.

Maggiori informazioni / dettagli / riferimenti su questa domanda cs.se:


6
Per quanto ne so, gli algoritmi con cui l'AKS compete nella pratica sono il polinomio randomizzato (Miller – Rabin, ECPP) o il quasipolinomio deterministico (Adleman – Pomerance – Rumeley). In nessun luogo vicino al tempo esponenziale.
Emil Jeřábek 3.0

6
La versione randomizzata di Miller-Rabin, che è quella utilizzata nella pratica, non dipende da RH.
Emil Jeřábek 3.0

5
È tutto vero, ma non ha nulla a che fare con la domanda originale.
Emil Jeřábek 3.0

2
Sì, lo so tutto. E per la terza volta, questo è irrilevante. La domanda richiede algoritmi a tempo esponenziale che sono in pratica competitivi con un noto algoritmo a tempo polinomiale (qui, AKS). L'unico algoritmo di test della primalità in tempo esponenziale utilizzato nella pratica è la divisione di prova, che non è competitiva per numeri di qualsiasi dimensione non banale. Gli algoritmi competitivi utilizzati nella pratica sono molto più efficienti dell'esponenziale, anche se non sono polinomiali (o deterministici o incondizionati).
Emil Jeřábek 3.0

3
Ciò che è mele e arance sta confrontando AKS (un algoritmo di test di primalità) con GNFS (un algoritmo di factoring).
Emil Jeřábek 3.0
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.