View Full Version : Consiglio per libro su algoritmi
Ravenflot
23-11-2009, 11:58
Saluti a tutti !
Posto per chiedere consiglio su di un libro.
Mi sono diplomato in informatica (non laureato !) ma ho fatto il programmatore solo per un annetto. Poi "mi sono dovuto accontentare" di un posto da ufficio normale perché il nuovo lavoro da programmatore non lo trovavo.
Questo succedeva circa 6 anni fa (!).
Per aggiornarmi (ed aggiornare il curriculum) ho imparato il C# che lo preferisco ad altri e poi mi sto leggendo "il" libro Code Complete di McDonnel sulla programmazione in generale (dal ruolo dell'architetto fino alle regole per il debug, refactoring ed ottimizzazione del codice passando per la stesura fatta bene delle classi).
L'anello mancante per tornare in pista (o meglio, per avere meno handicap) è quello che si studia, penso, nel corsi di ingegneria informatica.
In questo momento so la sintassi e come scrivere del buon codice ma non so "come risolvere il problema". Non so se riesco a spiegarmi … parlo di un'entità molto simile alla "business logic".
Come risolvo questo problema ? Come implemento questa cosa che voglio fare ?
Mi serve un libro che tratta di algoritmi. (confermate ?)
Qualcosa che spieghi i concetti tipo del quicksort/bubblesort/mergesort e compagnia bella. Dei grafi, i cammini minimi e cose simili. Insomma : cosa usare e quando.
Ho già preso il libro "Algoritmi e strutture dati" della McGraw Hill ma è un libro troppo complicato per un autodidatta, senza contare che è più un libro di matematica che altro : spiega più le formule per dimostrare ad esempio il numero di cicli nel caso peggiore per un algoritmo piuttosto che spiegare come funziona.
Secondo voi esiste un libro simile ma più "per principianti" ?
cruyffissimo
23-11-2009, 16:05
guarda, non so i libri che ci sono in giro, ma un bel tour per le librerie della tua città dovrebbe saziare la tua sete di algoritmi...al massimo se chiedi a google lui ti risponde!!!
poi dai, la preparazione di statistica che hai dovrebbe essere buona per capire i vari algoritmi per le aziende no??
In bocca al lupo...
:sofico:
^TiGeRShArK^
23-11-2009, 16:58
Design Patterns: Elements of Reusable Object-Oriented Software della gang of four?
Per algoritmi e strutture dati nello specifico libri semplici non ne conosco.. :fagiano:
mindwings
23-11-2009, 18:24
Dovresti espandere meglio il concetto relativo a "non so risolvere il problema" altrimenti dubito che qualcuno riesca a capire le tue difficoltà e a darti un buon consiglio attinente. In generale per risolvere un "problema" bisogna conoscere più della sintassi di un linguaggio, bisognerebbe conoscere anche le possibili api/librerie che ti possono aiutare per risolvere un problema, ed in generale come organizzare/suddividere il problema nei suoi sotto problemi costituenti.
Relativamente alle strutture dati il consiglio che posso darti è quello di studiarne la loro specifica e successivamente provare a realizzare un'implementazione nel linguaggio che preferisci(tra le strutture dati più ricorrenti dizionario, pila, coda, lista, albero, grafo), per quanto riguarda gli algoritmi di ordinamento e non ti consiglio di implementarli per capirne il loro funzionamento ma non memorizzarli, generalmente gli algoritmi fondamentali sono già implementati nella libreria standard di ogni linguaggio. La parte più importante per quanto riguarda gli algoritmi non è in se per se la loro conoscenza mnemonica quanto saperne valutare la complessità, per poter fare ciò hai bisogno di studiare la notazione
http://en.wikipedia.org/wiki/Big_O_notation
Quello che devi saper fare alla fine di questo studio è saper scegliere la struttura dati adeguata ai fini della risoluzione di un dato problema e saper scrivere algoritmi tenendo in considerazione della complessità. Il libro degli algoritmi è fondamentalmente questo:
Introduction to Algorithms by Thomas Cormen, Charles Leiserson, Ronald Rivest... Essendo troppo "fumoso" e "matematico" ti consiglio questo
The Algorithm Design Manual by Steve Skiena dal momento che hai letto Code Complete non dovresti avere problemi con l'inglese, su amazon puoi leggere recensioni e trovare altri libri sull'argomento ma in generale questi 2 sembrano i più quotati.
DanieleC88
24-11-2009, 07:11
Introduction to Algorithms by Thomas Cormen, Charles Leiserson, Ronald Rivest... Essendo troppo "fumoso" e "matematico"
Che, poi, non è vero. Ci sono tutti gli elementi matematico/logici a supporto della correttezza degli algoritmi, ma il 90% di questi sono pronti per essere presi e scritti in codice, senza troppa comprensione degli stessi.
mindwings
24-11-2009, 10:03
Che, poi, non è vero. Ci sono tutti gli elementi matematico/logici a supporto della correttezza degli algoritmi, ma il 90% di questi sono pronti per essere presi e scritti in codice, senza troppa comprensione degli stessi.
Attualmente non possiedo entrambi i libri(quando finirò di macinare il libro che ho sottomano, penso che acquisterò il libro di Steve Skiena) quindi mi sono limitato a riportare le opinioni che ho letto, visto che mi ero informato sui libri in questione. L'approccio di Skiena è più pragmatico, l'altro libro invece è di gran lunga più "accademico". Sul web ci sono tante recensioni basta leggere i pareri per farsi un'idea. O sfogliare il libro attraverso google books :D
Ravenflot
24-11-2009, 12:15
Innanzitutto grazie a chi ha risposto :)
Dovresti espandere meglio il concetto relativo a "non so risolvere il problema" [cut] In generale per risolvere un "problema" bisogna conoscere più della sintassi di un linguaggio, bisognerebbe conoscere anche le possibili api/librerie che ti possono aiutare per risolvere un problema, ed in generale come organizzare/suddividere il problema nei suoi sotto problemi costituenti.
Alla fine tu stesso hai fatto luce!
Anche se sapessi la sintassi di un linguaggio questo non serve a risolvere un problema ma solo a "scriverne" la soluzione. Non penso si programmi a furia di cicli WHILE o strutture IF/CASE.
Sto cercando un aiuto a come approcciarsi ad un problema e mi domandavo se in questo ambito di parla solo di code/array/pile ed algoritmi di ordinamento o ricerche binarie o grafi oppure anche di altro...
La parte più importante per quanto riguarda gli algoritmi non è in se per se la loro conoscenza mnemonica quanto saperne valutare la complessità, per poter fare ciò hai bisogno di studiare la notazione
Quello che devi saper fare alla fine di questo studio è saper scegliere la struttura dati adeguata ai fini della risoluzione di un dato problema e saper scrivere algoritmi tenendo in considerazione della complessità.
Ecco: era questo quello che chiedevo.
Tra l'altro segnalo che CODE COMPLETE è la versione italiana che sto leggendo.
Penso che leggere dei libri in inglese per delle cose forse complesse mi perderei :cry:
Diciamo che mi "spaventano" tutte le dimostrazioni matematiche sulla efficienza di un algoritmo: a me non serve imparare/conoscere questi dettagli. Al massimo mi basta sia segnalato che il quicksort è più veloce del bubblesort (per fare degli esempi). Ecco perchè chiedevo una cosa molto introduttiva. :)
mindwings
24-11-2009, 16:54
Innanzitutto grazie a chi ha risposto :)
Alla fine tu stesso hai fatto luce!
Anche se sapessi la sintassi di un linguaggio questo non serve a risolvere un problema ma solo a "scriverne" la soluzione. Non penso si programmi a furia di cicli WHILE o strutture IF/CASE.
Sto cercando un aiuto a come approcciarsi ad un problema e mi domandavo se in questo ambito di parla solo di code/array/pile ed algoritmi di ordinamento o ricerche binarie o grafi oppure anche di altro...
Allora i libri che ti ho citato precedentemente riguardano soltanto gli algoritmi e le strutture dati. Non affrontano la tematica dello sviluppo di un prodotto software. Quello di cui hai bisogno e' un libro che affronti la tematica dello sviluppo di programmi che seguono il paradigma Object Oriented. Magari un libro che ti faccia vedere lo sviluppo di un applicativo passo passo stile tutorial con tutte le considerazioni del caso.
Ecco: era questo quello che chiedevo.
Tra l'altro segnalo che CODE COMPLETE è la versione italiana che sto leggendo.
Penso che leggere dei libri in inglese per delle cose forse complesse mi perderei :cry:
Diciamo che mi "spaventano" tutte le dimostrazioni matematiche sulla efficienza di un algoritmo: a me non serve imparare/conoscere questi dettagli. Al massimo mi basta sia segnalato che il quicksort è più veloce del bubblesort (per fare degli esempi). Ecco perchè chiedevo una cosa molto introduttiva. :)
Tutti gli algoritmi hanno determinate caratteristiche che li rendono utili sempre in determinati contesti d'uso, ad esempio il bubble-sort si potrebbe
utilizzare quando si conosce che la struttura dei dati presenta gia' un buon livello di ordinamento ed alcuni elementi non sono nella giusta locazione.
Imho la conoscenza dell'inglese e' obbligatoria:fagiano: non tutti i libri vengono tradotti in italiano e la documentazione relativa a qualsiasi cosa la trovi sempre in inglese:D, aggiungo poi che l'inglese tecnico non e' cosi difficile da digerire, alla fine e' questione di abitudine e pratica.
Ryuzaki_Eru
24-11-2009, 18:41
PGI-Bis mi aveva suggerito "Algoritmi e strutture dati in Java" di Drodzek. Sembra un buon libro.
noi in università per il corso di algoritmi e strutture dati I/II abbiamo usato le dispense del goldwurm (massimiliano goldwurm e alberto bertoni), "Progetto e analisi di algoritmi".
ufficialmente sono solo delle dispense ma è più che altro un tomo di 250 pagine.
tra l'altro non essendo un libro credo sia scaricabile liberamente
-----EDIT-----
eccolo (http://infocdc.cs.unicam.it/olimpiadi/DispensaAlgoritmiStruttureDati.pdf)
Ravenflot
26-11-2009, 11:58
Come sempre grazie ancora a tutti quelli che sono intervenuti.
Per il discorso dell'inglese, non è quello il problema : l'inglese lo so bene ma non mi va di comprare un libro per una cosa che per ora è solo un diletto e doverlo non solo capire ma tradurlo a mente insieme in un colpo solo !
Quello che mi metteva apprensione era il fatto che vedo sempre questi libri pieni di dimostrazioni. Forse ero io che mi mettevo da un punto di osservazione errato: mi sembrava che per capire il libro stesso e coglierne l'essenza si dovesse capire tutti i passaggi delle formule. Ora sto capendo che sono solo dimostrazioni a supporto della tesi del capitolo di turno. Ad esempio vengono proposti tutti i passaggi delle formule per dimostrare che la ricerca di un elemento in un array impiega in media (n+1)/2 confronti con un metodo/algoritmo di ricerca classico/terra-terra e solo log n con una ricerca binaria/dicotomica se l'array è ordinato . A voler aprire una parentesi, tra l'altro, non riesco ad accettare che su un array ordinato di 100 elementi, bastino solo 2 confronti nel caso medio: dopo due confronti hai individuato la "sezione dell'array" da 25 elementi che contiene il numero che cerchi: devi controllarne ancora molti ! bah! probabilmente non capisco bene queste cose: dovrò andare in fiducia e pensare a solo: "l'algoritmo XYZ funziona al meglio nel caso ABC".
Grazie in particolare a kurts !
Il pdf che segnali è uguale alle altre dispense che ho trovato e soprattutto al libro che presi tempo fa. Mi "consola" il fatto che stiamo parlando della stessa cosa.
Ripeto: mi preoccupavano troppo le notazioni matematiche, sia le formule che tutte le considerazioni tipo sull'algebra degli insiemi: dato che voglio farmi una cultura per ora "all'acqua di rosa" devo semplicemente ignorare tutti quegli aspetti .
Poi ancora, per MindWings :
---- QUOTO:
[I]Tutti gli algoritmi hanno determinate caratteristiche che li rendono utili sempre in determinati contesti d'uso, ad esempio il bubble-sort si potrebbe
utilizzare quando si conosce che la struttura dei dati presenta gia' un buon livello di ordinamento ed alcuni elementi non sono nella giusta locazione.
----
Esatto: una cosa leggera così : problema iniziale --> algoritmi applicabili (introduzione al funzionamento ed implementazione in codice o pseudo codice) --> casi d'uso ed efficienza
Il mio problema è che non sapendo quanti e quali sono, non sapevo da dove partire.
Ora, dopo le ricerche che sto facendo in questi giorni, mi sto rendendo conto che bene o male tutti i libri trattano sempre degli stessi e quindi non c'è niente che mi sfugge. Trovo sempre gli stessi argomenti tra cui Didive Et Impera , l'algoritmo goloso ed i cammini minimi. Per me è un buon inizio: ho la lista delle cose sulle quali devo documentarmi. Anche il sapere "cosa cercare/leggere" per me è/era un problema non sapendo dove partire. Ora sapendo che questa lista è bene o male definita va meglio.
Io sono un perito informatico che conosce la sintassi ed anche le "buone norme di programmazione" (vedi l'anima del libro di Steve McDonnel (!) ed i concetti base come l'object oriented con i suoi incapsulamento ed ereditarietà) ma per il funzionamento logico/mentale di una routine da scrivere nella mia mente c'è uno spazio vuoto. Non essendo andato all'università non ho alcuna conoscenza di come risolvere il problema: non so la soluzione stessa ma saprei scriverla. (ok, potete ridere !)
Tra l'altro sto notando che unendo le dispense varie che ho trovato su internet e, alla peggio, un giretto su wikipedia, posso anche risparmiarmi l'acquisto di un libro vero e proprio.
Ahh ! Grazie al cielo questi algoritmi sono sempre stati questi da anni e non ce ne sono stati di nuovi. Dal punto di vista di uno che era partito dalla sintassi/implementazione ed arriva dopo alla logica scappa quasi da ridere avendo la consolazione che la parte forse più dinamica e lunga da seguire [i vari linguaggi e le loro evoluzioni] è stata capita e "mancano 'solo'" nozioni che sono sempre state tali e che una volta apprese non occorre aggiornarsi! Se prendiamo la carriera di un programmatore senior, penso che abbia fatto più corsi di aggiornamento al momento di usare un nuovo linguaggio o se ci sono delle novità su questo rispetto ad altro.
Grazie per le dritte !
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.