Stavo pensando ad algoritmi inefficienti basati sulla casualità e mi sono chiesto come classificarli.
Per esempio. Supponi di voler generare tutti i numeri da 1 a N in ordine casuale ma solo una volta ciascuno.
Il mio algoritmo inefficiente fa questo ...
Generate a random number between 1 and N (inclusive).
Check it has not already been used.
If it has then generate a new random number until you get one that hasn't been used.
Display the random number.
Store random number in checking array.
Questo dovrebbe ottenere tutti i numeri in un ordine casuale ma per valori elevati di N dovrà essere eseguito più volte quando si ottengono gli ultimi numeri.
Per esempio. In media, l'ultimo valore casuale richiederà N volte per generare.
Il caso migliore per questo è O (N) perché esiste la possibilità che ogni numero casuale generato sia distinto.
Il caso medio è un po 'più difficile ...
Senza andare correttamente nel calcolo penso che sia O (NlogN) o possibile O (N ^ 2).
Ma quale sarebbe il caso peggiore? Bene, il caso peggiore è che non trova mai tutti i numeri. Sarebbe un loop infinito e mai effettivamente completato. Per N di grandi dimensioni è comprensibile, ma come si fornisce la notazione O grande per questo?