Quali sono gli algoritmi significativi per l'umanità negli ultimi decenni? [chiuso]


40

Quali algoritmi più importanti del mondo hanno contribuito maggiormente all'umanità negli ultimi decenni?

Ho pensato che questa fosse una buona conoscenza generale per uno sviluppatore da conoscere.

Aggiornamento:
se possibile, conservare la risposta a un algoritmo di programmazione specifico .
Vorrei ottenere un elenco di quelli più importanti, un solo algoritmo per risposta.
Ti preghiamo di considerare perché l'algoritmo è significativo e importante ...


2
Viene chiuso perché (finora) quattro persone lo considerano "non una vera domanda", probabilmente perché non abbiamo alcuna idea reale di cosa sia, in isolamento, un importante algoritmo di programmazione.
David Thornley,

2
Potrebbe essere fuori tema, ma è una vera domanda.
Jeremy,

1
+1 Buona domanda. Suggerisco di chiedere nuovamente questo messaggio su cstheory.stackexchange.com
Aleksandr Levchuk,

1
Perché rispondi alle tue domande? Parecchie volte?

2
Nessuna risposta sbagliata + numero illimitato di risposte + un commento inequivocabile che chiede "una per risposta" + autore pubblica diverse risposte = testo caso di una domanda non costruttiva. So che è vecchio, ma per favore chiudiamo questo.
Aaronaught

Risposte:


59

La crittografia della chiave pubblica / privata è davvero importante. Il commercio via Internet non sarebbe da nessuna parte come onnipresente senza di essa.


4
+1 e da aggiungere alla tua risposta, RSA.
sange,

C'è un intero gruppo di algoritmi e migliori pratiche coinvolti nella trasformazione di codici crittografici (come RSA) in soluzioni pratiche.
Donal Fellows,

37

L'algoritmo di Dijkstra

L'algoritmo esiste in tutti i router del mondo, per identificare il percorso migliore tra due nodi in una rete.


Sei sicuro? La maggior parte dei router o sa che il numero IP appartiene ad esso e lo inoltra alla macchina sulla rete locale, oppure conosce un router che conosce meglio - il router predefinito - nel qual caso il pacchetto passa a quel router. I grandi router potrebbero sapere che per l'intervallo di indirizzi IP X1-Y1 il pacchetto dovrebbe andare al router R1, per l'intervallo X2-Y2 il pacchetto dovrebbe andare al router R2, ecc. Non è coinvolto l'algoritmo Dijkstras.

2
@ Thorbjørn Ravn Andersen: Ma affinché il router sapesse quell'informazione, qualcuno ad un certo punto avrebbe dovuto usare l'algoritmo di Dijkstra. Sì, non viene utilizzato per il routing effettivo di ogni singolo pacchetto, ma viene utilizzato per determinare le tabelle di routing su grandi reti. +1.
Billy ONeal,

@Billy, dove ti aspetteresti esattamente che l'algoritmo Dijkstra sia effettivamente utilizzato e da chi?

@ Thorbjørn Ravn Andersen: Per quanto ne so, gioca un ruolo in OSPF, che è il fondamento della scelta dei percorsi corretti per le piccole reti. Le connessioni tra reti più grandi utilizzano BGP, che è più basato su criteri. Non sono sicuro che BGP usi o meno l'algoritmo di Dijkstra.
Billy ONeal,

3
@Billy, ma la mia obiezione era "esiste in OGNI router nel mondo". Questo è - secondo me - chiaramente sbagliato.

30

Trasformata di Fourier veloce (FFT)

La FFT è un metodo estremamente importante e ampiamente utilizzato per estrarre informazioni utili dai segnali campionati .

Una trasformata di Fourier veloce (FFT) è un algoritmo efficiente per calcolare la trasformata di Fourier discreta (DFT) e la sua inversa.


4
Una volta avevo un capo che, decenni prima, aveva scritto una serie di funzioni FFT per il PDP-11. Ha venduto un mazzo di schede perforate con quelle funzioni con un annuncio sul retro di Popular Science e ha fatto una banca piuttosto seria. Evidentemente aveva persone che usavano il suo codice per tutto, dall'elaborazione del segnale alla previsione del mercato azionario.
Dan Ray,

26

PageRank

PageRank è un algoritmo di analisi dei collegamenti, che prende il nome da Larry Page, utilizzato dal motore di ricerca di Google Internet che assegna una ponderazione numerica a ciascun elemento di un insieme di documenti ipertestuale, come il World Wide Web, con lo scopo di "misurare" il relativo importanza all'interno del set.


ahah, le nostre risposte erano distanti solo 2 secondi, scusa :)
Maksee,

nessun problema! :)
Amir Rezaei,

36
Non mi ero mai reso conto che prende il nome da Larry Page. Ho sempre pensato che il nome avesse qualcosa a che fare con le pagine Web.
JohnFx,

1
@JohnFx Whoa, non scherzo!
Marco C,

+1: ma può qualificarsi se l' algoritmo reale non è noto all'umanità? (IIRC Wikipedia è un'approssimazione)
Steven Evers,

22

Algoritmi di compressione dei dati

Nell'informatica e nella teoria dell'informazione, la compressione dei dati o la codifica sorgente è il processo di codifica delle informazioni utilizzando un numero inferiore di bit (o altre unità portanti di informazioni) rispetto a una rappresentazione non codificata, mediante l'uso di schemi di codifica specifici.


2
Esattamente e penso che l'algoritmo di compressione di base LZW possa essere considerato uno dei più belli algoritmi nell'ingegneria del software.
Mojuba,

"se possibile, dai il nome dell'algoritmo specifico"

14

Smith-Waterman (e Needleman-Wunsch)

Questo potrebbe essere troppo recuperato, quindi per favore commenta.

Smith-Waterman: The Sequence Alignment Algorithm

Penso che uno di questi esempi sia l'algoritmo Smith-Waterman e Needleman-Wunsch e le loro approssimazioni. Tutti essenzialmente stanno facendo la stessa cosa: allineano due o più stringhe (sequenze) . C'è un significato in Biologia. Quando le sequenze di DNA o proteine ​​sono allineate, vengono rivelate regioni di somiglianza strutturale, funzionale ed evolutiva.

BLAST come un discendente di Smith-Waterman

Un euristico che si avvicina a Smith-Waterman è BLAST. Permette di cercare sequenze di grandi database per somiglianza biologica. La popolarità di BLAST è davvero eccezionale: è molto probabilmente l'algoritmo più utilizzato in Biologia. Le aree più recenti in Bioinformatica e Genomica hanno approssimazioni più recenti e migliori degli algoritmi di Smith-Waterman / Needleman-Wunsch che sono più precisi di BLAST.

Assemblea del genoma come discendente di Smith-Waterman

Approssimazioni ad alto rendimento di Smith-Waterman e Needleman-Wunsch che sono più veloci di BLAST vengono utilizzate per assemblare i genomi dal sequenziamento del fucile da caccia - in cui il prodotto della macchina sequencer è un'enorme quantità che il DNA legge (miliardi) da parti arbitrarie del genoma che sono molto corto (da 50 a 100 nucleotidi). L'approccio è stato utilizzato per completare il Progetto genoma umano. Tutto il sequenziamento moderno viene eseguito in questo modo.

Allineamento di sequenze multiple un'estensione di Smith-Waterman

Esistono numerosi algoritmi di allineamento di sequenze multiple: si stanno approssimando una versione multi-sequenza di Smith-Waterman / Needleman-Wunsch. Sequenze multiple sono allineate come un gruppo contemporaneamente tra loro. È un problema molto più difficile della sua controparte a coppie, ma le soluzioni forniscono molte più informazioni sulla funzione biologica, sulla struttura e sulla storia evolutiva delle sequenze correlate.


Ciao e benvenuto ai programmatori! Potresti voler suddividere questa risposta in una per ciascuno degli algoritmi che stai presentando qui, poiché è consuetudine elencare domande come questa per facilitare il voto e l'ordinamento.
Yi Jiang,

@Yi Jiang: il mio pantheon! Ho letto male il tuo commento come "facilitare il vomito". : - /
dr Hannibal Lecter,

Qui discuto per un solo algoritmo: Smith-Waterman (e la sua variante Needleman-Wunsch)
Aleksandr Levchuk,

13

Siam ha nominato i seguenti algoritmi più importanti del 20 ° secolo:

1946: l'algoritmo Metropolis per Monte Carlo . Attraverso l'uso di processi casuali, questo algoritmo offre un modo efficiente di inciampare verso risposte a problemi troppo complicati per essere risolti esattamente.

1947: Metodo simplex per la programmazione lineare . Una soluzione elegante a un problema comune nella pianificazione e nel processo decisionale.

1950: metodo di iterazione dello spazio sotterraneo di Krylov . Una tecnica per risolvere rapidamente le equazioni lineari che abbondano nel calcolo scientifico.

1951: l'approccio decomposto ai calcoli con matrici . Una suite di tecniche per l'algebra lineare numerica.

1957: il compilatore per l'ottimizzazione di Fortran . Trasforma il codice di alto livello in un efficiente codice leggibile dal computer.

1959: algoritmo QR per autovalori di calcolo . Un'altra operazione di matrice cruciale resa rapida e pratica.

1962: algoritmi Quicksort per l'ordinamento . Per la gestione efficiente di database di grandi dimensioni.

1965: trasformata veloce di Fourier . Forse l'algoritmo più diffuso oggi in uso, scompone le forme d'onda (come il suono) in componenti periodiche.

1977: Rilevazione delle relazioni intere . Un metodo rapido per individuare semplici equazioni soddisfatte da raccolte di numeri apparentemente non correlati.

1987: metodo multipolare veloce . Una svolta nella gestione della complessità dei calcoli del corpo umano, applicata in problemi che vanno dalla meccanica celeste al ripiegamento delle proteine.

Personalmente vorrei sostituire Integer Relation Detection con PageRank .


1
A questa lista aggiungerei 2 libri, sebbene riguardassero maggiormente i "teoremi più importanti" del XX secolo: Five Golden Rules amazon.com/Five-Golden-Rules-20th-Century-Mathematics/dp/… , e Altre cinque regole d'oro. amazon.com/Five-More-Golden-Rules-20th-Century/dp/0471395285
Tangurena,

Le tecniche di Monte Carlo sono ancora utilizzate, più o meno nella forma originale. Questo vale anche per FFT e Quicksort. La maggior parte del resto semplicemente non mi è familiare. Il metodo Simplex per LP non si adatta affatto bene, rispetto ai metodi più moderni.
David Thornley,

9

PageRank lo adora o lo odia, ma influenza quotidianamente le decisioni e le azioni di milioni di persone in tutto il mondo.


9

Se dovessi elencare i primi 3 algoritmi più importanti in uso oggi nei computer, direi:

  1. Ricerca binaria
  2. quicksort
  3. L'algoritmo di Dijkstra

L' algoritmo di ricerca binaria viene utilizzato costantemente per restringere un elemento all'interno di un elenco ordinato, la maggior parte delle ricerche di indice utilizzerà qualcosa lungo queste linee ad un certo punto. Questo algoritmo fornisce una ricerca di un elenco ordinato in o (log n) time.

L' algoritmo Quicksort è finalmente riuscito a mettere l'ordinamento in O (n log n) caso medio e O (n ^ 2) nel caso peggiore. L'ordinamento è una delle attività di dati più comuni in un computer e una delle più costose, migliorare l'ordinamento medio dei casi è stato un enorme passo avanti in termini di efficienza.

L'algoritmo di Dijkstra, come è stato detto, produce un percorso più breve tra i punti all'interno di un grafico. Questo è ampiamente utilizzato per tutti i tipi di applicazioni di routing, soprattutto per quanto riguarda Internet stesso, garantendo che venga utilizzato il percorso più veloce attraverso la rete aggrovigliata di router interconnessi.


La ricerca binaria dovrebbe essere molto, molto vecchia ... Voglio dire, è stata formulata "in passato" ed era in un "decennio", ma sarebbe stata in circolazione per molte centinaia di anni.
Kirk Broadhurst,

@Kirk Broadhurst: Tuttavia, è un algoritmo incredibilmente importante per i computer. Indipendentemente da quando un essere umano l'ha concepito per la prima volta.
Orbling

8

Teorema di Bayes

Probabilmente ha contribuito maggiormente a mantenere la quantità di tempo sprecata nella mia posta in arrivo a un livello gestibile.

Certo, sono stato usato in numerose altre applicazioni utili, ma l'uccisione di SPAM è il mio preferito.


Ti darei il pollice in su, ma questo è un teorema (uno dei migliori) e non un algoritmo. Tuttavia molti algoritmi si basano su questo teorema.
Amir Rezaei,

Stavo solo cercando di raggrupparli tutti in una categoria generale di algoritmi, ma tecnicamente hai ragione.
JohnFx,

@AmirR Tecnicamente corretto, il miglior tipo di corretto!
Marco C,

7

timsort

Questo è l'algoritmo di ordinamento ora utilizzato in Python , Java 7 e Android

Fondamentalmente:

  • O (N log N) nel caso peggiore (non degenera)
  • O (N) per la lista quasi ordinata (in effetti N-1esattamente sulla lista già ordinata)

E la bellezza di esso? È stabile ! E quindi adatto per l'ordinamento multipass secondo vari criteri.

A proposito, se qualcuno ha un'implementazione C ++ ottimizzata a portata di mano ...


Non può essere Θ (NlogN), in quanto ha un comportamento migliore in un elenco già ordinato. O (NlogN) è la notazione giusta qui.
Donal Fellows,

Mentre questo è bello, non lo definirei sicuramente "uno dei più grandi algoritmi inventati negli ultimi decenni". Mergesort, su cui si basa Timsort, è il vero risultato.
Billy ONeal,

6

Tutti gli algoritmi utilizzati per risolvere il problema della visibilità nell'animazione al computer 3D mi sembrano cruciali.

Algoritmo del pittore

L'algoritmo del pittore, noto anche come riempimento prioritario, è una delle soluzioni più semplici al problema della visibilità nella computer grafica 3D. Quando si proietta una scena 3D su un piano 2D, ad un certo punto è necessario decidere quali poligoni sono visibili e quali sono nascosti.

Z-buffer

Nella computer grafica, il buffering z è la gestione delle coordinate di profondità dell'immagine in grafica tridimensionale (3D), di solito eseguita in hardware, a volte in software. È una soluzione al problema della visibilità, che è il problema di decidere quali elementi di una scena renderizzata sono visibili e quali sono nascosti. L'algoritmo del pittore è un'altra soluzione comune che, sebbene meno efficiente, può anche gestire elementi di scena non opachi. Il buffering Z è anche noto come buffering di profondità.

Determinazione della superficie nascosta

Nella computer grafica 3D, la determinazione della superficie nascosta (nota anche come rimozione della superficie nascosta (HSR), l'abbattimento dell'occlusione (OC) o la determinazione della superficie visibile (VSD) è il processo utilizzato per determinare quali superfici e parti di superfici non sono visibili da un certo punto di vista Un algoritmo di determinazione della superficie nascosta è una soluzione al problema della visibilità, che è stato uno dei primi maggiori problemi nel campo della computer grafica 3D. Il processo di determinazione della superficie nascosta viene talvolta chiamato nascondersi e tale algoritmo viene talvolta chiamato nasconditore L'analogo per il rendering della linea è la rimozione della linea nascosta È necessaria la determinazione della superficie nascosta per renderizzare correttamente un'immagine, in modo che non si possa guardare attraverso i muri nella realtà virtuale, per esempio.


3

Qualunque sia necessario per risolvere il problema attuale.


1
Questo è quello che stavo per dire. Ora non devo dirlo.
Robert Harvey,

Qualunque non sia una buona risposta. Qualunque algoritmo non sia significativo per l'umanità.
Amir Rezaei,

6
Questo non è un algoritmo specifico e anche se fosse probabilmente non è importante per l'umanità.
Jason,

3

Soundex è un algoritmo fonetico per indicizzare i nomi in base al suono.


In che modo soundex ha contribuito all'umanità?
Barjak,

Ha migliorato la capacità di usare il linguaggio naturale, correggendo le differenze minori di ortografia e pronuncia regionale.
sal

3

Algoritmo di Viterbi

Originariamente utilizzato per decodificare i codici convoluzionali di correzione degli errori, ora viene utilizzato per risolvere un'ampia classe di problemi di riconoscimento (che vanno dal riconoscimento vocale alla bioinformatica). Puoi trovarlo in diversi dispositivi di comunicazione e archiviazione.


L'algoritmo +1 Viterbi è molto importante. @ [Giacomo Verticale] forse dovresti menzionare la sua relazione con Hidden Markov Models (HMMs).
Aleksandr Levchuk,

3

MP3

Sebbene sia un termine più generale di un algoritmo specifico, menzionerei MP3 come aggregazione dei diversi algoritmi e tecniche che lavorano in collaborazione per generare questo formato audio con perdita di dati.

È stato sicuramente molto significativo nell '"era digitale".


3

Integrazione numerica di Runge-Kutta . Senza di essa molte simulazioni non sarebbero possibili. Nessun programma spaziale, nessuna energia nucleare, nessuna balistica, nessuna simulazione sportiva, nessun giubbotto antiproiettile, nessuna simulazione di crash test, nessuna simulazione di movimento del fluido, nessuna simulazione di interazione chimica, nessun edificio antisismico ... l'elenco potrebbe continuare.


+1 @ j172 Conosco questo, è molto utile nell'analisi numerica e nelle simulazioni.
Amir Rezaei,

2

Algoritmo di ordinamento.


5
questo non è un algoritmo specifico, però ...
Justin L.

Sì, cosa ha detto Justin L., quale algoritmo di ordinamento?
Dott. Annibale Lecter,

L '"algoritmo specifico" dovrebbe essere mergesort, il primo di tutti i tipi.
Billy ONeal,

2
@dr Hannibal Lecter: Bubble Sicuramente. Tutto il resto è ottimizzazione prematura.
Peter

2

1
Che schifo! Spero sicuramente che le persone non stiano usando Quicksort nel codice di produzione. Ancora più importante, mergesort è arrivato prima ed è quasi altrettanto veloce. (Spero che la maggior parte del codice usi qualche variante su Introsort)
Billy ONeal,

2
@Billy ONeal, l'ordinamento in .NET è tutto Quicksort. Pertanto, qualsiasi programma che chiama List <T> .Sort () utilizza quicksort in produzione.
Steven Evers,

@SnOrfus: hai la prova di quella dichiarazione? Per la mia comprensione Elenco <t> .Sort è basato su introsort.
Billy ONeal,

3
@Billy ONeal: dritto da MSDN - msdn.microsoft.com/en-us/library/b0zbh7b6.aspx
ysolik

3
@ Thorbjørn: non è ancora un buon algoritmo per tutti gli usi. Introsort è quicksort, ma passa all'heap sort se va oltre una determinata profondità di ricorsione. Ciò consente di avere le buone caratteristiche di quicksort ma evita sempre i casi patologici, anche se l'algoritmo sceglie pivot errati.
Billy ONeal,

1

Ordinamento inserzione

Facile da implementare, molto veloce su piccoli elenchi e utilizzato nelle implementazioni Unisci ordinamento / Quicksort per velocizzarli. È stabile e opera in O (n) su elenchi ordinati (se ordinati in ordine crescente).



1

Filtro Kalman

Viene ampiamente utilizzato nella navigazione, nel tracciamento dei target (per quasi tutti i sensori: radar, sonar, FLIR, ladar). Un libro di testo mostra un'applicazione in un controller di unità disco. I sistemi di controllo robotizzati utilizzano spesso i filtri Kalman.


0

Lingua parlata e scritta.

Sono attualmente uno degli algoritmi più efficienti per trasferire le conoscenze da una cosa all'altra. Senza linguaggio, la società civile non potrebbe esistere e le informazioni non potrebbero essere trasmesse.


5
-1: gli algoritmi possono essere espressi usando il linguaggio naturale, ma i linguaggi naturali non sono algoritmi.
Steven Evers,

2
Diresti che gli algoritmi di compressione non sono algoritmi allora? Tutto il linguaggio fa è comprimere le informazioni che vengono trasmesse da una fonte a una ricettiva. Ha regole specifiche che devono essere seguite (grammatica) proprio come qualsiasi altro algoritmo, e prende un input (le tue esperienze) e produce un output diverso (conoscenza). Non riesco a vedere come non si possa considerare la lingua un algoritmo.
Malfist,

Fallisce tutte le definizioni standard dell'algoritmo su molti fronti.
James Reinstate Monica Polk il

0

Il mucchio struttura dei dati e suoi algoritmi associati per la costruzione e la manutenzione mucchio.

E mostra un po 'di rispetto per quicksort. Anche se non è sempre il tipo di scelta, è uno degli algoritmi fondamentali nello sviluppo storico dell'informatica ed è un ottimo veicolo per comprendere la ricorsione e l'analisi dell'algoritmo. È bellissimo e sì, lo adoro.


0

Algoritmi di indicizzazione come B-tree, B + -tree, hash index, binary tree index ecc. Per indicizzare enormi quantità di dati.


0

MapReduce come un modo per dividere, conquistare e parallelizzare l'elaborazione di grandi set di dati.


-1

Brute Force Algorithm!

Molte persone sottovalutano questo algoritmo di forza bruta. In realtà è principalmente usato per risolvere problemi senza schemi. Lo adoro molto!


5
Questo non è un algoritmo. È una specie di algoritmi.
Adam Lear

È un metodo per interrompere la crittografia.
Amir Rezaei,

Penso che sia anche classificato come un algoritmo. "Inizia da x a y fai qualcosa." <--- algoritmo giusto?
xport,

Un algoritmo è una serie di passaggi per eseguire un'attività specifica . Questo non è specifico.
Anto

-5

Bubble Sort!

L'ordinamento delle bolle non è così grave come Bogosort . Ecco perché voto per l'ordinamento Bubble.


1
Ti preghiamo di considerare perché l'algoritmo è significativo e importante, le persone sembrano non essere d'accordo sul perché Bubble Sort potrebbe essere significativo e importante.
Tamara Wijsman,

5
Perfino Barack Obama sa che la scelta delle bolle è la strada sbagliata .
Joey Adams,

@TomWij, @Joey: vedi il mio aggiornamento.
xport,
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.