Che complessità temporale classificheresti come segue?
int n = 100;
for(int x = 0; x < n; x++)
for(int y = 0; y < n; y++)
for(int z = 0; z < n; z++)
DoWork(x,y,z);
Non credo che qualcuno possa obiettare che è O (n ^ 3)
Consideriamo ora uno scenario in cui i limiti per ciascuna dimensione sono forniti come 3 input separati
int bx = 10, by = 1000, bz = 1000
for(int x = 0; x < bx; x++)
for(int y = 0; y < by; y++)
for(int z = 0; z < bz; z++)
DoWork(x,y,z);
Come descriveresti la complessità di quanto sopra? Avrei descritto intuitivamente questo come ancora O (n ^ 3) poiché è ancora necessario iterare in tutte e 3 le dimensioni.
Un amico ha suggerito che la grandezza dell'ingresso entra in gioco e poiché bx
è di diversi ordini di grandezza inferiore a by
o bz
, che dovresti invece definire come O (n ^ 2)
Quale è?
Modifica
Solo per fornire un po 'più di contesto in cui le persone hanno votato per chiudere la domanda.
Questo è uscito da una discussione su AdventOfCode 2018 - Puzzle 6 ( link )
I "limiti" di questo puzzle erano un file di input di 50 righe in cui ogni input definiva un punto. Quindi ogni concorrente stava lavorando su una soluzione limitata da
- numero di ingressi: 50 - costante
- n = cox max-x: diverso per concorrente - valori di input univoci che abbiamo generato per ciascun utente
- m = rapporto max-y: diverso per concorrente - valori di input univoci che abbiamo generato per ciascun utente
Penso basandomi sul feedback qui sotto, che rende il caso migliore O(n*m)
come ignoreresti i 50 valori di input costanti.