• [^] # Re: Lae boulangèreuratriceuse qui calcule la monnaie exécute un algorithme

    Posté par . En réponse au lien Quand l'algorithmique devient fasciste. Évalué à 3.

    Problème de math à l'école primaire :
    * quelle est la somme de 231 et 314 ;
    * résoudre ce puzzle, un sudoku par exemple.

    Problème algorithmique : calculer la somme de deux nombre étant donné ces deux nombres. C'est une classe de problème qui inclue notre problème d'école, on dit que "trouver la somme de 231 et 314" est une instance du problème algorithmique, terminologie consacrée.

    Problème du mathématicien ou programmeur : écrire un algorithme qui résout le problème, c'est à dire qui résout n'importe quelle instance. Un algorithme est donc typiquement capable de résoudre une infinité de ces problèmes d'école primaires, un algo de résolution de Sudoku pourra résoudre tous les Sudoku.

    le problème résolu par un algorithme n'est pas l'écriture de l'algorithme.

    C'est ce que tu voulais écrire ? Non, le problème résolu par l'algorithme est une instance du problème algorithmique. Il renvoie des données qui doivent respecter les propriétés attendues (tu peux voir les spécifications d'une fonction comme une formule de math qui définit un problème algorithmique à résoudre en fonction des entrées, éventuellement trivial, en tout cas avec une certaine complexité).

    Un peu comme "demander son nom à l'utilisateur": l'algorithme ne doit pas fournir une solution à un problème.

    Ça c'est juste une donnée pour un algorithme, on peut voir ça comme un paramètre ou des données d'entrées. La validation est un problème plus intéressant.

    On peut souvent voir un algo comme une fonction "étant donné une image et un carré dans cet image, calculer une nouvelle image dans lequel le carré est peint en vert" serait le problème algorithmique associé à ton histoire de carré. Ta tache est la résolution d'une instance de ce problème, qu'un algorithme par définition accomplira parfaitement dans tous les cas si c'est un algorithme pour de vrai.

    Tu prends l'exemple de A*

    Tu réponds pas vraiment à la question, la question c'est "comment tu décris précisément A*" ? Tu vas présupposer un certain nombre d'opérations et de structures élémentaire genre des tableaux pour stocker les arêtes, une structure pour le graphe ... une fois que t'as fait ça on peut écrire le langage de programmation qui va implémenter tout ça nativement. Après oui on peut écrire un compilateur pour traduire ça en C :)