2009-08-14 11 views
36

Ho una buona idea di cosa sia Big-O, e conosco anche alcuni algoritmi di ordinamento di base, anche se, per qualche ragione, non mi sono mai sentito a mio agio, e continuo a dimenticarli. Ho programmato per 4 anni in Java, Python, C e C++; Sono stato un programmatore decente. Ora, voglio andare oltre l'apprendimento dei linguaggi di programmazione e iniziare gli algoritmi di apprendimento.Algorithm Design Manual è un buon libro per un principiante in algoritmi?

Ho provato "Introduzione agli algoritmi" di Carmen et al. ma la matematica è troppo densa per me (o, forse, sono troppo denso per la matematica in quel libro).

Ora, sto pianificando di riprendere il Manuale di progettazione dell'algoritmo di Steve Skiena. Lo consiglieresti per la mia situazione? Avete altri consigli se pensate che questo non sia quello per me?

Grazie per il vostro tempo!

+0

Molto simile a questa domanda: http://stackoverflow.com/questions/1249465/data-structures-and-algorithms-e-books/1249676#1249676 –

+5

+1 "o sono troppo denso per il Math" : D – batman

risposta

39

Consiglierei senz'altro il libro di Skiena. Hai iniziato a conoscere gli algoritmi, dovresti iniziare a imparare anche gli algoritmi.

Per chi curato questa risposta e sostituito l'ultima occorrenza della parola algoritmi con la parola matematica: Volevo dire algoritmi quando ho scritto questa risposta, ho ancora dire algoritmi, sostituendo la parola con la matematica modifica materialmente la risposta. Se pensi che la matematica sia ciò che l'OP dovrebbe imparare, pubblica la tua risposta in tal senso. Se ti sei preoccupato di leggere il commento qui sotto, capiresti perché ho scelto la parola algoritmi e non matematica.

+11

"Hai iniziato a conoscere gli algoritmi, dovresti iniziare a imparare anche gli algoritmi." - Sono io o questo non ha molto senso ?! –

+15

Per me aveva senso. È un altro modo di dire: "Invece di parlare di algoritmi, inizia ad impararlo". – Srikanth

+21

Imparare gli algoritmi significa imparare cose come complessità, iterazione, ricorsione, divisione e conquista, branch-and-bound, ecc. Algoritmi di apprendimento significa sapere quali quicksort, bubblesort, algoritmo di Dijsktra, algoritmo di Kruskal, ecc. –

-1

Qui ci sono un paio di raccomandazioni:

  • Aho & Ulman - "Algoritmi e dati Struttura"
  • Vhirt
  • Donald E. Knuth - "The Art of Computer Programming"
0

Se si desidera un approccio verso il basso per terra con un po 'di matematica gettato in prova Algorithms in a Nutshell - io per primo in realtà goduto lettura che è più che posso dire per il capolavoro Knuth. (Ok ci sono un paio di pagine in Knuth che erano abbastanza illuminante per essere chiamato divertente.)

1

Se lo può permettere (o il vostro datore di lavoro paga per esso), e si programmano in Java, io suggerirei: Data Structures and Algorithms in Java. Copre gli stessi argomenti che trovi in ​​altri libri, ma semplifica l'applicazione di una comprensione se sei abituato a programmare in Java. Ad esempio, i libri della struttura dati C++ di solito non impiegano molto tempo sugli hash, poiché le strutture basate sugli hash non sono comuni nella programmazione C++. In Java, tuttavia, gli hash sono molto comuni e ogni oggetto ha un metodo hashCode. Il libro combina un buon mix di teoria e pratica.

alt text http://ecx.images-amazon.com/images/I/51w6USIIpxL._SL160_.jpg

13

mi sento di raccomandare contro "algoritmo Manuale di Progettazione" per le finalità e per scrematura Cormen o Wikipedia, invece.

Dopo una breve introduzione agli argomenti algoritmici di base, le pagine 171-437 non ti insegnano realmente né su come funzionano gli algoritmi né su come progettarli, ma piuttosto su quali algoritmi esistono e dove trovare le loro implementazioni (a volte si riferisce a alle implementazioni che dovrai acquistare, come nella sezione Programmazione lineare)

Ad esempio ci sono 3 pagine sulla moltiplicazione della matrice, che forniscono alcuni esempi di ciò che è utile, presenta l'ingenuo O (N) e menzioniamo che esistono algoritmi migliori come Strassen's O (N 2.81) (senza descrivere l'algoritmo) e raccomandiamo di usare la libreria LAPACK per questo.

Quindi, se si vuole imparare come funzionano gli algoritmi, piuttosto che quali algoritmi esistono e dove trovare le loro implementazioni, io di nuovo, consiglio contro "Algorithm Design Manual".

+6

Non puoi "scremare" Cormen. – talonx

2

Ho acquistato Algorithm Design Manual di recente e sono andato solo dopo alcuni primi capitoli. È un grande libro ma secondo me (da quello che ho letto finora):

(1) non è meno denso di quello di Cormen.

(2) si tratta più di implementazioni pratiche di algoritmi che di algoritmi di apprendimento.

+3

È molto meno denso di Cormen. – batman

Problemi correlati