Qu'est-ce qu'un algorithme?


12

Qu'est-ce qu'un algorithme, exactement, que signifie l'algorithme? Le peu que je comprends, c'est qu'il n'est pas spécifique à une langue particulière ou à un modèle de conception, mais plutôt l'un des principes les plus fondamentaux (donc je suppose que cette question me donne l'air stupide).

L'une des "options" que j'ai pour le comprendre, c'est que cela signifie la méthode pour faire quelque chose, qui pourrait être écrite comme une liste en pseudocode.

Quand j'écris du code plus compliqué, je pense ce qui doit être fait, avec quoi et comment j'y arriverais (pas dans un langage de programmation), puis j'écris cela en code. Est-ce une bonne façon de procéder et est-ce que cela a quelque chose à voir avec les algorithmes?

(Je voulais demander ici plutôt sur Stackoverflow, car il ne s'agit pas d'un problème / d'une langue spécifique et j'ai l'impression que la majorité des gens ici connaissent le `` pourquoi '', ou du moins les réponses ici sont plus détaillées, plutôt que sur Stackoverflow là où c'est différent, je suis désolé si j'aurais dû demander là-bas)



1
@Apalala: Je ne pense pas que ces limitations s'appliquent.
Josh K

2
@Apalala: Finite , pas connu .
Josh K

2
@Jonathan: "des mots que je dois rechercher"? Quels mots? Soyez précis . Ce site n'est pas magique. Nous ne te connaissons pas. Nous ne savons pas ce que vous lisez. Nous ne savons pas ce qui vous a dérouté. Soyez précis .
S.Lott

1
@Apalala: "Fini" signifie "délimité", rien de plus. Un algorithme est garanti de s'arrêter un jour. Il est beaucoup plus facile de prouver la finitude lorsque vous avez une sorte de façon de prédire sa fin, donc les algorithmes ont tendance à être prévisibles, mais la prévisibilité n'est pas dans la définition habituelle des algorithmes.
David Thornley

Réponses:


19

Un algorithme est une séquence finie d'instructions bien définies pour calculer une fonction (ou exécuter une procédure) qui se termine dans un état final bien défini.


1
+1. "Fini, bien défini et efficace" sont les trois critères de l'entrée Wikipedia. Vous avez tous les trois ici aussi.
S.Lott

Je suis configuré pour regarder les vidéos citées par @ Jörg, mais mon point de vue actuel est que non seulement les étapes doivent être finies. Si les ressources (y compris le temps) ne sont pas limitées, alors la procédure peut être appelée ou étiquetée comme n'importe quoi, mais pas comme un algorithme .
Apalala

@Apalala - J'ai parcouru mes manuels et je ne vois cette restriction nulle part. Il est possible que pour un particulier ensemble de données ou entrée d' un algorithme ne peut mettre fin à (algorithmes comme la méthode de Newton-Raphson pour trouver une racine peut se coincer dans une boucle sans fin), mais cela ne fait pas l'algorithme pas un algorithme.
John Bode

@John Oscillations peut et est régulièrement détecté à Newton-Raphson.
Apalala

1
@Apalala: cela ressemble plus à la définition d'un programme qu'à celle d'un algorithme. Cette idée d' étapes discrètes est présente dans les machines Turing, les machines à registres, les machines à accès aléatoire, et bien sûr dans nos ordinateurs physiques réels, également dans à peu près tous les langages de programmation et même, bien qu'implicitement, dans le lambda calcul. Mais c'est une restriction arbitraire qui n'est pas inhérente aux algorithmes. Les algorithmes analogiques , par exemple, n'ont pas d'étapes discrètes (en fait, c'est la définition d'un algorithme analogique), et ils peuvent en fait être mis en œuvre avec un ordinateur analogique.
Jörg W Mittag

15

C'est en fait une question assez intéressante, et en fait toujours une question de recherche ouverte.

Yuri Gurevich, l'un des géants de la théorie des algorithmes, donne actuellement une série de conférences vidéo sur le site Web communautaire de Channel9:

Comme vous pouvez le voir, votre question est en fait le titre de la deuxième conférence. Cependant, je vous suggère fortement de les regarder tous les trois.

Le premier, en particulier, contient quelques exemples d'algorithmes qui invalident à peu près toutes les définitions données dans la plupart des autres réponses ici.


2
Merci pour les liens. Vous remarquerez ce qui suit dans le texte qui accompagne la première vidéo, dans le cadre de la définition d'un algorithme: "se terminant éventuellement dans un état final". La terminaison est une partie essentielle de la définition d'un algorithme. C'est pourquoi les systèmes d'exploitation et les serveurs sans terminaison ne sont pas des algorithmes.
LIProf

4

Un algorithme est comme une bonne recette de cuisine . Vous avez des entrées, des étapes intermédiaires bien définies et obtenez un résultat final.

Appliqué à la programmation, il s'agit d'une description non ambiguë des étapes à suivre pour résoudre un problème particulier. Tout ce que vous pouvez écrire dans le langage de programmation de votre choix peut être considéré comme un algorithme - mais le terme n'est généralement utilisé que pour des tâches logiques ou mathématiques courantes, telles que le tri ou la recherche.


Il existe de nombreux algorithmes qui ne donnent pas nécessairement un résultat final. Un système d'exploitation ou un serveur Web, par exemple, est un algorithme pour lequel donner un résultat final est généralement considéré comme un bug.
Jörg W Mittag

@ JörgWMittag mais un OS ou un serveur web est-il "un algorithme"? Je pense qu'ils ne le sont pas - ils peuvent résoudre des sous-problèmes de leur domaine en utilisant des algorithmes - et dans tous les cas, ils ont certainement besoin d'un résultat final - mais ils ont aussi des parties qui ne sont pas des algorithmes, et dans l'ensemble, ils ne sont pas '' t algorithmes. (C'est comme vous l'avez dit dans un autre commentaire - les systèmes d'exploitation et les serveurs Web sont des programmes mais pas nécessairement des algorithmes ).
Andres

2

Un algorithme est un ensemble de règles ou de processus (dans un calcul) utilisé pour la résolution de problèmes. Fondamentalement, il y a un problème, vous voulez une solution, et le processus de cette solution est un algorithme. Un algorithme a un ensemble fini de règles / processus pour parvenir à une solution.

Si vous êtes comme Edsger W. Dijkstra , vous écrirez votre algorithme sur un morceau de papier et élaborerez / affinerez l'algorithme sur papier jusqu'à ce que vous soyez satisfait de vos algorithmes. Sinon (en particulier lors de l'écriture de documentations), un organigramme est utilisé pour représenter schématiquement le flux d'un algorithme / processus. Cela permet à d'autres de critiquer l'organigramme et de l'améliorer si besoin est (sans se soucier du langage de programmation nécessaire).

Je ne sais pas si cela répond à votre question.


Je n'aime pas le jeu de mots car il signifie "non commandé". Je préférerais que "séquence" ou tuple d'événement reste dans la zone mathématique
BenjaminB

@ Ubiquité, Set ne signifie pas nécessairement "non commandé". Vous pouvez classer un ensemble dans l'ordre que vous souhaitez (par exemple, un ordre aléatoire). Pourtant, cela ne nécessite pas un downvote en raison de l'interprétation du mot «set» par les gens. De plus, vous pouvez avoir un ensemble composé, qui est un regroupement d'ensembles, qui fait également partie des algorithmes. Par conséquent, "set" peut être n'importe quoi, tant qu'il est utilisé de manière appropriée comme solution algorithmique à un problème.
Buhake Sindi

Je n'ai pas downvote!
BenjaminB

Désolé, je ne voulais pas vous blâmer sur le downvote. Le downvoter doit explicitement fournir les raisons du downvote.
Buhake Sindi

1

Algorithme: un ensemble d'opérations bien ordonnées qui sont 1) sans ambiguïté et 2) effectivement calculables de telle sorte que l'exécution des opérations à partir de la première produit un résultat après un nombre fini d'opérations.


Exemple de compteur: un système d'exploitation. Il ne produit pas de résultat du tout , en fait, qui est habituellement considéré comme un bug.
Jörg W Mittag

@ Jörg, le système d'exploitation produit de nombreux résultats qui, pris ensemble, produisent le résultat global de la fourniture de services système aux applications.
ThomasMcLeod

@ JörgWMittag Comme je vous l'ai dit dans d'autres commentaires, une conclusion à votre observation serait qu'un système d'exploitation n'est pas, en fait, un algorithme;)
Andres F.

1

Algorithme Il s'agit de la combinaison d'étapes séquentielles (ces étapes peuvent être des tâches de calcul, de traitement de données et de raisonnement) utilisées pour résoudre un problème de manière très simple et efficace.

Il est conçu de la manière la plus efficace pour pouvoir s'exprimer dans un espace et un temps limités. nous pouvons l'implémenter dans n'importe quel langage de programmation.

Propriétés d'un algorithme: voici les principales propriétés d'un algorithme: -

Un algorithme doit avoir un nom unique. Il doit avoir des ensembles d'entrées et de sorties explicitement définis. Un algorithme doit être en ordre séquentiel avec des opérations sans ambiguïté. Il doit avoir un certain point final, c'est-à-dire qu'il s'arrête dans un laps de temps fini. cliquez ici pour en savoir plus sur la conception et l'analyse d'algorithmes


0

J'utilise le terme pour décrire une formule pour résoudre un problème spécifique. La formule n'a pas nécessairement besoin d'être écrite en mathématiques ou d'avoir une relation 1: 1 avec une méthode. À l'école, les algorithmes et les structures de données sont étroitement liés et peuvent être écrits sous forme de formules mathématiques ou éprouvés à l'aide de preuves.


0

Un algorithme est une abstraction d'un programme informatique et se compose d'un ensemble d'instructions pour réaliser une tâche bien définie en un nombre fini d'étapes, bien que la limite du nombre d'étapes puisse être très grande et les étapes individuelles peuvent être complexes ( finies) à part entière. Bien qu'il existe des programmes (corrects) globalement connus, non algorithmiques, ils fonctionnent tous en répétant des morceaux algorithmiques dans un certain modèle. (Les programmes dont le statut de terminaison n'est pas connu sont plus intéressants, mais la plupart des programmeurs ne traitent pas de telles choses intentionnellement; je sais que non!)


0

OMI, personne ne le sait vraiment :) J'ai vu le terme appliqué uniquement aux fonctions de calcul mathématique, à toute fonction qui prend des entrées et produit des sorties, et à tout ce qui prend des entrées et effectue une sorte d'opération dessus.

Considérez-vous que tout ou partie des éléments suivants est un algorithme?

  1. Une fonction qui calcule le taux d'intérêt d'un prêt sur une période de 20 ans
  2. Logique métier qui vérifie si toutes les informations ont été saisies dans une demande de prêt
  3. Une finderfonction qui interroge une base de données pour un objet Client
  4. Une fonction "d'aide" qui nettoie et formate la saisie des données
  5. Une fonction qui analyse un fichier XML et mappe les données aux objets métier
  6. Une classe qui prend des entrées et les écrit dans un fichier texte

0

Un algorithme est une idée, une méthode, une technique, "intelligente" pour le calcul ou l'exécution d'une tâche qui est de nature abstraite, mais comme il s'exécute sur des ordinateurs dans le monde réel, nous aspirons à ce qu'il utilise le moins de ressources possible , qui sont, dans le monde informatique, le Temps et la mémoire.


0

Un algorithme est une séquence d'étapes bien définies qui produisent un résultat en temps fini.

Étape bien définie: c'est quelque chose que vous pouvez faire, ou calculer, qui est défini avec précision. Juste en lisant l'étape, vous savez ce que vous avez à faire et comment le faire. Plus précisément, vous pouvez l'écrire dans un langage de programmation que vous connaissez et être sûr que le fragment de programme correspond exactement à l'étape.

Séquence: les étapes sont exécutées dans un ordre spécifié. Les étapes peuvent être exécutées plus d'une fois selon les données (boucles) ou ne pas être exécutées du tout selon les données (si les instructions). Les algorithmes parallèles n'imposent qu'un ordre partiel aux étapes, donc je simplifie trop ici. Il serait plus correct de le décrire comme un ensemble partiellement ordonné qu'une séquence, mais je voulais garder les mots un peu plus simples. En outre, il est facilement possible d'incorporer un ensemble partiellement commandé dans une commande complète.

Résultat: un état ou une valeur de fin. Il ne doit pas nécessairement être prévisible à l'avance, mais il doit être une fin définie satisfaisant à une condition. Cela signifie qu'un système d'exploitation n'est pas un algorithme, bien qu'il en utilise beaucoup.

Fini: Un algorithme est garanti de s'arrêter un jour, au moins sur une machine qui peut fonctionner assez longtemps. Il n'est pas nécessairement garanti de s'arrêter dans un délai prévisible, et il n'est pas garanti qu'il s'arrête avant que le soleil ne se dilate et ne vire au rouge sur une machine existante. Cela signifie également qu'un système d'exploitation n'est pas un algorithme, car il fonctionnera idéalement pour toujours. J'ai vu le mot «procédure» utilisé pour décrire quelque chose qui serait un algorithme si nous étions sûrs qu'il s'arrêterait un jour. (Il est possible d'avoir un algorithme qui s'arrêtera dans un laps de temps inconnu. Supposons, par exemple, que la conjecture de Goldbach ait été prouvée mathématiquement fausse, dans une preuve non constructive, donc il y avait un nombre pair> 2 qui n'était pas la somme de deux nombres premiers Un algorithme qui testait simplement les nombres pairs finirait alors par se terminer,

L'algorithme est une sorte de chose intentionnellement abstraite, donc nous ne considérons pas des questions comme "Est-il physiquement possible de l'exécuter avant la mort thermique de l'Univers?". Ils seraient trop difficiles à répondre. S'il s'agit d'opérations informatiques, il est facile de l'implémenter dans un langage de programmation.


-1

Si je devais donner une définition générale, je dirais qu'un algorithme est une formule pour résoudre un problème informatique qui est plus complexe que la solution évidente / force brute et qui finit par être plus efficace.

De plus, il est important de noter qu'un algorithme n'est pas un code source spécifique; c'est le calcul lui-même. Entre autres choses, cela signifie que tout langage Turing-complet peut implémenter n'importe quel algorithme que tout autre langage Turing-complete peut implémenter.


J'ai beaucoup aimé cette réponse, et je pense que nous pourrions aller un peu plus loin et dire (bien que cela ne soit pas lié à la question d'origine): tout algorithme est une optimisation d'une solution de recherche par force brute / arborescence. Je me demandais si cela pouvait être prouvé officiellement.
mojuba

-1 "Algorithme" est un terme mathématique bien défini.
Apalala

1
@Apalala, alors qu'est-ce qui vous empêche de le redéfinir par souci de clarté ou, par exemple, pour mieux comprendre son essence? L'algorithme comme un "ensemble d'instructions" ne me dit presque rien.
mojuba

1
@mojuba Je me fiche vraiment de savoir si le terme va être redéfini, mais je pense que la définition traditionnelle était utile, car elle différenciait au moins les façons d'aborder les problèmes: un algorithme est une recette pour résoudre un problème en utilisant des ressources finies . Modifiez cette définition, et la conséquence prévisible est que nous devrons trouver un autre mot qui signifie la même chose. Zut! Toutes les connaissances acquises au cours du siècle dernier sur la calculabilité et la complexité disparaissent sans une définition solide de l' algorithme !
Apalala

1
Une recherche par force brute est un algorithme. Ce n'est généralement pas un joli algorithme et ne vaut généralement pas la peine d'être écrit. Je ne vois aucune utilité réelle à exclure la force brute, et dans de nombreux cas, on ne sait pas vraiment ce que signifie «mieux que la force brute».
David Thornley
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.