Sto cercando un metodo per trovare i valori massimi e minimi di un array intero 2D in C++. Sono a conoscenza dello std::max_element()
e dello std::min_element()
, ma sembrano funzionare solo per array monodimensionali.Il metodo migliore per trovare i punti estremi di un array 2D in C++?
La matrice 2D potrebbe essere dichiarato e inizializzato da:
int temp[5][5];
for(int x = 0; x < 5; x++)
{
for(int y = 0; y < 5; y++)
{
temp[x][y] = some_random_number;
}
}
Un metodo semplice potrebbe essere quella di fare qualcosa di simile:
int min = high_number;
int max = low_number;
for(int x = 0; x < 5; x++)
{
for(int y = 0; y < 5; y++)
{
if(temp[x][y] < min)
{
min = temp[x][y];
}
if(temp[x][y] > max)
{
max = temp[x][y];
}
}
}
Ma questo non sembra molto ottimizzato. Qualcuno è in grado di dare qualche consiglio o proporre un'idea migliore?
Non ottimizzare, fare un'implementazione semplice e muto che è facile da eseguire il debug. Ottimizza quando diventa un collo di bottiglia durante la profilazione. – Ryp
Non esiste una soluzione migliore (potrebbe esserci dello zucchero risparmiando un po 'di digitazione) –
L'unico modo per ottimizzare la ricerca del minimo/massimo è mantenere l'array ordinato per riga o colonna. Aggiungerebbe complessità al tuo inserimento/popolamento dell'array, ma potresti trovare min/max in O (n) dove n è il numero di righe o colonne. – mstbaum