dleonard Inviato 17 Luglio 2007 Segnala Condividi Inviato 17 Luglio 2007 ciao ragazzi... chiedo aiuto a tutti gli studenti di informatica per alcuni chiarimenti chi mi dice qual'è l'ordine di complessità di questo algoritmo? potreste spiegarmi (mi basta a grandi linee) i calcoli svolti? considerate che c'è un errore di battitura..l'assegnamento del ciclo for m:= n-2 è errato...sarebbe in realta m:=m-2... "Chi ha giocato Del Duca-Samb non ha paura di niente" - Carlo Mazzone, da allenatore della Roma, prima di un derby contro la Lazio. Link al commento Condividi su altri siti Altre opzioni di condivisione...
macfaber Inviato 17 Luglio 2007 Segnala Condividi Inviato 17 Luglio 2007 Questo topic mi ha fatto tornare indietro ai tempi dell'università !!... Ad occhio sembra che l'algoritmo calcoli n volte n per n + j e che questo calcolo si moltiplica n - 10 volte e nel caso peggiore in cui n sia > 44, la funzione viene chiamata ricorsivamente ... Purtroppo, e mi vergogno a dirlo, sono un pò arruginito considerando che questa materia l'avrò data nel '99 quando ero al primo anno e mi sono dimenticato tutto almeno per quanto riguarda la teoria... Però se il problema non è esponenziale, è abbastanza vicino ad esserlo :-) Sorry e in bocca al lupo! iMac 3.06 Mhz 21.5" 4 GB RAM HD da 1TB ATI Radeon HD 4670 con 256MB Mac Mini Intel core duo 1.83 GHz 2 GB ram. iPhone 3GS 32GB Link al commento Condividi su altri siti Altre opzioni di condivisione...
dleonard Inviato 17 Luglio 2007 Autore Segnala Condividi Inviato 17 Luglio 2007 io avevo calcolato un O(n^3) nel caso pessimo (n>44) e O(n^2) nel caso n<44, dato che il while viene comunque eseuito... ma la soluzione dice che nel caso n<44 la complessità O(1), quindi costante! ma a me sembra strano perchè, è vero che MISTERO:=1 richiede tempo costante, ma il while, come gia detto viene eseguito in ogni caso!! "Chi ha giocato Del Duca-Samb non ha paura di niente" - Carlo Mazzone, da allenatore della Roma, prima di un derby contro la Lazio. Link al commento Condividi su altri siti Altre opzioni di condivisione...
dleonard Inviato 17 Luglio 2007 Autore Segnala Condividi Inviato 17 Luglio 2007 ma come è possibile? l altro giorno tutti a fare i fighi a parlare di greedy e backtrack, e oggi nessuno?? scherzo ovviamente, ma se qualcuno può chiarirmi questa cosa sarei felicissimo... "Chi ha giocato Del Duca-Samb non ha paura di niente" - Carlo Mazzone, da allenatore della Roma, prima di un derby contro la Lazio. Link al commento Condividi su altri siti Altre opzioni di condivisione...
redvex Inviato 17 Luglio 2007 Segnala Condividi Inviato 17 Luglio 2007 ora son troppo stanco per calcolarla, ma appena mi riprendo te lo svolgo e ti trovo l'eq di ricorrenza I miei widgets • La guida a Rails • Le mie foto su flikrPdC Calculator 2.0 • Soleluna 1.2 • PrezziBenzina 1.3 MyMovies 1.3 • MyConcert 1.1.1 • RiDoc 1.1 Redvex.it 1.0 • Gazzetta.it 1.0 Programmare per iPhone Link al commento Condividi su altri siti Altre opzioni di condivisione...
zzi_miei Inviato 19 Luglio 2007 Segnala Condividi Inviato 19 Luglio 2007 ciao, spero di non dire troppe cazzate, pero' secondo me O(1) e' giusto.provo a spiegarmi: se n fosse uguale a 44 puoi calcolare il numero esatto di iterazioni del while e del for (dovrebbe essere 18*44, giusto?). Se utilizzi questo numero come costante c nella definizione di O allora per tutti i valori di n tra 0 e 44 la formula espressa con questa costante e' vera (cioe' rappresenta un limite asintotico superiore). prova ad immaginare una retta costante con intercetta=18*44. tutte le chiamate mistero(n<=44) sono sotto quella retta. $a^n+b^n=c^n | n>2?$ Cerco un pb 12'' 1.5ghz Link al commento Condividi su altri siti Altre opzioni di condivisione...
BlackICE Inviato 19 Luglio 2007 Segnala Condividi Inviato 19 Luglio 2007 Hmm... a me qualcosa non mi torna... quel O(1) mi puzza Come la vedo io: 1) n≥44: O(n^3) ---> fa i due cicli innestati e fa anche la ricorsione 2) 44≥n≥10: O(n^2) ---> fa i due cicli innestati ma non la ricorsione 3) n≤10: θ(n) ----> fa soltanto il for interno che cicla esattamente n volte Il ragionamento di zzi_miei invece non mi torna: anche per n="un qualsiasi numero > 44" si può contare l'esatto numero di cicli che verranno fatti e, data la definizione di funzione di complessità come di una funzione monotona non-decrescente, è naturale che per tutti i valori di n sotto quella soglia scelta l'algoritmo starà sotto quella complessità . Calcolare la complessità di un algoritmo vuol dire valutare, spesso in ordine di grandezza a causa della complessità dei conti da fare, come varia il tempo "di esecuzione" al variare della dimensione dell'input. Non è un semplice trovare un "limite" al tempo "di esecuzione" dell'algoritmo. Per esempio: dire che un algoritmo è O(n^2) vuol dire che se la dimensione dell'input aumenta di 3 volte allora il tempo "di esecuzione" dell'algoritmo aumenta, nel caso peggiore, di 9 volte. Almeno queste sono le cose che mi ricordo io... Se ho detto castronerie correggetemi. p.s: non sapevo come spiegarmi ma si sa che un algoritmo non ha un tempo di esecuzione Wii code: 0734 3828 1483 3595 Mii name: BlackICE Link al commento Condividi su altri siti Altre opzioni di condivisione...
zzi_miei Inviato 19 Luglio 2007 Segnala Condividi Inviato 19 Luglio 2007 scusa ma se n<= 10 nel while non entra e quindi neanche nel for. a parte questo, fino a 44 la complessita' non dipende dalla dimensione dell'input o meglio ne dipende ma la puoi limitare superiormente con una costante. per n>44 la devi calcolare come funzione di n semplicemente perche' non sai quanto potra' valere. $a^n+b^n=c^n | n>2?$ Cerco un pb 12'' 1.5ghz Link al commento Condividi su altri siti Altre opzioni di condivisione...
BlackICE Inviato 19 Luglio 2007 Segnala Condividi Inviato 19 Luglio 2007 scusa ma se n<= 10 nel while non entra e quindi neanche nel for. a parte questo, fino a 44 la complessita' non dipende dalla dimensione dell'input o meglio ne dipende ma la puoi limitare superiormente con una costante. per n>44 la devi calcolare come funzione di n semplicemente perche' non sai quanto potra' valere. Ooops Per n < 10 hai ragione... niente cicli e niente ricorsione => O(1) Per il discors n > 44 mi sa che non mi sono spiegato. Premesso che non stò dicendo che ho ragione per forza, ma che stò solo ragionando in un certo modo. La funzione di complessità dipende da n perchè anche per n < 44 i cicli vengono eseguiti. Per il fatto del limite superiore quello che dici è naturale per il semplice fatto che la funzione di complessità di un algoritmo è, per definizione, una funzione monotona non decrescente. Tu stai scegliendo un valore n preciso, chiamiamolo k (nel nostro caso sarebbe il valore 44), e dici che per ogni n < 44, f(n) (chiamiamo f la nostra funzione di complessità ) <= f(k). Ma questo, come vedi, non dice nulla sulla natura della funzione f(n), anzi, lo potresti fare per qualsiasi valore k (visto che f è monotona non decrescente). Wii code: 0734 3828 1483 3595 Mii name: BlackICE Link al commento Condividi su altri siti Altre opzioni di condivisione...
zzi_miei Inviato 19 Luglio 2007 Segnala Condividi Inviato 19 Luglio 2007 ma neanche io voglio avere ragione per forza...penso che stiamo discutendo normalmente detto questo, la costante cui mi riferisco non e' n=44 ma la costante che usi nella definizione di O-grande (io sono abituato a chiamarla c). per come la vedo tra 0 e 44 non importa tanto come va la funzione poiche' la si puo' approsimare con un valore costante,cosa che non si puo' fare per tutti gli n successivi. $a^n+b^n=c^n | n>2?$ Cerco un pb 12'' 1.5ghz Link al commento Condividi su altri siti Altre opzioni di condivisione...
BlackICE Inviato 19 Luglio 2007 Segnala Condividi Inviato 19 Luglio 2007 Si infatti... era il dubbio iniziale che avevo. Cioè, non mi sembrava molto sensato parlare di complessità asintotica per n limitato. Come dici te, basterebbe fissare la costante c abbastanza grande e il gioco è fatto. Nel mio caso facevo una specie di interpolazione prendendo il comportamento della complessità dell'algoritmo per n compreso tra 10 e 44 e generalizzandolo come una funzione su tutto il dominio dei naturali. A conti fatti, anzi, a definizioni fatte :P, direi che non ha semplicemente senso parlare di complessità asintotica per intervalli finiti di n. In effetti anche la definizione di "O grande" rende insensato parlare di complessità asintotica per intervalli finiti di n. A questo punto direi semplicemente che la complessità asintotica, nel caso pessimo, dell'algoritmo è O(n^3). Complimenti @zzi_miei comunque: questo è il modo di portare avanti discussioni in maniera costruttiva. Se ne impara tuttti qualcosa. See you. Wii code: 0734 3828 1483 3595 Mii name: BlackICE Link al commento Condividi su altri siti Altre opzioni di condivisione...
zzi_miei Inviato 19 Luglio 2007 Segnala Condividi Inviato 19 Luglio 2007 bhe...speriamo che ce ne possano essere altre. :P $a^n+b^n=c^n | n>2?$ Cerco un pb 12'' 1.5ghz Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Archiviato
Questa discussione è archiviata e chiusa a future risposte.