PDA

View Full Version : problema massimo


mistergks
14-11-2012, 23:29
Qualcuno mi spiega il perchè quando si risolve un problema di massimo la variabile max va inizializzata al primo elemento dell'array e non a 0??
So che va fatto ma non so bene il motivo!

Cait Sith
14-11-2012, 23:42
perchè se i numeri sono tutti negativi tu ti ritrovi come massimo lo 0, che è sbagliato

mistergks
15-11-2012, 00:57
perchè se i numeri sono tutti negativi tu ti ritrovi come massimo lo 0, che è sbagliato

Giusto giusto! Ci siamo..

Inviato dal mio GT-I9003 usando Tapatalk

gugoXX
15-11-2012, 08:43
Puoi inizializzarla al valore minimo possibile.

demos88
15-11-2012, 09:57
La regola di base è che il confronto deve essere fatto solo fra elementi dell'insieme in cui cercare. Non necessariamente devi prendere il primo elemento, puoi prendere qualsiasi valore tra quelli contenuti nell'insieme di ricerca.

banryu79
15-11-2012, 12:17
Puoi inizializzarla al valore minimo possibile.
This. E' la cosa più sicura da fare.

mistergks
15-11-2012, 12:50
Quindi voi dite che andrebbe.prima.trovato il minimo e poi inizializzare max al valore trovato dal minimo?!

E la variabile min a cosa va inizializzata?


Inviato dal mio GT-I9003 usando Tapatalk

vendettaaaaa
15-11-2012, 12:58
Quindi voi dite che andrebbe.prima.trovato il minimo e poi inizializzare max al valore trovato dal minimo?!

E la variabile min a cosa va inizializzata?


Inviato dal mio GT-I9003 usando Tapatalk
Credo che intendessero di inizializzare la variabile di quel tipo al valore minimo permesso a quel tipo. Ad esempio uno short int ha come valore minimo -127 (se non ricordo male), quindi la inizializzi così. Non c'è niente di più piccolo del più piccolo valore accettato dalla macchina.

simo8
15-11-2012, 13:05
Si , ma è inutile inizializzare il valore massimo al minimo assoluto per il tipo di dato . Se devo trovare il massimo in un insieme tanto vale partire dal primo elemento che il mio insieme contiene dicendo che per adesso è lui il mio valore massimo poi lo confronto con gli altri elementi e modifico il valore di conseguenza .

marco.r
15-11-2012, 13:08
This. E' la cosa più sicura da fare.

Ma anche di difficile realizzazione se il tipo utilizzato non prevede un minimo.

banryu79
15-11-2012, 13:12
Ma anche di difficile realizzazione se il tipo utilizzato non prevede un minimo.
Mmm... ma parli di tipi definiti dall'utente?
Oppure (ad esempio) a una serie (infinita) di valori?

marco.r
15-11-2012, 13:26
Si , ma è inutile inizializzare il valore massimo al minimo assoluto per il tipo di dato . Se devo trovare il massimo in un insieme tanto vale partire dal primo elemento che il mio insieme contiene dicendo che per adesso è lui il mio valore massimo poi lo confronto con gli altri elementi e modifico il valore di conseguenza .

Dipende dal contesto.
Utilizzare il valore minimo ha senso quando non sai la dimensione dell'insieme di cui devi trovare il massimo. Se l'insieme e' vuoto non hai un primo elemento. Per cui come regola se il tipo prevede un valore minimo (o un valore che sei sicuro che l'insieme di input non supera) usa quello. Se non ce l'hai verifica che l'insieme abbia almeno un elemento e usa il primo elemento come valore iniziale.

marco.r
15-11-2012, 13:36
Mmm... ma parli di tipi definiti dall'utente?
Oppure (ad esempio) a una serie (infinita) di valori?
Sopra si parlava di inizializzare a 0, per cui presumo di un qualche sottoinsieme dei numeri reali.
Pero' non e' detto che un qualsiasi tipo utilizzato per rappresentarli abbia il concetto di valore massimo/minimo. Se

In generale un qualsiasi tipo che non preveda un valore di minimo e/o massimo, come ad esempio alcuni numeri a precisione arbitraria. Alcuni prevedono il "-infinito", altri no. Ad esempio in Python mi par di ricordare che gli interi non prevedano un minimo (ma dovrei verificare per esserne sicuro...)

shinya
15-11-2012, 13:42
Ma anche di difficile realizzazione se il tipo utilizzato non prevede un minimo.

Filosofo.

gugoXX
15-11-2012, 14:30
Si , ma è inutile inizializzare il valore massimo al minimo assoluto per il tipo di dato . Se devo trovare il massimo in un insieme tanto vale partire dal primo elemento che il mio insieme contiene dicendo che per adesso è lui il mio valore massimo poi lo confronto con gli altri elementi e modifico il valore di conseguenza .

Il codice risulta piu' semplice e piu' leggibile.

banryu79
15-11-2012, 16:12
Il codice risulta piu' semplice e piu' leggibile.
Esteta. :D

marco.r
15-11-2012, 16:19
Filosofo.

In effetti nella sua brevita' la risposta poteva sembrare eccessivamente acida.
Spero che banryu non se la sia presa troppo :)

banryu79
16-11-2012, 08:08
In effetti nella sua brevita' la risposta poteva sembrare eccessivamente acida.
Spero che banryu non se la sia presa troppo :)
No, non me la sono presa e la tua risposta non mi è smebrata affatto acida.
Dai tuoi successivi messaggi ho poi capito cosa intendevi, grazie :)

AllerITA
16-11-2012, 08:25
Secondo me l'unica differenza nell'inizializzazione della variabile massimo, tra il prendere il primo elemento del vettore e il minimo valore accettabile dal tipo di dato sta solo nella comodità dell'operazione da effettuare per fare ciò.
Poi la cosa può anche essere opinabile.:D

Dânêl
16-11-2012, 14:19
Personalmente preferisco inizializzare la variabile al primo elemento cosi da far partire il confronto dal secondo. La differenza prestazionale è infima, anche se (forse) ci possono essere situazioni dove il confronto può essere oneroso, ma se si può fare una cosa in meno perchè non farla? Certo... se impattasse molto negativamente sulla leggibilità del codice sarebbe un altro paio di maniche :)

gugoXX
16-11-2012, 18:39
E se l'insieme non contenesse alcun elemento?

[Kendall]
16-11-2012, 19:25
E se l'insieme non contenesse alcun elemento?

Il check sull'esistenza dell'insieme deve essere fatto a prescindere dello "stile" usato per il calcolo del minimo. Anzi, se tale insieme è null non avrebbe alcun senso porre a prescindere il valore minimo pari a quello minimo consentito dal tipo trattato (insieme vuoto --> non esiste un minimo nè un massimo).

gugoXX
18-11-2012, 10:11
Si', e quindi il metodo cosa restituisce?

Dânêl
18-11-2012, 11:02
Dipende fortemente dalle caratteristiche del linguaggio di programmazione.
Se supporta le eccezioni io lancerei una eccezione. Oppure, si potrebbe passare null se supportato. In un linguaggio come C dove le eccezioni non esistono e non è possibile restituire un codice di errore (perchè il numero dell'errore potrebbe appartenere all'insieme di ricerca) restiuirei un valore booleano, o un intero come codice di errore, per dire se la ricerca ha avuto successo o meno e metterei il valore di massimo in uno dei parametri passati per indirizzo. Non sarà particolarmente elegante, ma non mi vengono altre soluzioni al momento.
Il discorso cambia se l'insieme di ricerca è limitato, per esempio, ai soli numeri positivi. In quel caso si può usare qualunque numero negativo come codice di errore.