2009-07-06 2 views
5

Qual è il posto migliore o un link per imparare gli algoritmi in C? Come fai a sapere quando e dove utilizzare l'implementazione degli algoritmi semplicemente esaminando i problemi?Algoritmi in C

+0

[Ricette numeriche in C] (http://www.nr.com/)! La [versione 1992] (http://www.nrbook.com/a/bookcpdf.html) (2 ° ed.) È fantastica se non vuoi pagare la versione 2007. –

risposta

4

Algorithms in C di Sedgewick è un ottimo punto di partenza per le indagini. Una volta che hai familiarità con quali algoritmi sono disponibili e quali sono le caratteristiche delle prestazioni di ciascuno, sarai in grado di vedere dove utilizzare ciascuno di essi.

+0

Steve, Qualsiasi documento online che potrebbe essere migliore e più comprensibile –

5

Per un libro ragionevole (benché non perfetto) sull'implementazione di algoritmi comunemente utilizzati in C, provare il numero Algorithms in C di Sedgewick. Si noti che, come per qualsiasi argomento tecnico, è probabile che un libro cartaceo sia di gran lunga superiore a qualsiasi risorsa Web.

Come sapere quando utilizzare un algoritmo specifico, temo che non si possa fare esperienza.

+0

Cosa intendi per libro di carta Neil ?? –

+0

Nella mia risposta chiarirò. Vuol dire che avere un vero libro di solito è meglio che leggere online. – GManNickG

+0

Certo. Grazie mille a GMan e Neil. Voglio solo renderlo completo per i miei scopi di intervista. –

12

Gli algoritmi non sono necessariamente legati a un linguaggio specifico, solo per chiarire, quindi qualsiasi libro di algoritmi funzionerà alla grande finché si capirà che il concetto è la struttura/l'algoritmo dei dati.

Detto questo, questa sembra una buona scelta: Algorithms in C. Ho il C++ equivalent sul mio scaffale.

C'è anche un libro che sembra agnostico linguistico (correggimi se sbaglio) chiamato Data Structures & Algorithm's, anche se ho sentito che è un po 'datato, quindi ti perderai strutture più recenti.

Non dimenticare che Internet ha una pletora di informazioni available to you. Tuttavia, i libri sono solitamente migliori per questo genere di cose. Questo perché le risorse internet tendono a concentrarsi su una cosa alla volta. Ad esempio, è necessario capire che cos'è Big-O notation prima di poter capire cosa significa quando diciamo che una lista ha la rimozione di O (1) [tempo costante].

Un libro riguarderà queste cose nell'ordine corretto, ma una risorsa Internet si concentrerà sulla notazione Big-O o sulle strutture dati, ma spesso non collegherà facilmente le due.


Quando si tratta di usarlo, per lo più si effettua la connessione quando si tratta di ciò che si farà con i dati.

Per esempio, si potrebbe desiderare un vector (array) se avete solo bisogno elementi ordinato, ma se avete bisogno di elementi e la rimozione ordinato da qualsiasi luogo (ma può sacrificare ad accesso casuale), poi un list sarebbe più opportuno, a causa alla sua rimozione costante-tempo.

+0

GMan, Grazie mille –

+0

C'è anche questo libro chiamato "Algorithms" di sartaj sahni (coautori dimenticati). È un buon libro sull'analisi e sulla progettazione degli algoritmi. Copre ampiamente l'argomento, anche se potrebbe essere eccessivo per il colloquio. – xxxxxxxxxadfas

2

Come u so quando e dove utilizzare l'implementazione di algoritmi per solo esaminando i problemi

Si chiama "pattern matching", una volta che hai visto e risolto un sacco di problemi inizi a riconoscere cose comuni e riusci a riutilizzare le tue conoscenze precedenti.

A proposito, ti consiglierei prima di un buon libro solo sugli algoritmi prima di iniziare con gli algoritmi in C, che sono più difficili da implementare e più inclini agli errori rispetto al linguaggio di livello superiore, e una volta che sei molto fiducioso con procedure generali è possibile iniziare a modificare e ottimizzare in C.

0

The Algorithm Design Manual è la pena dare un'occhiata.

+0

Sì, vale davvero la pena dare un'occhiata, ma penso che non sia il posto migliore per cercare algoritmi in C. Ti aiuterà sicuramente a ottenere il quadro generale degli algoritmi e delle sue applicazioni in situazioni reali – nairdaen

2

Molte buone risorse hanno già stato nominato, quindi non li ripeterò qui.

Per quanto riguarda come si fa a sapere quale algoritmo utilizzare quando?

  • È necessario disporre di una grande scatola strumento abbastanza, che si ottiene sedendosi e slogging attraverso una lunga lista di base (e loro più esoterici) strutture dati e algoritmi. Dovresti cercare di ottenere tutti gli elementi di base, ma in realtà hai bisogno solo di un campione da quelli più specializzati.

  • è necessario capire quali sono a vostra disposizione (tempo, la complessità del codice, la memoria, unico contro più passaggi, sul posto contro la copia, stabile rispetto a tipi instabili, ecc fino alla nausea), e come compromessi gli algoritmi che studi fanno su ciascuno di questi. Ancora una volta, questo è solo un caso di molto studio. Big-O è un punto di partenza, ma non è la fine e tutto questo.

  • È necessario avere un'idea di capire quali sono le reali limiti si faccia quando sono presentati con un problema, e come esprimere questi in termini di compromessi algoritmo di cui sopra. Ciò richiede un certo grado di intuizione e in genere viene appresa dalla pratica nel tempo.

  • Vale la pena implementare alcune cose più di un modo mentre procedete, per imparare nel vostro intestino, cosa funziona e cosa no.

  • Vale la pena leggere il codice scritto da persone più esperte di te, per vedere come pensano.

Buona fortuna.

1

Ho letto Pointers on C di Kenneth Reek di recente.Pensavo di essere abbastanza esperto in C, ma questo libro mi ha dato alcune epifanie, nonostante fosse rivolto ai principianti. Gli esempi di codice sono cose di bellezza (ma non il codice più veloce su una CPU simil-x86). Fornisce buone implementazioni di molti degli algoritmi e delle strutture dati più comuni che sono in uso, con eccellenti spiegazioni sul perché sono implementati come sono (ea volte codice o suggerimenti per implementazioni alternative).

Sulla stessa pagina della domanda: motivi per la creazione di codice riutilizzabile in C (questo è quello che tutti noi vogliamo, non è vero?), C Interfaces and Implementations: Techniques for Creating Reusable Software, di David R. Hanson. Sono passati alcuni anni da quando l'ho letto, e non ho una copia per verificare quello che ricordo sia corretto, ma se ricordo bene si tratta di come creare una buona API C: s alle strutture dati e agli algoritmi, come oltre a dare l'esempio di implementazioni di alcuni degli algoritmi più comuni.

dell'argomento: Come ho scritto la maggior parte dei programmi e getta in C per uso privato, questo mi ha aiutato a sbarazzarsi di alcuni codifica le abitudini cattive, oltre ad essere un eccellente riferimento C: C: A reference Manual. Mi ricorda che dovrei comprarlo.

1

Un'esperienza necessaria per sapere quale set di algoritmi utilizzare per un particolare problema. La definizione di un obiettivo aiuterà. Velocità, memoria, robustezza, qualità della soluzione ... sono tutti fattori che determinano quali algoritmi utilizzare. Potremmo escogitare soluzioni diverse per lo stesso problema, date diverse serie di fattori e scenari.

0

Un metodo semplice per imparare gli algoritmi è utilizzare la pagina Wiki, che è dedicata ad alcuni algoritmi "classici" come algoritmi di ricerca o per ordinamento. Le costruzioni degli algoritmi si basano sulla capacità di utilizzare strutture di dati differenti, come le liste concatenate o C. Quindi, prima prova a implementare strutture di dati differenti come semplici elenchi collegati o alberi binari, e dopo provare a utilizzare in algoritmi diversi che sono correlati al reale problemi di vita.

+1

Che ne dici di collegarti ad un campione Pagine Wiki che hai trovato utili? – martijno