Analisi dell'algoritmo del caso medio utilizzando il metodo di incomprimibilità di Kolmogorov


8

Si dice che il metodo di incomprimibilità semplifichi l'analisi degli algoritmi per il caso medio. Da quello che ho capito, questo è perché non è necessario calcolare tutte le possibili combinazioni di input per quell'algoritmo e quindi derivare una complessità media. Invece, una singola stringa incomprimibile viene presa come input. Poiché una stringa incomprimibile è tipica, possiamo supporre che questo input possa agire come un'approssimazione accurata del caso medio.

Mi sono perso per quanto riguarda l'applicazione effettiva del metodo di incomprimibilità a un algoritmo. A parte questo, non sono un matematico, ma penso che questa teoria abbia applicazioni pratiche nella programmazione quotidiana.

Alla fine, vorrei imparare come posso dedurre il caso medio di un determinato algoritmo, sia esso banale o complesso. Qualcuno potrebbe dimostrarmi come applicare il metodo a un semplice algoritmo? Ad esempio, data una stringa di input S, archivia tutti i caratteri univoci in S, quindi stampali singolarmente:

void uniqueChars(String s) {
    char[] chars = chars[ s.length() ]
    int free_idx = 0;

    for (int i = 0; i < s.length(); i++) {
       if (! s[i] in chars) {
          chars[free_idx] = s[i]
          free_idx++;
       }
    }

    for (int i = 0; i < chars.length(); i++) {
        print (chars[i])
    }
}

Supponiamo una ricerca lineare per verificare se l'array contiene un elemento.

Lo snippet di codice sopra riportato è solo a scopo di discussione. Ovviamente sono accettabili algoritmi migliori per dimostrare la teoria.

Ho fatto questa domanda su StackOverflow ( https://stackoverflow.com/q/24619383/3813812 ) nel luglio 2014 e ho ricevuto alcuni commenti utili ma non una risposta definitiva. Come ha sottolineato uno dei commentatori, questa domanda è più adatta per Computer Science StackExchange, quindi chiedo qui oggi.

Alcune pubblicazioni che ho esaminato includono:

  1. Un'introduzione alla complessità di Kolmogorov e alle sue applicazioni, di Ming Li e Paul MB Vitányi

  2. https://www.cs.duke.edu/~reif/courses/complectures/Li/KC-Lecture1.pdf

  3. http://www.detectingdesign.com/PDF%20Files/Kolmogorov%20Complexity%202.pdf

Tra le poche altre risorse a cui non ho collegamenti a portata di mano.

Se la mia comprensione dell'applicabilità della complessità di Kolmogorov è imprecisa o ciò che chiedo non è pratico, apprezzerei una dichiarazione in merito al fatto.


Potrebbe rendere alcuni casi più facili da analizzare, ma non direi che è ancora facile. Uno degli esempi più belli sta dimostrando che ci sono infiniti numeri primi. Applicare il metodo a un certo algoritmo interessante tende a valere un documento di ricerca della mia esperienza.
Juho,

Risposte:


4

L'idea del metodo di incomprimibilità è che un input incomprimibile soddisfi determinate proprietà che possono essere utili nell'analisi. Nel tuo caso, la complessità dell'algoritmo dipende da quanti caratteri compaiono nella stringa. Quando si elabora il carattere, il "tempo di esecuzione" (o meglio il suo proxy, il numero di confronti durante il controllo dell'elenco) è in media confronti confronti, dove è il numero di caratteri diversi che sono stati visto finora. Per stimare , nota che possiamo codificare i primi caratteri usando all'incirca bit e deduciamo chekαk/2αkαkk8αk+klogαk8αk+klog2αk8k. Quindi, a meno che non sia molto piccolo, deve essere molto vicino a , e possiamo dedurre che ci sono in media confronti per carattere. Possiamo usare la disuguaglianza per determinare quanto grande deve essere , e anche cosa succede quando è piccolo.kαk256128kk

Il motivo per cui stiamo provando a contare l'esatta complessità nel caso del tuo algoritmo è che i tempi di esecuzione nel caso peggiore e nel caso migliore sono entrambi . Abbiamo usato l'incomprimibilità per stimare , che può anche essere stimato direttamente usando metodi probabilistici, ma il calcolo dell'incomprimibilità è probabilmente più semplice. Tuttavia, l'incomprimibilità non ovvia alla necessità di analizzare l'algoritmo in modo probabilistico, ma rende l'analisi più tracciabile in alcuni casi.Θ(n)αk


Grazie per l'ottima risposta, Yuval. Avevo la falsa impressione che il metodo dell'incomprimibilità potesse servire da sostituto diretto dell'analisi probabilistica. Credo che la tua risposta e il commento di Juho siano importanti per evidenziare che può solo semplificare l'analisi in alcuni casi.
user3813812

1

Come ulteriore commento (ma leggermente più lungo di un commento effettivo) sulla risposta accettata:

  1. La complessità di Kolmogorov (o complessità algoritmica ) si occupa di descrizioni ottimali di "stringhe" (nel senso generale delle stringhe come sequenze di simboli )

  2. Una stringa è (sufficientemente) incomprimibile o (sufficientemente) algoritmicamente casuale se la sua descrizione (algoritmica) (complessità kolmogorov K ) non è inferiore alla sua dimensione (letterale) . In altre parole, la descrizione ottimale della stringa è la stringa stessa .

  3. Il risultato principale della teoria è che la maggior parte delle stringhe sono (algoritmicamente) casuali (o tipiche) (che è anche correlata ad altre aree come i teoremi di Goedel, attraverso il lavoro di Chaitin)

  4. La complessità di Kolmogorov è legata all'entropia probabilistica (o Shannon) , in realtà l'entropia è un limite superiore a KC. E questo collega l'analisi basata sulla complessità descrittiva all'analisi probabilistica. Possono essere intercambiabili.

  5. A volte potrebbe essere più semplice usare l'analisi probabilisrtic, altre la complessità descrittiva (viste gli stessi diciamo)

Quindi alla luce di quanto sopra, assumendo un algoritmo in modo casuale all'input di un algoritmo, si assume quanto segue:

  1. L'input è tipico , quindi l'analisi descrive uno scenario di caso medio (punto 3 sopra)
  2. La dimensione dell'input è in qualche modo correlata alla sua probabilità (punto 2 sopra)
  3. Si può passare dalla vista algoritmica alla vista probabilistica (punto 4 sopra)
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.