Quels sont les algorithmes significatifs pour l’humanité au cours des dernières décennies? [fermé]

40

Quels algorithmes les plus importants au monde ont le plus contribué à l’humanité au cours des dernières décennies?

Je pensais que c'était une bonne connaissance générale pour un développeur.

Mise à jour:
Si possible, conservez la réponse à un algorithme de programmation spécifique .
Je voudrais obtenir une liste des plus importants, un seul algorithme par réponse.
S'il vous plaît envisager d'indiquer pourquoi l'algorithme est significatif et important ...

Amir Rezaei
la source
2
Il est fermé parce que (jusqu'à présent) quatre personnes considèrent que ce n'est "pas une vraie question", probablement parce que nous n'avons aucune idée réelle de ce qu'est, de manière isolée, un algorithme de programmation important.
David Thornley
2
C'est peut-être hors sujet, mais c'est une vraie question.
Jeremy
1
+1 bonne question. Je suggère de demander à nouveau sur cstheory.stackexchange.com
Aleksandr Levchuk
1
Pourquoi répondez-vous à vos propres questions? Plusieurs fois?
2
Pas de mauvaises réponses + nombre illimité de réponses + un commentaire sans ambiguïté demandant "un par réponse" + l'auteur a posté plusieurs de ses propres réponses = cas d'école d'une question non constructive. Je sais que c'est vieux, mais fermons s'il vous plaît ceci.
Aaronaught

Réponses:

59

Le chiffrement à clé publique / privée est extrêmement important. Le commerce sur Internet ne serait nulle part aussi omniprésent sans cela.

Jeremy
la source
4
+1 et à ajouter à votre réponse, RSA.
Samedi
Il existe tout un groupe d’algorithmes et de meilleures pratiques pour transformer des codes cryptographiques (tels que RSA) en solutions pratiques.
Donal Fellows
37

Algorithme de Dijkstra

L'algorithme existe dans chaque routeur du monde pour identifier le meilleur itinéraire entre deux nœuds d'un réseau.

Amir Rezaei
la source
Êtes-vous sûr? La plupart des routeurs savent soit que le numéro IP lui appartient et le transmettent à la machine sur le réseau local, soit connaissent un routeur qui en sait plus - le routeur par défaut - auquel cas le paquet est envoyé à ce routeur. Les grands routeurs savent peut-être que pour la plage d'adresses IP X1-Y1, le paquet doit aller au routeur R1, pour la plage X2-Y2 au paquet R2, etc. Aucun algorithme de Dijkstras n'est impliqué dans cette opération.
2
@ Thorbjørn Ravn Andersen: Mais pour que le routeur connaisse cette information, il faudrait à un moment donné utiliser un algorithme de Dijkstra. Oui, il n'est pas utilisé pour router chaque paquet individuellement, mais pour déterminer les tables de routage sur les grands réseaux. +1
Billy ONeal
@Billy, où pensez-vous que l'algorithme de Dijkstra est réellement utilisé et par qui?
@ Thorbjørn Ravn Andersen: À ma connaissance, il joue un rôle dans OSPF, qui constitue le fondement du choix des itinéraires appropriés pour les petits réseaux. Les connexions entre grands réseaux utilisent BGP, qui est davantage basé sur des règles. Je ne sais pas si BGP utilise l'algorithme de Dijkstra ou non.
Billy ONeal
3
@Billy, mais mon objection était de "exister dans TOUS les routeurs du monde". C'est - à mon avis - manifestement faux.
30

Transformée de Fourier rapide (FFT)

La FFT est une méthode extrêmement importante et largement utilisée pour extraire des informations utiles à partir de signaux échantillonnés .

Une transformée de Fourier rapide (FFT) est un algorithme efficace pour calculer la transformée de Fourier discrète (DFT) et son inverse.

Amir Rezaei
la source
4
J'ai eu une fois un patron qui, des décennies plus tôt, avait écrit une série de fonctions FFT pour le PDP-11. Il vendit un jeu de cartes perforées avec ces fonctions avec une publicité à l'arrière de Popular Science et fit une banque assez sérieuse. Évidemment, il avait des gens qui utilisaient son code pour tout, du traitement du signal à la prévision boursière.
Dan Ray
26

Classement

PageRank est un algorithme d'analyse des liens, nommé d'après Larry Page, utilisé par le moteur de recherche Internet de Google. Il attribue une pondération numérique à chaque élément d'un ensemble de documents comportant des hyperliens, tels que le World Wide Web, dans le but de "mesurer" sa valeur relative. importance dans l'ensemble.

Amir Rezaei
la source
haha, nos réponses étaient à seulement 2 secondes d'intervalle, désolé :)
Maksee
aucun problème du tout! :)
Amir Rezaei
36
Je n'avais jamais réalisé que son nom venait de Larry Page. J'ai toujours supposé que le nom avait quelque chose à voir avec les pages Web.
JohnFx
1
@ JohnFx Whoa, sans blague!
Mark C
+1: mais peut-on qualifier si l' algorithme actuel n'est pas connu de l'humanité? (IIRC wikipedia's est une approximation)
Steven Evers
22

Algorithmes de compression de données

En informatique et en théorie de l'information, la compression de données ou le codage de source est le processus de codage de l'information utilisant moins de bits (ou d'autres unités portant de l'information) qu'une représentation non codée n'en utiliserait par le biais de schémas de codage spécifiques.

Amir Rezaei
la source
2
Exactement et je pense que l’algorithme de compression de base LZW peut être considéré comme l’un des plus beaux algorithmes du génie logiciel.
mojuba
"Si possible, donnez le nom de l'algorithme spécifique"
14

Smith-Waterman (et Needleman-Wunsch)

C'est peut-être trop exagéré, alors veuillez commenter.

Smith-Waterman: l'algorithme d'alignement de séquence

Je pense que l'un de ces exemples est constitué par les algorithmes de Smith-Waterman et de Needleman-Wunsch et leurs approximations. Ils font tous essentiellement la même chose: ils alignent deux chaînes ou plus (séquences) . Il y a une signification en biologie. Lorsque les séquences d'ADN ou de protéines sont alignées, des régions de similarité structurelle, fonctionnelle et évolutive sont révélées.

BLAST en tant que descendant de Smith-Waterman

Une heuristique qui se rapproche de Smith-Waterman est BLAST. Il permet de rechercher des séquences de grandes bases de données pour la similarité biologique. La popularité de BLAST est vraiment formidable - il s'agit très probablement de l'algorithme le plus utilisé en biologie. Les domaines plus récents de la bioinformatique et de la génomique ont des approximations plus récentes et plus précises des algorithmes de Smith-Waterman / Needleman-Wunsch qui sont plus précises que BLAST.

Assemblée du génome en tant que descendant de Smith-Waterman

Des approximations à haut débit de Smith-Waterman et Needleman-Wunsch, plus rapides que BLAST, sont utilisées pour assembler les génomes à partir de séquences séquentielles - où le produit du séquenceur est une quantité énorme d'ADN lu (des milliards) à partir de parties arbitraires du génome qui sont très court (50 à 100 nucléotides). Cette approche a été utilisée pour mener à bien le projet du génome humain. Tout le séquençage moderne se fait de cette façon.

Alignement de séquences multiples une extension de Smith-Waterman

Il existe de nombreux algorithmes d'alignement de séquences multiples - ils se rapprochent d'une version à séquences multiples du Smith-Waterman / Needleman-Wunsch. Plusieurs séquences sont alignées simultanément en tant que groupe. Il s'agit d'un problème beaucoup plus complexe que son homologue par paires, mais les solutions fournissent beaucoup plus d'informations sur la fonction biologique, la structure et l'historique de l'évolution des séquences associées.

Aleksandr Levchuk
la source
Bonjour et bienvenue aux programmeurs! Vous voudrez peut-être scinder cette réponse en un pour chacun des algorithmes que vous présentez ici, comme il est d'usage pour les questions de liste comme celle-ci, afin de faciliter le vote et le tri.
Yi Jiang
@Yi Jiang: Mon panthéon! J'ai mal interprété votre commentaire comme "faciliter les vomissements". : - /
dr Hannibal Lecter
Ici, je ne discute que pour un seul algorithme - Smith-Waterman (et sa variante Needleman-Wunsch)
Aleksandr Levchuk
13

Siam a cité comme suit les algorithmes les plus importants du 20ème siècle:

1946: L'algorithme Metropolis pour Monte Carlo . Grâce à l'utilisation de processus aléatoires, cet algorithme offre un moyen efficace de trébucher vers des réponses à des problèmes trop compliqués à résoudre avec précision.

1947: Méthode simplex pour la programmation linéaire . Une solution élégante à un problème commun de planification et de prise de décision.

1950: méthode d'itération de sous-espace de Krylov . Une technique pour résoudre rapidement les équations linéaires qui abondent dans le calcul scientifique.

1951: L'approche décompositive des calculs matriciels . Une suite de techniques pour l'algèbre linéaire numérique.

1957: Le compilateur d'optimisation Fortran . Transforme le code de haut niveau en un code lisible par ordinateur efficace.

1959: Algorithme QR pour calculer des valeurs propres . Une autre opération cruciale de la matrice rendue rapide et pratique.

1962: Algorithmes Quicksort pour le tri . Pour le traitement efficace de grandes bases de données.

1965: Transformation de Fourier rapide . Peut-être l’algorithme le plus répandu aujourd’hui, il décompose les formes d’ondes (comme le son) en composantes périodiques.

1977: Détection de relation entière . Une méthode rapide pour repérer des équations simples satisfaites par des collections de nombres apparemment sans rapport.

1987: Méthode multipolaire rapide . Une avancée dans la gestion de la complexité des calculs à n corps, appliquée à des problèmes allant de la mécanique céleste au repliement des protéines.

Personnellement, je remplacerais la détection de relation entier par PageRank .

Jason
la source
1
J'ajouterais à cette liste deux livres, bien qu'ils portaient davantage sur les "théorèmes les plus importants" du XXe siècle: Cinq règles d'or amazon.com/Five-Golden-Rules-20th-Century-Mathematics/dp/… , et Cinq autres règles d'or. amazon.fr/Five-More-Golden-Rules-20th-Century/dp/0471395285
Tangurena
Les techniques de Monte Carlo sont toujours utilisées, plus ou moins dans leur forme originale. Ceci est également vrai de la FFT et de Quicksort. La plupart du reste, je ne suis tout simplement pas au courant. La méthode Simplex pour LP ne s’adapte pas du tout aux méthodes modernes.
David Thornley
9

PageRank, aimez-le ou détestez-le, mais cela affecte les décisions et les actions de millions de personnes dans le monde entier googlant quotidiennement.

Maksee
la source
9

Si je devais énumérer les 3 algorithmes les plus importants utilisés actuellement dans les ordinateurs, je dirais:

  1. Recherche binaire
  2. Tri rapide
  3. Algorithme de Dijkstra

L' algorithme de recherche binaire est utilisé en permanence pour réduire un élément dans une liste triée, la plupart des recherches d'index utilisent quelque chose le long de ces lignes à un moment donné. Cet algorithme fournit une recherche dans une liste ordonnée en o (log n) time.

L’ algorithme Quicksort a finalement réussi à trier jusqu’à O (n log n) cas moyen et à O (n ^ 2) cas pire. Le tri est l’une des tâches de données les plus courantes sur un ordinateur et l’une des plus coûteuses; l’amélioration du tri moyen des cas représentait un progrès considérable en termes d’efficacité.

L'algorithme de Dijkstra, comme on l'a dit, produit le chemin le plus court entre les points d'un graphique. Ceci est largement utilisé pour toutes sortes d'applications de routage, le plus souvent en ce qui concerne Internet lui-même, garantissant que le chemin le plus rapide à travers le réseau enchevêtré de routeurs interconnectés est utilisé.

Orbite
la source
La recherche binaire devrait être très très ancienne ... Je veux dire, elle a été formulée "dans le passé" et cela remonte à "une décennie", mais elle aurait existé pendant des centaines d'années.
Kirk Broadhurst
@Kirk Broadhurst: Néanmoins, il s'agit d'un algorithme extrêmement important pour les ordinateurs. Peu importe quand un humain l'a conçu pour la première fois.
Orbling le
8

Théorème de Bayes

C'est probablement elle qui a le plus contribué à maintenir à un niveau gérable le nombre de spams qui font perdre du temps dans ma boîte de réception.

Bien sûr, je suis il a été utilisé dans de nombreuses autres applications intéressantes, mais la suppression de SPAM est mon préféré.

JohnFx
la source
Je vous donnerais un coup de pouce, mais ceci est un théorème (un des meilleurs) et non un algorithme. Cependant, de nombreux algorithmes sont basés sur ce théorème.
Amir Rezaei,
J'essayais simplement de les regrouper dans une catégorie générale d'algorithmes, mais techniquement, vous avez raison.
JohnFx
@AmirR Techniquement correct, le meilleur type de correct!
Mark C
7

TimSort

C'est l'algorithme de tri utilisé à présent dans Python , Java 7 et Android

Fondamentalement:

  • O (N log N) dans le pire des cas (ne dégénère pas)
  • O (N) pour une liste presque triée (en fait N-1exactement sur la liste déjà triée)

Et la beauté de ça? C'est stable ! Et donc adapté au tri multipasse selon différents critères.

À propos, si quelqu'un a une implémentation C ++ optimisée sous la main ...

Matthieu M.
la source
Ce ne peut pas être (NlogN), car il a ce meilleur comportement sur une liste déjà triée. O (NlogN) est la bonne notation ici.
Donal Fellows
Bien que celui-ci soit agréable, je ne l'appellerais certainement pas "l'un des plus grands algorithmes inventés au cours des dernières décennies". Mergesort, sur lequel Timsort est basé, est le véritable exploit.
Billy Oneal
6

Tous les algorithmes utilisés pour résoudre le problème de visibilité dans l'animation par ordinateur 3D me semblent essentiels.

Algorithme du peintre

L'algorithme du peintre, également appelé remplissage prioritaire, est l'une des solutions les plus simples au problème de visibilité en infographie 3D. Lors de la projection d'une scène 3D sur un plan 2D, il est nécessaire à un moment donné de déterminer quels polygones sont visibles et ceux qui sont masqués.

Z-buffering

En infographie, la mise en tampon z consiste à gérer les coordonnées de profondeur d'image dans des graphiques tridimensionnels (3-D), généralement effectuées de manière matérielle, parfois sous forme de logiciel. C'est une solution au problème de visibilité, qui consiste à décider quels éléments d'une scène rendue sont visibles et lesquels sont cachés. L'algorithme du peintre est une autre solution courante qui, bien que moins efficace, peut également gérer des éléments de scène non opaques. La mise en mémoire tampon Z est également appelée mémoire de profondeur.

Détermination de la surface cachée

En infographie 3D, la détermination de la surface cachée (aussi appelée élimination de la surface cachée, élimination d’occlusion (OC) ou détermination de la surface visible) est le processus utilisé pour déterminer quelles surfaces et parties de surface ne sont pas visibles d’un certain point de vue. Un algorithme de détermination de la surface cachée est une solution au problème de visibilité, qui était l’un des premiers problèmes majeurs dans le domaine de l’infographie 3D. Le processus de détermination de la surface cachée est parfois appelé masquage, et un tel algorithme est parfois appelé masqueur L’analogue pour le rendu de ligne est l’élimination de ligne cachée.

Dane
la source
3

Quel que soit ce dont vous avez besoin pour résoudre votre problème actuel.

Mipadi
la source
1
C'est ce que j'allais dire. Maintenant, je n'ai pas à le dire.
Robert Harvey
Ce qui n'est pas une bonne réponse. Quels que soient les algorithmes qui ne sont pas significatifs pour l’humanité.
Amir Rezaei,
6
Ce n'est pas un algorithme spécifique et même s'il était, il n'est probablement pas important pour l'homme.
Jason
3

Soundex est un algorithme phonétique permettant d'indexer des noms par son.

sal
la source
Comment Soundex a-t-il contribué à l'humanité?
Barjak
Il a amélioré la capacité à utiliser le langage naturel, corrigeant les différences mineures d'orthographe et de prononciation.
Sal
3

Algorithme de Viterbi

Utilisé à l'origine pour décoder les codes convolutionnels corrigeant les erreurs, il est maintenant utilisé pour résoudre un large éventail de problèmes de reconnaissance (allant de la reconnaissance vocale à la bioinformatique). Vous pouvez le trouver dans plusieurs périphériques de communication et de stockage.

Giacomo Verticale
la source
+1 algorithme de Viterbi est très important. @ [Giacomo Verticale] peut-être devriez-vous mentionner sa relation avec les modèles de Markov cachés (HMM).
Aleksandr Levchuk
3

MP3

Bien que ce soit un terme plus général qu’un algorithme spécifique, je mentionnerais MP3 comme agrégation des différents algorithmes et techniques qui fonctionnent en coopération pour générer ce format audio avec pertes.

Cela a sûrement été très significatif à "l'ère numérique".

Jens Hoffmann
la source
3

Intégration numérique Runge-Kutta . Sans cela, de nombreuses simulations ne seraient pas possibles. Pas de programme spatial, pas d'énergie nucléaire, pas de balistique, pas de simulation sportive, pas de gilet pare-balles, pas de simulation d'essais de collision, pas de simulation de mouvement de fluide, pas de simulation d'interactions chimiques, pas de bâtiments résistants aux tremblements de terre ... la liste est longue.

ja72
la source
+1 @ j172 Je connais celui-ci, il est vraiment utile en analyse numérique et en simulation.
Amir Rezaei,
2

Algorithme de tri.

tia
la source
5
ce n'est pas un algorithme spécifique, cependant ...
Justin L.
Oui, ce que Justin L. a dit, quel algorithme de tri?
Dr. Hannibal Lecter
L '"algorithme spécifique" devrait être mergesort, le premier des n ng sortes.
Billy ONeal
2
@dr Hannibal Lecter: Bubble Sorte de cours. Tout le reste est optimisation prématurée.
peterchen
2

Tri rapide

ysolik
la source
1
Beurk! J'espère certainement que les gens n'utilisent pas de tri rapide dans le code de production. Plus important encore, mergesort est venu plus tôt et est presque aussi rapide. (Espérons que la plupart des codes utilisent une variante d'Introsort)
Billy ONeal
2
@Billy ONeal, le tri dans .NET correspond à Quicksort. Ainsi, tout programme qui appelle List <T> .Sort () utilise quicksort en production.
Steven Evers
@SnOrfus: Avez-vous la preuve de cette déclaration? À ma connaissance, List <t> .Sort est basé sur introsort.
Billy ONeal
3
@Billy ONeal: directement à partir de msdn - msdn.microsoft.com/en-us/library/b0zbh7b6.aspx
ysolik
3
@ Thorbjørn: Ce n'est toujours pas un bon algorithme à usage général. Introsort est un tri rapide, mais il passe au tri par tas s'il dépasse une profondeur de récursivité donnée. Cela permet d'avoir les bonnes caractéristiques du tri rapide mais évite toujours les cas pathologiques, même si l'algorithme choisit de mauvais pivots.
Billy ONeal
1

Tri par insertion

Facile à mettre en œuvre, très rapide sur les petites listes et utilisé dans les implémentations Fusion / Tri rapide pour les accélérer. Il est stable et fonctionne dans O (n) sur des listes triées (quand elles sont triées par ordre croissant).

Oliver Weiler
la source
1

Gauss-Jordan en calcul matriciel

xport
la source
1

Filtre de Kalman

Il est fortement utilisé en navigation, suivi de cible (pour presque tous les capteurs: radar, sonar, FLIR, ladar). Un manuel montre une application dans un contrôleur de lecteur de disque. Les systèmes de contrôle robotiques utilisent fréquemment des filtres de Kalman.

John R. Strohm
la source
0

Langue parlée et écrite.

Ils constituent actuellement l’un des algorithmes les plus efficaces pour transférer des connaissances d’une chose à une autre. Sans langage, la société civile ne pourrait pas exister et l'information ne pourrait pas être transmise.

Malfiste
la source
5
-1: Les algorithmes peuvent être exprimés en langage naturel, mais les langages naturels ne sont pas des algorithmes.
Steven Evers
2
Diriez-vous que les algorithmes de compression ne sont pas des algorithmes? Toutes les langues compressent les informations transmises d’une source à une source. Il a des règles spécifiques qui doivent être suivies (grammaire) comme tout autre algorithme. Il prend une entrée (vos expériences) et produit un résultat différent (connaissances). Je ne vois pas comment vous ne pourriez pas considérer la langue comme un algorithme.
Malfist
Il échoue toutes les définitions standard d'algorithme sur de nombreux fronts.
James Réinstalle Monica Polk
0

La structure de données de tas et ses algorithmes associés pour la construction et la maintenance de tas.

Et montrez du respect pour le tri rapide. Même si ce n’est pas toujours le choix, c’est l’un des algorithmes fondamentaux du développement historique de l’informatique et un excellent moyen de comprendre la récursivité et l’analyse algorithmique. C'est beau et oui, j'adore.

James réintègre Monica Polk
la source
0

Algorithmes d'indexation tels que B-tree, B + -tree, index de hachage, index d'arborescence binaire, etc. Pour indexer une énorme quantité de données.

xyz
la source
0

MapReduce comme moyen de diviser, de conquérir et de paralléliser le traitement de grands ensembles de données.

Jay Elston
la source
-1

Algorithme de force brute!

Beaucoup de gens sous-estiment cet algorithme de force brute. En fait, il est principalement utilisé pour résoudre des problèmes sans motif. Je l'aime beaucoup!

xport
la source
5
Ce n'est pas un algorithme. C'est une sorte d'algorithme.
Adam Lear
C'est une méthode pour casser le cryptage.
Amir Rezaei
Je pense qu'il est également classé comme un algorithme. "Commencez de x à y faire quelque chose." <--- algorithme non?
xport
Un algorithme est une série d'étapes pour accomplir une tâche spécifique . Ce n'est pas spécifique.
Anto
-5

Tri à bulles!

Le genre de bulle n'est pas aussi mauvais que Bogosort . C'est pourquoi je vote pour le genre Bubble.

xport
la source
1
Veuillez envisager de préciser pourquoi l’algorithme est significatif et important. Les gens semblent simplement ne pas être d’accord sur la raison pour laquelle le tri par bulles pourrait être important et important.
Tamara Wijsman
5
Même Barack Obama sait que le tri des bulles est la mauvaise solution .
Joey Adams
@ TomWij, @ Joey: voir ma mise à jour.
xport