Esiste un'enciclopedia di algoritmi? [chiuso]


34

Esiste un'enciclopedia di algoritmi simili nello stile al Manuale di matematica? Sembra utile averne un gran numero disponibile in un unico posto. So che l'arte della programmazione informatica è considerata una buona fonte, ma non sembra tanto enciclopedica quanto istruttiva.

Nota del moderatore

Siamo alla ricerca di risposte lunghe che forniscano una spiegazione e un contesto. Non elencare solo un libro: spiega perché stai raccomandando un libro o una risorsa. Le risposte che non spiegano nulla verranno eliminate. Vedi Buono soggettivo, Cattivo soggettivo per ulteriori informazioni.



Un piccolo googling farebbe molto per rispondere a questa domanda. Per lo meno, fornirebbe un elenco di buoni candidati che è possibile utilizzare per porre una domanda più mirata.
Caleb,

Risposte:


41

Non sono sicuro se questo è quello che stai cercando, ma NIST ha il Dizionario di algoritmi e strutture dati . È un dizionario abbastanza completo per strutture di dati e algoritmi (doh) e di solito è un buon posto dove cercare quando trovo qualcosa di cui non avevo mai sentito parlare prima.


La tua risposta è praticamente esattamente quello che sto cercando. Punti extra per essere liberi.
Ingegnere mondiale il

La cosa divertente è che negli ultimi giorni il NIST DADS è stato chiuso fino a nuovo avviso a causa della chiusura del governo degli Stati Uniti! E poi, quando sentito migliaia di sviluppatori gridare contemporaneamente ...
haylem,

11

Il libro di Skiena è anche un buon riferimento: http://www.algorist.com/

Il libro tratta di tutto, dallo sfondo alle diverse aree problematiche (strutture di dati, ricerca / ordinamento, problemi dei grafici, combinazioni / permutazioni / euristica) e persino le questioni dei problemi P vs NP-completi.

La sezione particolarmente pertinente del libro a questa domanda è un catalogo di ~ 70-75 diversi algoritmi, i tipi di input generalmente richiesti, la descrizione generale del problema risolto da un particolare algoritmo ed esempi specifici di applicazioni (ad esempio, il la sezione sugli alberi dei suffissi illustra l'uso di try e la sua applicabilità alla sottostringa e alla ricerca). Ove possibile, l'autore identifica anche le implementazioni esistenti per vari linguaggi comuni (c, c ++, Java e alcuni altri).


È il più vicino a un'enciclopedia di algoritmi a cui riesco a pensare. Libro eccellente!
Charalambos Paschalides,

8

La struttura e l'interpretazione dei programmi per computer e l' arte della programmazione per computer sono i più vicini a ciò che cerchi.

SICP analizza strutture e algoritmi di dati comuni. Sebbene non sia enciclopedico, è piuttosto buono coprendo una vasta fascia di territorio in una quantità limitata di spazio.

Cosa si può dire di The Art of Computer Programming che non lo è già stato. Fai attenzione quando lo raccogli, potresti approfondirlo per un argomento specifico e ore dopo ti accorgi di aver letto un volume da una copertina all'altra. È un ottimo modo per portare davvero la tua programmazione al livello successivo.


5
SICP è un libro meraviglioso, ma non credo che sia un suggerimento ragionevole per chi cerca "un'enciclopedia di algoritmi". SICP non tenta di essere niente del genere. Inoltre, il PO ha scritto che ACP "non sembra tanto enciclopedico quanto istruttivo", quindi dovrebbe essere chiaro che la SICP non è ciò che sta cercando.
Caleb,

Ottimo libro, ma non enciclopedico.
haylem,

Abbastanza sicuro di aver detto che non è enciclopedico ma offre un buon giro di algoritmi. "Anche se non è enciclopedico, è abbastanza buono coprendo una vasta fascia di territorio in una quantità limitata di spazio." Sì, è quello che ho detto.
Michael Brown,

8

Cormen, Leiserson, Rivest, Stein - "Intoduction to Algorithms"

L'introduzione agli algoritmi, più comunemente noti come CLRS, è il manuale di algoritmi standard in un gran numero di università. Copre una gamma di algoritmi per una varietà di applicazioni, inclusi ordinamento, ricerca, teoria dei grafi e calcolo numerico di base. Include anche una discussione dettagliata della notazione Big O, Big Omega e Big Theta. Una critica comune è che in realtà non si prepara a progettare nuovi algoritmi, ma come un'enciclopedia o un dizionario di algoritmi, è più che adeguato.

Dovrei anche notare che CLRS fornisce anche consigli su quale algoritmo usare quando e non presenta semplicemente un indice generico di algoritmi e strutture di dati. È utile quando hai un compito che vuoi svolgere e vuoi consigli su come andare al meglio. Ci sono risorse migliori per quando sai come vuoi fare quello che stai facendo e hai solo bisogno di pseudo-codice.

- dai commenti di @quanticle, di seguito


4
Puoi espandere la tua risposta per includere ciò che riguarda questo libro soddisfa l'obiettivo di questa domanda?

2
L'introduzione agli algoritmi , più comunemente noti come CLRS, è il manuale di algoritmi standard in un gran numero di università. Copre una gamma di algoritmi per una varietà di applicazioni, inclusi ordinamento, ricerca, teoria dei grafi e calcolo numerico di base. Include anche una discussione dettagliata della notazione Big O, Big Omega e Big Theta. Una critica comune è che in realtà non si prepara a progettare nuovi algoritmi, ma come un'enciclopedia o un dizionario di algoritmi, è più che adeguato.
quanticle

1
Dovrei anche notare che CLRS fornisce anche consigli su quale algoritmo usare quando e non presenta semplicemente un indice generico di algoritmi e strutture di dati. È utile quando hai un compito che vuoi svolgere e vuoi consigli su come andare al meglio. Ci sono risorse migliori per quando sai come vuoi fare quello che stai facendo e hai solo bisogno di pseudo-codice.
quanticle

Suggerimento per Dmitry: basta copiare i commenti di @ quanticle nel corpo della risposta per rendere la risposta del 1000% più eccezionale.
no, il

5

Nella scuola di specializzazione in Fisica mi sono piaciute molto le Ricette Numeriche in C. Naturalmente non copre tutti gli algoritmi, ma fornisce eccellenti spiegazioni di molti che sono incredibilmente utili nelle scienze:

http://www.nr.com/

Il libro illustra come risolvere:

Equazioni lineari

  1. Equazioni lineari
  2. Interpolazione ed estrapolazione
  3. Integrazione di funzioni
  4. Valutazione delle funzioni
  5. Funzioni speciali tra cui funzione gamma, funzione beta, fattoriali
  6. Numeri casuali - inclusa una buona spiegazione di cosa significhi
  7. Algoritmi di ordinamento
  8. Trovare radici ed equazioni non lineari
  9. Minimizzazione e massimizzazione delle funzioni
  10. Eigensystems
  11. Trasformate veloci di Fourier
  12. FFT e analisi spettrale
  13. Descrizione statistica dei dati
  14. Modellazione di dati
  15. Integratoina di equazioni differenziali ordinarie
  16. Problemi al limite di due punti
  17. Equazioni integrali e teoria dei confini inversa
  18. Equazioni differenziali parziali
  19. Algoritmi "altri" come controlli CRC e compressione dei dati

Quindi è tutto molto matematico, utile per gli scienziati e per le persone che progettano motori fisici per i giochi. E non solo fornisce gli algoritmi, ma spiega i perché dietro di loro in modo che tu possa usarli correttamente. Non il tipico testo di codifica, ma esattamente ciò di cui hai bisogno quando ne hai bisogno.

Ci ho fatto molto affidamento quando ho usato il metodo downhill simplex in multidimensioni (una passeggiata dell'ameba) per l'analisi dei dati. Ci sono ancora segni di matita. Ah, bei tempi!


1
Puoi espandere la tua risposta per includere ciò che riguarda questo libro soddisfa l'obiettivo di questa domanda?

4

Se stai cercando una "enciclopedia di algoritmi", sarebbe difficile sbagliare con Encyclopedia of Algorithms . Non posso dire di averlo letto (a $ 399, è economico per un'enciclopedia ), ma il blurb sembra promettente:

L'Enciclopedia degli algoritmi fornisce una serie completa di soluzioni a importanti problemi algoritmici per studenti e ricercatori, comprese le soluzioni ad alto impatto dell'ultimo decennio.

Qualcuno ha già citato The Algorithm Design Manual di Steven Skiena , ma non credo che nessuno abbia ancora menzionato il sito web associato di Skiena, The Stony Brook Algorithm Repository . Dal sito web:

Questa pagina del WWW è destinata a fungere da raccolta completa di implementazioni di algoritmi per oltre settanta dei problemi fondamentali negli algoritmi combinatori.

Il libro è più di un semplice catalogo di algoritmi noti; è anche una sorta di tutorial (nel migliore senso della parola) su come decidere quale algoritmo utilizzare per adattarsi al meglio al proprio problema e situazione. Il repository, d'altra parte, è di natura più enciclopedica. Non contiene necessariamente molti dettagli su come implementare ogni algoritmo da solo, ma spiega cosa fa l'algoritmo e come funziona in generale, termini leggibili spesso presi dal libro e fornisce collegamenti a implementazioni effettive per ogni algoritmo.


2

Il codice Wiki Rosetta è una grande raccolta di implementazioni di algoritmi comuni in diverse lingue. Non è del tutto accademico, ma piuttosto istruttivo e divertente da sfogliare.

Con le loro stesse parole:

Il codice Rosetta è un sito di chrestomathy di programmazione . L'idea è quella di presentare soluzioni allo stesso compito in quante più lingue diverse possibile, per dimostrare come le lingue sono simili e diverse e per aiutare una persona con una base in un approccio a un problema nell'apprendimento di un altro.

Il suo principale vantaggio rispetto ad altre risorse (come il NIST Dictionary of Algorithms and Data Structures ) è che consente di esaminare diverse implementazioni per lingue diverse. Che può essere utile per vari scopi (confronto di espressività, verifica di fattibilità in una lingua o in un'altra, ecc ...).

Ad esempio, la pagina QuickSort fornisce (a partire dal 07-10-2013) almeno 89 implementazioni.


ti dispiacerebbe spiegare di più su ciò che fa e perché lo consigli come rispondere alla domanda posta? Le "risposte solo link" non sono del tutto benvenute allo Stack Exchange
moscerino del

@gnat: Di solito sarebbe d'accordo, ma in che modo è diverso che una risposta "solo libro-ref"? Inoltre, penso che la "raccolta di implementazioni di algoritmi comuni in diverse lingue" copra praticamente ciò che fa. È anche dettagliato (o poco dettagliato) come la risposta accettata, se guardi abbastanza vicino :)
haylem,

@gnat: comunque, aggiunto un po 'di più.
haylem,

@AnnaLear: scusa, penso che la tua modifica sia stata perfettamente giusta per mantenere il mio post breve e in linea, ma mi è sembrato opportuno rimettere il confronto riguardo alle modifiche su richiesta di Gnat.
haylem,

0

Mentre ci sono libri istruttivi eccellenti e senza tempo sull'argomento, difficilmente penso che troverai un'enciclopedia del genere.

  • Un'enciclopedia sulla matematica copre millenni di ricerca. Algoritmi d'altro canto sono a malapena studiati per un secolo (parlando su una scala più ampia). L'intero campo dell'informatica è a malapena compreso da chiunque e la maggior parte delle cose si sta ancora muovendo rapidamente. Se ci fosse un'enciclopedia in questo momento, suppongo che potresti buttare il 90% fuori dalla finestra in 10-20 anni. E del 10% del valore di conservazione più della metà era già stampato mezzo secolo fa. Le vaste parti del manuale di matematica saranno aggiornate tra cento anni.

  • La matematica è pura e autonoma. Questo non vale per "il campo degli algoritmi". Difficilmente può essere pensato come un campo, perché un campo di solito opera su uno spazio problematico ben definito, mentre gli algoritmi funzionano effettivamente solo all'interno di uno spazio di soluzione meno ben definito.
    Quindi, se si dovesse compilare un'enciclopedia sugli algoritmi, non è davvero chiaro cosa includere, se si vuole davvero che sia completo. Teoria dei grafi? Algebra lineare? Analisi numerica?

L'IMHO, in questo momento la migliore risorsa che svolge il ruolo di un'enciclopedia, è "Internet" (ecco). Il punto di un'enciclopedia è avere un repository di conoscenza indicizzato, completo e ricercabile (su alcuni argomenti). Personalmente trovo questa lista e questa lista abbastanza travolgenti. Anche in altre risposte sono stati collegati numerosi database di algoritmi eccellenti.

Quindi, anche se non puoi aspettarti lo stesso livello di qualità che ti aspetteresti da un'enciclopedia che riempie la tua libreria, ottieni il livello di tempestività richiesto per compensare la giovinezza del campo che vuoi conoscere.


0

Per quanto riguarda le fonti esistenti, penso che Wikipedia sia la cosa più vicina a ciò che stai cercando. In altre parole, potrebbe essere utile creare un "modello di algoritmo" più definito su Wikipedia per questo scopo, ma è qualcosa da discutere con gli editori di Wikipedia e non qui.

Una breve nota su The Art of Computer Programming : una volta completato, includerà un volume "di riepilogo" e sebbene ciò non ti aiuti ora, potrebbe essere approssimativamente quello che stai cercando. TAOCP è enciclopedico per ciò che copre, ma non è ancora completo e la personalità di Knuth è tale che non includerà le cose se non le ha approfondite ricerche.

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.