Quali algoritmi vengono utilizzati più spesso?
Si prega di scrivere un singolo algoritmo per risposta, provare a mantenere la risposta breve (una o due righe).
Quali algoritmi vengono utilizzati più spesso?
Si prega di scrivere un singolo algoritmo per risposta, provare a mantenere la risposta breve (una o due righe).
Risposte:
Fast Fourier Transform è il problema algoritmico risolto più volte al giorno da sistemi informatici reali? Deve essere vicino. Quindi nominerei l' algoritmo Cooley-Tukey FFT .
Moltiplicazione.
Forse uno dei più antichi algoritmi non del tutto banali e un problema che viene risolto più spesso di FFT.
Algoritmi del percorso più breve Dijkstra e Bellman-Ford . Ci sono almeno 35.000 sistemi autonomi (AS) attivi su Internet a partire dal 2010. Ogni AS esegue un protocollo di routing con collegamento a stato (Dijkstra) o un protocollo di routing a distanza (Bellman-Ford). I router all'interno di un AS in genere aggiornano periodicamente le loro tabelle ogni pochi minuti, ad esempio 10.
Pertanto, il numero di esecuzioni Dijkstra e Bellman-Ford al giorno ammonta ad almeno 5 milioni. E questo è solo dai router.
Non abbiamo contato i calcoli del percorso più breve da Google Maps e simili che dovrebbero facilmente rappresentare 10 volte di più. Mezzo miliardo di esecuzioni al giorno non sono inverosimili.
Penso che l'algoritmo più usato sia Parity Check (o forse CRC o qualche tipo di codice di correzione degli errori), perché compaiono in ogni accesso RAM.
Algoritmo simplex : non è ancora competitivo con i migliori metodi di punti interni? In tal caso, deve essere usato molto.
-means. .
Più in generale, dovresti guardare i vincitori del premio Kanellakis per idee che hanno un peso teorico e pratico.
Profondità prima ricerca (DFS)
È difficile pensare ad algoritmi più ampiamente utilizzati rispetto a quelli nelle moderne implementazioni di TCP : ovvero prevenzione della congestione , ritrasmissione rapida . Anche se ciò dipende da come si determina cosa soddisfa i criteri per un algoritmo ...
Eliminazione gaussiana Questo è ancora usato nella pratica, giusto? In caso contrario, sostituire con qualsiasi cosa venga utilizzata più frequentemente per risolvere i sistemi lineari ...
SHA-1 (e funzioni hash in generale). Probabilmente ha battuto la maggior parte degli altri algoritmi in termini di numero di esecuzioni.
Questa risposta interpreta "più spesso" in termini di cicli effettivi della CPU.
Quando imparavo l'informatica negli anni '70, ricordo di aver letto che la stragrande maggioranza dei cicli di computer (leggi: mainframe) erano dedicati all'ordinamento. Le applicazioni aziendali richiedono un ampio ordinamento per analisi e reportistica. Non immagino che sia cambiato molto, ma ovviamente l'ascesa di altre app - e-mail, elaborazione testi, ecc. - deve aver modificato il mix. Questi tipi sono in genere tipi stabili (non Quicksort) a causa della necessità di ordinare le successioni dei campi per creare sottosorti.
A rigor di termini, tuttavia, l'algoritmo utilizzato più spesso è, senza dubbio, qualunque cosa venga eseguita dal processo di attesa del sistema Windows quando nient'altro sta succedendo ;-).
Sprase Matrix Vector Moltiplicare
... è il cavallo di battaglia computazionale dietro la soluzione di quasi tutti i sistemi lineari. Di conseguenza, viene eseguito ogni volta
La maggior parte dei FLOP su qualsiasi supercomputer o cluster vengono spesi all'interno di un mat-vec rado.
Il metodo di Newton. È usato per il calcolo di radici quadrate, per la divisione informatica. Può essere utilizzato per eseguire la programmazione lineare. Più in generale è il cavallo di battaglia dell'ottimizzazione (convessa). Può essere usato per risolvere equazioni differenziali in Fisica minimizzando l'azione / energia.
Hashing e alberi rosso-neri.
Sono già implementati in STL (hash_map, map) e ogni programmatore sa che un tale contenitore è incredibilmente conveniente ogni volta che si desidera memorizzare alcune informazioni indicizzate da un tipo di dati arbitrario.
Algoritmi di correzione degli errori, come Reed-Solomon.
http://en.wikipedia.org/wiki/Error-correcting_code#List_of_error-correcting_codes http://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction
Penso che DP sia usato "più spesso" di altri algoritmi citati finora nel sondaggio. Ne deduco "più spesso" nel senso di quanto spesso un programmatore non banale ha implementato un concetto di algoritmo nella vita reale, piuttosto che quante volte viene invocata una particolare implementazione di un algoritmo.
DP è versatile e ha molte facce. A volte l'ho usato in qualche modo inconsciamente e poi mi sono reso conto che stavo facendo DP.
Certo, ci sono cose che sono ancora più comuni del Dynamic Program, ma sono principalmente strutture di dati (array, elenco collegato, hash).
String Matching, utilizzato continuamente nel software applicativo e a livello di database.
Nel caso esatto, ci sono diversi algoritmi abbastanza coinvolti (KMP, Boyer-Moore) con alcuni che raggiungono il runtime atteso sublineare. Sono anche interessanti da studiare dal punto di vista del CS.
La corrispondenza approssimativa delle stringhe, ovvero gli allineamenti, è probabilmente ancora più interessante. Conosci le funzionalità di "correzione automatica"? Inoltre, le ricerche nei dati di stringa rumorosi (ad es. DNA) vengono eseguite utilizzando gli allineamenti.