Algo ?

Bonjour, je recherche des cours d’algorythme si vous avez une mine d’or pard hasard, ça m’intéresse :wink:

Merci d’avance

algo.developpez.com/cours/
khayyam.developpez.com/articles/algo/genetic/

merci ash :wink:

C’est toujours un plaisir :stuck_out_tongue:

je vous derange pas? :unamused: :slightly_smiling: :smiley: :stuck_out_tongue: :blush: :wink:

Mais bien sur que non tu ne nous dérange pas :laughing: Comment va?

ca va :wink: et vous? :stuck_out_tongue:

Impeccable, je m’éclate bien ce soir :smiley:

Bon, tu les laisses, maintenant, et tu vas te coucher, c"est plus l’heure. Allez :wink:

heu … excusez moi … heuuu …
ça sert encore à quelquechose l’algorythmie ?
Je veux dire la syntaxe exacte, les conventions tout ça (pour l’algo) ?
C’est clair que d’une façon ou d’une autre, dés qu’on écrit un bloc de code on fait de l’algorythmie, mais souvent on code directement les instructions sans passer par la phase d’écriture algorythmique, donc, ma question :
Est-ce encore utile de nos jours de connaitre la syntaxe alghorythmique et d’écrire d’abord en algo le code qu’on veut produire ?

Non, l’algorithmie, ça n’est pas ça, l’algorithmie consiste essentiellement à être capable de prouver ou tout du moins justifier qu’un algorithme fonctionne (on se fout de la manière dont il est décrit) et à être capable de prévoir sa complexité au moins dans le cas où il sera appliqué. Ça ne consiste pas à écrire trois boucles en un pseudo code sans intérêt.

ah bon ? mais sur le papier tu le prouves comment qu’il fonctionne, en chinois ? à l’ancre sympathique ? ou dans ton langage de programmation (et si celui qui te lit ne connait pas ton langage mais un autre ? ) ?

[quote=“fran.b”]Ça ne consiste pas à écrire trois boucles en un pseudo code sans intérêt.[/quote]C’était bien ma question … cependant je lis ailleurs :

[quote]Quand on veut élaborer un programme, on rencontre grosso-modo les premières phases suivantes :

  • l’analyse fonctionnelle
  • la conception préliminaire
  • la conception détaillée : il s’agit d’exprimer de façon détaillée comment résoudre les différentes difficultés rencontrées. On a recour à différent formalismes : Graphiques ( organigrammes … ) ou Textuels ( Algorithmes … ).
    L’algorithmique s’adapte bien aux problèmes informatiques étudiés par analyse descendante. Son formalisme a été repris dans un grand nombre de langages structurés comme le C, le Pascal, l’Ada …
    L’algorithmique peut se définir suivant 4 axes :
  • La définition des objets qu l’on va manipuler.
  • L’utilisation des objets définis (actions).
  • La présentation des algorithmes( commentaires et l’indentation).
  • L’esprit dans lequel les algorithmes sont construits.

    La description des étapes (opérations) nécessaires à l’accomplissement d’une tâche complexe et permettant d’aboutir au résultat recherché s’appelle un algorithme
    [/quote]En somme, comment faire cette description sans passé par un pseudo-langage ? Mais ma question était plutôt : ce pseudo langage est -il encore utilisé ou requis ou enseigné en fac ou autre ?

ah bon ? mais sur le papier tu le prouves comment qu’il fonctionne, en chinois ? à l’ancre sympathique ? ou dans ton langage de programmation (et si celui qui te lit ne connait pas ton langage mais un autre ? ) ?
[/quote]

là je te convie à mes cours si tu veux. Tu peux également chercher la notion d’invariants de boucles ou de preuve de programmes. Cette dernière est une des motivation de la théorie des types abstraits (qui permet entre autre de montrer que ta structure de données est celle que tu veux, ma thèse était là dessus). Les types abstraits ont été utilisés entre autre par France Telecom pour modéliser un central téléphonique.

[quote]

[quote=“fran.b”]Ça ne consiste pas à écrire trois boucles en un pseudo code sans intérêt.[/quote]C’était bien ma question … cependant je lis ailleurs :

[quote]Quand on veut élaborer un programme, on rencontre grosso-modo les premières phases suivantes :

  • l’analyse fonctionnelle
  • la conception préliminaire
  • la conception détaillée : il s’agit d’exprimer de façon détaillée comment résoudre les différentes difficultés rencontrées. On a recour à différent formalismes : Graphiques ( organigrammes … ) ou Textuels ( Algorithmes … ).
    L’algorithmique s’adapte bien aux problèmes informatiques étudiés par analyse descendante. Son formalisme a été repris dans un grand nombre de langages structurés comme le C, le Pascal, l’Ada …
    L’algorithmique peut se définir suivant 4 axes :
  • La définition des objets qu l’on va manipuler.
  • L’utilisation des objets définis (actions).
  • La présentation des algorithmes( commentaires et l’indentation).
  • L’esprit dans lequel les algorithmes sont construits.

    La description des étapes (opérations) nécessaires à l’accomplissement d’une tâche complexe et permettant d’aboutir au résultat recherché s’appelle un algorithme
    [/quote]En somme, comment faire cette description sans passé par un pseudo-langage ? Mais ma question était plutôt : ce pseudo langage est -il encore utilisé ou requis ou enseigné en fac ou autre ?[/quote]

L’algorithmie n’est pas l’art de concevoir un algorithme mais encore une fois une méthode d’analyse d’un algorithme afin de prouver sa validité. Le formalisme avec lequel tu décris un algorithme a un intérêt, c’est celui de préciser ce qu’on entend par algorithme. Ceux ci étant souvent conçu de manière impérative («à la pascal»), les pseudo codes utilisés (à chacun le sien) sont des avatars minimaux de langages impératifs: ils ont en gros une structure de boucle («while do done» parfois «for do done» et les avatars «tant que faire» «pour de à faire», etc), des structures de controle (if then else), ils utilisent des variables, des fonctions pour la clarté de l’écriture. Cela dit, en cours, personnellement, j’écris la plus part du temps les exemples d’algorithmes étudiés en Caml. Comme je te l’ai dis, le pseudo langage utilisé pour écrire un algorithme n’a aucun intérêt et une écriture directe dans un langage de programmation est tout aussi explicite (sauf si c’est de l’ADA :slightly_smiling:

La description de ce que tu as lu semble réduire l’algorithmie à de simples exposés de méthodes de résolution de problèmes. C’est comme si tu réduisais un raisonnement complet à la seule conclusion ou encore les maths aux seuls résultats sans t’intéresser à leur validité ni à leur puissance.

Oui, ce n’est que la description de la description de l’algorithmique que j’ai extrait d’une introduction à l’algorhitmique d’un support de cours que j’ai retrouvé dans une pile de paperasse de ce type …
Merci pour les présicions ceci dit …
Doublement merci, ça m’a permi en plus de retrouver la carte grise d’une vieille bagnole que je vais devoir me décider à envoyer à la casse 8)
Est-ce prémonitoire du renomage de gnu/linux en Méchanique générale ? :smiling_imp:

[quote=“usinagaz”]
ah bon ? mais sur le papier tu le prouves comment qu’il fonctionne, en chinois ? à l’ancre sympathique ? ou dans ton langage de programmation (et si celui qui te lit ne connait pas ton langage mais un autre ? ) ?[/quote]

Bon considérons l’algorithmle suivant:

let minimum (a::l) =

let rec boucle m suite = match suite with
(* fini )
| [] -> m
(
le premier élément de suite est inférieur à m )
| (a::reste) when a <= m -> (boucle a reste)
(
sinon … *)
| (_::reste) -> (boucle m reste)
in
(boucle a l);;

C’est l’algorithme classique de calcul d’un minimum d’une liste d’éléments ayant au moins un élément (elle s’écrit ici a::l a le premier élément, l la suite de la liste) (l’agorithme est écrit en Caml)
Bon, on reconnait une boucle ayant deux arguments m et suite.
Soit la propriété: au début de la kième boucle on a

  1. m est le plus petit des k premiers éléments de la liste L du début (i.e L=a::l)
  2. suite est constitué des (cardinal(L)-k) derniers éléments de L

(cela s’appelle un invariant de boucle, i.e une propriété constamment vraie à chaque itération, les invariants efficaces sont en général les descriptions exactes des arguments des boucles. La programmation en Caml permet de voir explicitement ce que sont les arguments d’une boucle alors qu’en C ou dans un autre langage impératif, c’est + dur)

preuve:
La propriété est clair pour k=1: a est le minimum de la liste [a], l a cardinal(L)-1 élément.

Supposons la propriété acquise au début de la kième boucle. A l’issue de cette boucle donc au début de la k+1 ième boucle, l aura un élément de moins donc card(l)-1=cardinal(L)-k-1=cardinal(L)-(k+1) éléments.
Par ailleurs, si a est le k+1ième élément de la boucle,

  • soit a<=m, les arguments de la k+1 ième boucle seront a et reste, or on a bien a<=m donc a plus petit que les k premiers éléments de L et a<=a donc plus petit que le k+1 ième élément.
  • soit a > m mais dans ce cas, m est inférieur au k premier s éléments de L par hypothèse, et à a donc au k+1 ième. m est bien le plus petit des k+1 premiers éléments de L.
    Finalement, la propriété sera vraie au début de la k+1 ième boucle.

Par induction, la proprété est donc vraie à chaque boucle. Au bout de cardinal(L) boucle, la longueur de suite sera nulle donc suite sera vide et l’agorithme se terminera en rendant m. m sera comme on vient de le montrer le plus petit élément des cardinal(L) premiers éléments de L donc le plus petit élément de L.

On peut noter que si l’autre n’est pas total, l’algorithme permet de trouver un élément minimal de L, il suffit de remplacer «plus grand» par «n’est pas plus petit que».

Voilà c’est un exemple (improvisé) de preuve d’algorithme.