Definizioni di un algoritmo in esecuzione in tempo polinomiale e in tempo fortemente polinomiale


18

Wikipedia lo definisce essere

Si dice che un algoritmo ha un tempo polinomiale se il suo tempo di esecuzione è limitato da un'espressione polinomiale delle dimensioni dell'input per l'algoritmo, cioè per qualche costante k.T(n)=O(nK)

L'algoritmo viene eseguito in tempi fortemente polinomiali se [8]

  • il numero di operazioni nel modello aritmetico di calcolo è limitato da un polinomio nel numero di numeri interi nell'istanza di input; e

  • lo spazio utilizzato dall'algoritmo è limitato da un polinomio delle dimensioni dell'input.

In Bernhard Korte, Jens Vygen, ottimizzazione combinatoria :

Definizione 1.4.

Si dice che un algoritmo con input razionale funzioni in tempo polinomiale se

  • esiste un numero intero k tale che viene eseguito nel tempo , dove n è la dimensione di input eO(nK)
  • tutti i numeri nei calcoli intermedi possono essere memorizzati con bit .O(nK)

Si dice che un algoritmo con input arbitrario funzioni in un tempo fortemente polinomiale se

  • esiste un numero intero k tale che viene eseguito in tempo per qualsiasi input costituito da n numeri eO(nK)
  • corre in tempo polinomiale per input razionali.

Perfavore, correggimi se sbaglio. Di seguito sono riportate le differenze letterali che ho notato:

  • Per gli algoritmi del tempo polinomiale, la definizione di Korte e Vygen è "la definizione di Wikipedia + spazio di archiviazione polinomiale".

  • Per algoritmi temporali fortemente polinomiali, la definizione di Korte e Vygen e la definizione di Wikipedia richiedono entrambe un tempo polinomiale nella dimensione di memorizzazione dell'input. Ma K e V richiedono inoltre tempo polinomiale nel numero di numeri in qualsiasi input, mentre Wikipedia richiede anche spazio di archiviazione polinomiale nella dimensione di input.

Quindi le definizioni di K e V e Wikipedia per questi due concetti sono equivalenti, rispettivamente? Quali altre differenze e relazioni sono tra loro?

Grazie e saluti!


la sezione di Wikipedia subito dopo il defn ha una spiegazione abbastanza buona, non è abbastanza chiara? ha a che fare con quanti bit rappresentano numeri e numeri molto grandi possono influenzare le misurazioni della complessità "verso l'alto". pensa che i defn con K&V siano probabilmente "quasi" equivalenti. per quanto riguarda gli input razionali, è necessario dimostrare che l'aritmetica dei razionali non aumenta le loro dimensioni in larga misura. pensa che ciò possa essere mostrato trovando il display LCD di tutti gli ingressi e facendo tutto l'aritmetica in numeri sul display LCD.
vzn,

@vzn: la spiegazione in Wikipedia (1) è decente per l'aritmetica contro la macchina di Turing, ma è piuttosto superficiale per quanto riguarda lo scopo e la definizione fortemente poli, e (2) era completamente sbagliata su ciò che GCD esemplifica.
alexei il

Risposte:


5

Prima delle definizioni formali, considera ciò che la classificazione "fortemente / debolmente" mira a distinguere.

Innanzitutto, considera di eseguirne uno su una Turing Machine. Entrambi verranno eseguiti in una serie di passaggi polinomiali nella lunghezza dell'input con codifica binaria. Di conseguenza, il numero di operazioni aritmetiche eseguite da entrambi dovrebbe essere polinomiale nella lunghezza dell'input codificato binario . Quindi, per entrambi i tempi di funzionamento di Turing Machine aumenterebbe in modo polinomiale all'aumentare del numero di valori di input o delle loro dimensioni. Per enfatizzare quest'ultimo, si noti che anche quello forte compirà più passi TM su magnitudini più grandi (deve almeno leggere i bit extra). In nessun caso si diventa esponenziali (come nel caso del tempo pseudo-polinomiale non correlato). Con una sola macchina Turing, una differenza fondamentale non sembra rilevabile.

O(1)

L'insieme di algoritmi che viene eseguito in numero di operazioni aritmetiche polinomiali nel numero di numeri di input è ben definito, ma si sovrappone alla classe di algoritmi che prendono esponenziale il numero di passi TM nella lunghezza dell'input con codifica binaria (vedi esempi ). Quindi, per questo set, le proprietà nel secondo paragrafo non sarebbero valide. Per escludere l'intersezione indesiderata, aggiungiamo una condizione per uno spazio polinomiale TM [*].

In [1] questo è affermato in due modi:

  • L'algoritmo viene eseguito in un tempo fortemente polinomiale se l'algoritmo è un algoritmo spaziale polinmomiale ed esegue una serie di operazioni aritmetiche elementari che è delimitata da un polinomio nel numero di numeri di input.
  • Un algoritmo polinomiale è un algoritmo spaziale polinomiale (nel nostro modello di macchina Turing standard) e un algoritmo temporale polinomiale nel modello aritmetico (vedere questa domanda per un chiarimento).

O(n3)O(n2)

[*] La seconda condizione è dichiarata ovunque come spazio polinomiale, mentre richiedere tempo polinomiale ha più senso per me. Il primo è più inclusivo, ma strano. Esistono algoritmi fortemente polinomiali che richiedono più del tempo polinomiale? Si noti che l'esempio di quadratura ripetuta non richiede né tempo polinomiale né spazio polinomiale.

[1] Grötschel, Martin; László Lovász, Alexander Schrijver (1988). "Complessità, oracoli e calcolo numerico". Algoritmi geometrici e ottimizzazione combinatoria. Springer. ISBN 0-387-13624-X.

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.