Quels algorithmes sont utilisés le plus souvent?
Veuillez écrire un seul algorithme par réponse, essayez de garder votre réponse courte (une ou deux lignes).
Quels algorithmes sont utilisés le plus souvent?
Veuillez écrire un seul algorithme par réponse, essayez de garder votre réponse courte (une ou deux lignes).
Réponses:
La transformation de Fourier rapide est-elle le problème algorithmique résolu la plupart du temps par des systèmes informatiques réels? Il faut que ce soit proche. Je proposerais donc l' algorithme FFT de Cooley-Tukey .
Multiplication.
Peut-être l'un des plus anciens algorithmes pas tout à fait triviaux, et un problème qui est résolu plus souvent que la FFT.
Algorithmes de chemin le plus court de Dijkstra et Bellman-Ford . Il y a au moins 35 000 systèmes autonomes (AS) actifs sur Internet en 2010. Chaque AS exécute soit un protocole de routage à état de liaison (Dijkstra), soit un protocole de routage à vecteur de distance (Bellman-Ford). Les routeurs d'un AS mettent généralement à jour leurs tables périodiquement toutes les quelques minutes, par exemple 10.
Ainsi, le nombre d'exécutions de Dijkstra & Bellman-Ford par jour s'élève à au moins 5 millions. Et cela vient uniquement des routeurs.
Nous n'avons pas compté les calculs de chemin les plus courts à partir de Google Maps et les goûts qui devraient facilement représenter 10 fois plus. Un demi-milliard d'exécutions par jour n'est pas exagéré.
Je pense que l'algorithme le plus utilisé est Parity Check (ou peut-être CRC ou une sorte de code correcteur d'erreurs), car ils apparaissent dans chaque accès RAM.
Algorithme Simplex - n'est-ce pas encore compétitif avec les meilleures méthodes de point intérieur? Si c'est le cas, il doit être beaucoup utilisé.
Plus généralement, vous devriez regarder les lauréats du prix Kanellakis pour des idées qui ont un poids théorique et pratique.
Profondeur en premier (DFS)
Il est difficile de penser à des algorithmes plus largement utilisés que ceux des implémentations modernes de TCP : évitement de la congestion , retransmission rapide . Bien que cela dépende de la façon dont on détermine ce qui répond aux critères d'un algorithme ...
Élimination gaussienne Ceci est toujours utilisé dans la pratique, n'est-ce pas? Sinon, remplacez-le par ce qui est le plus souvent utilisé pour résoudre les systèmes linéaires ...
SHA-1 (et les fonctions de hachage en général). Probablement mieux que la plupart des autres algorithmes en termes de nombre d'exécutions.
Cette réponse interprète "le plus souvent" en termes de cycles CPU réels.
Lorsque j'apprenais l'informatique dans les années 70, je me souviens avoir lu que la grande majorité des cycles informatiques (lire: mainframe) étaient consacrés au tri. Les applications métier nécessitent un tri étendu pour l'analyse et le reporting. Je n'imagine pas que cela a beaucoup changé, mais bien sûr, la montée en puissance d'autres applications - e-mail, traitement de texte, etc. - a dû modifier le mélange. Ces tris sont généralement des tris stables (pas Quicksort) en raison de la nécessité de trier les successions de champs pour créer des sous-tris.
À strictement parler, cependant, l'algorithme le plus souvent utilisé est, sans aucun doute, tout ce qui est exécuté par le processus d'attente du système Windows lorsque rien d'autre ne se passe ;-).
Sprase Matrix Vector Multiply
... est le cheval de bataille informatique derrière la solution de presque tous les systèmes linéaires. En conséquence, il est exécuté chaque fois
La plupart des FLOP sur n'importe quel supercalculateur ou cluster sont dépensés à l'intérieur d'un mat-vec clairsemé.
La méthode de Newton. Il est utilisé pour calculer les racines carrées, pour calculer la division. Il peut être utilisé pour effectuer une programmation linéaire. Plus généralement, c'est le cheval de bataille de l'optimisation (convexe). Il peut être utilisé pour résoudre des équations différentielles en physique en minimisant l'action / l'énergie.
Hachage et arbres rouge-noir.
Ils sont déjà implémentés en STL (hash_map, map), et chaque programmeur sait qu'un tel conteneur est incroyablement pratique lorsque vous souhaitez stocker des informations indexées par un type de données arbitraire.
Algorithmes de correction d'erreurs, tels que 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
Je pense que DP est utilisé "plus souvent" que les autres algorithmes cités dans l'enquête jusqu'à présent. Je déduis «plus souvent» dans le sens de la fréquence à laquelle un concept d'algorithme non trivial a été implémenté par le programmeur dans la vie réelle, plutôt que combien de fois une implémentation particulière d'un algorithme a été invoquée.
DP est polyvalent et a de nombreux visages. Parfois, je l'ai utilisé un peu inconsciemment, puis j'ai réalisé plus tard que je faisais du DP.
Bien sûr, il y a des choses qui sont encore plus courantes que Dynamic Program, mais ce sont principalement des structures de données (tableau, liste chaînée, hachage).
String Matching, utilisé tout le temps dans les logiciels d'application et au niveau de la base de données.
Dans le cas exact, il existe plusieurs algorithmes assez impliqués (KMP, Boyer-Moore) dont certains atteignent un temps d'exécution sublinéaire attendu. Ils sont également intéressants à étudier d'un point de vue CS.
La correspondance approximative des chaînes, c'est-à-dire les alignements, est probablement encore plus intéressante. Vous connaissez les fonctionnalités de "correction automatique"? En outre, les recherches dans les données de chaîne bruyantes (par exemple, l'ADN) sont effectuées à l'aide d'alignements.