Quali algoritmi e strutture dati dovrebbero assolutamente conoscere uno sviluppatore? [chiuso]


24

Voglio essere uno sviluppatore Java aziendale di successo. Con quali algoritmi e strutture dati dovrei essere esperto? Quali libri mi consiglieresti?

Per essere uno sviluppatore Java di successo, devo conoscere tutti gli algoritmi avanzati come quelli forniti in CLRS ?

Puoi suggerire un elenco degli argomenti che dovrei imparare in ordine decrescente di priorità?

Devo sapere:

  • Cercando?
  • Ordinamento?
  • Grafici / alberi?

eccetera?


1
@jonsca: ah marketing di affiliazione? ;)
Chankey Pathak,

No, beh, SE cambia il collegamento in quanto tale, ma ho appena pensato che non tutti conoscessero quelle iniziali :)
jonsca,

Risposte:


17

Cormen's Introduction to Algorithms è un buon libro per alcune basi teoriche di base.

Detto questo, la maggior parte degli algoritmi e delle strutture dati sono già stati codificati, testati e ottimizzati da altri, e non c'è motivo di implementarli nuovamente. Per essere uno sviluppatore Java di successo, è necessario conoscere a fondo The Collections Framework .


3
Tuttavia, è necessario conoscere i costi associati agli algoritmi: quella prima ricerca troverà il percorso più breve mentre si utilizza potenzialmente molto spazio, ad esempio.
Frank Shearar,

D'accordo, anche se ottenere lo spirito della grande notazione O va molto lontano.
Joonas Pulakka,

8

Se si desidera essere programmatori di qualsiasi tipo, è necessario comprendere in dettaglio tutte le strutture di dati di base (stack, code, array, elenchi collegati, hashtable, alberi, ecc.). Almeno abbastanza da poterli implementare da soli se ti ritrovassi in un mondo senza strutture di raccolta per fare il lavoro per te.

Per quanto riguarda gli algoritmi, mi sembra che siano più strumenti per i lavori, mentre le strutture dei dati sono elementi fondamentali. Non penso sia importante conoscere i dettagli su come implementare ogni algoritmo in cui potresti imbatterti. Quello che devi fare per essere in grado di fare è valutare quanto bene funzionerà un algoritmo per un determinato scopo. A volte la differenza tra la ricerca approfondita in primo luogo e l'ampiezza prima o il tipo di ordinamento che esegui sui tuoi dati può fare una grande differenza per le prestazioni o il successo generale del tuo codice, quindi sapere come giudicare ciò è molto importante.


0

Oltre alle altre risposte, vorrei solo aggiungere che lo studio degli algoritmi non è solo per conoscere tecniche ben note (che è ancora importante), ma anche per essere in grado di comprendere il processo di pensiero che va in escrezione una soluzione a un problema che si incontra nella vita reale, non necessariamente ben noto.


0

Sto imparando Java ora un giorno.

Voglio essere uno sviluppatore aziendale di successo. Quindi quali algoritmi e strutture dati dovrei essere ben preparato? Quali libri mi consiglieresti?

Per essere uno sviluppatore Java di successo, devo conoscere tutti gli algoritmi avanzati come quelli forniti in CLRS?

Potete suggerirmi un elenco degli argomenti che dovrei imparare in ordine decrescente di priorità?

Dimmi il nome di alcuni argomenti che devo conoscere. Ti piace la ricerca, l'ordinamento, i grafici, gli alberi ecc.?

È positivo che tu sia desideroso di estendere e migliorare le tue capacità di programmazione. È tuttavia importante non trattare gli algoritmi come un catalogo di cose da memorizzare. Quello che devi sapere per diventare un buon sviluppatore (in Java o qualsiasi altra cosa) è capire l'analisi algoritmica.

Lo impari imparando alcune strutture dati e algoritmi selezionati e imparando ad analizzare le loro prestazioni in termini di tempo e spazio (memoria). Ricerca, ordinamento, grafici, alberi, cumuli, pile e tutta quella roba buona. Questo dovrebbe anche seguire alcune basi della teoria del calcolo e della matematica discreta (anche se nel regno di Java non riusciamo mai ad usare direttamente questi due argomenti - i loro benefici sono indiretti).

Separare l'apprendimento di un linguaggio di programmazione (nel tuo caso Java) dall'apprendimento dell'analisi algoritmica (che è diversa dalla "memorizzazione" di algoritmi e strutture di dati).

"Algorithms in a Nutshell" di George T. Heineman, Gary Pollice e Stanley Selkow è un buon inizio. "Algorithms" di Sanjoy Dasgupta, Christos Papadimitriou e Umesh Vazirani è un altro buon libro di testo universitario.

La cosa migliore è prendere 9-12 corsi di credito in programmazione prima di frequentare un corso universitario di 3000 livelli in algoritmi. A parte questo, lo studio di sé con i due libri che ho citato potrebbe essere una buona alternativa (lo studio di sé potrebbe non essere adatto a tutti, però).

In bocca al lupo!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.