algo avancée
This commit is contained in:
@ -468,6 +468,7 @@ Les piles
|
||||
- FIFO : "first in first out"
|
||||
|
||||
|
||||
|
||||
Traduction d'une structure de données dans une autre
|
||||
-----------------------------------------------------
|
||||
|
||||
@ -730,8 +731,10 @@ On les appelle enregistrements, dictionnaires ou tables de hachage.
|
||||
|
||||
|
||||
|
||||
- les types sommes (constructeurs) : modélisation de domaines finis
|
||||
les types sommes
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
appelés aussi type construits, ou types algébriques
|
||||
|
||||
.. code-block:: ocaml
|
||||
|
||||
@ -748,12 +751,83 @@ On les appelle enregistrements, dictionnaires ou tables de hachage.
|
||||
Ent of int | Reel of float | Cplx of float × float
|
||||
Ent, Reel, Cplx sont les constructeurs du type.
|
||||
|
||||
Les arbres
|
||||
----------
|
||||
|
||||
Structure de données construite sur un type somme récursif.
|
||||
|
||||
arbre binaire :
|
||||
|
||||
.. code-block:: ocaml
|
||||
|
||||
type arbre = Vide | Noeud of int * arbre * arbre
|
||||
let a =
|
||||
Noeud(10,
|
||||
Noeud(2,Noeud(8,Vide,Vide),Vide),
|
||||
Noeud(5,Noeud(11,Vide,Vide),Noeud(3,Vide,Vide)));;
|
||||
|
||||
arbre binaire polymorphe :
|
||||
|
||||
|
||||
.. code-block:: ocaml
|
||||
|
||||
type ’a arbre = Vide | Noeud of ’a * ’a arbre * ’a arbre;;
|
||||
let b = Noeud(10,Noeud(5,Vide,Vide),Vide);;
|
||||
let c = Noeud(’f’,Vide,Noeud(’a’,Vide,Noeud(’g’,Vide,Vide)));;
|
||||
|
||||
- parcours d’un arbre binaire
|
||||
- itérateurs sur un arbre binaire
|
||||
- taille d'un arbre
|
||||
|
||||
arbre n-aire::
|
||||
|
||||
type ’a arbre = Vide | Noeud of ’a * ’a arbre list;;
|
||||
|
||||
- transformation d'un arbre en un autre
|
||||
- arbre ordonné (arbre de recherche)
|
||||
- équilibrage des arbres de recherche
|
||||
|
||||
|
||||
Un arbre binaire est ordonné (ou de recherche) par rapport à une relation
|
||||
d’ordre quelconque si :
|
||||
|
||||
- c’est l’arbre vide (Vide)
|
||||
- c’est un arbre non-vide Noeud(x,g,d) et
|
||||
|
||||
1. les éléments du sous-arbre gauche g sont inférieurs à la racine x
|
||||
2. la racine x est inférieure aux éléments du sous-arbre droit d
|
||||
3. les sous-arbres g et d sont eux-mêmes ordonnés
|
||||
|
||||
::
|
||||
|
||||
let a1 =
|
||||
Noeud(5, Noeud(2, Vide, Vide),
|
||||
Noeud(20, Noeud(10, Noeud(6, Vide, Vide),
|
||||
Noeud(14,Vide, Vide)),
|
||||
Noeud(21,Vide,Vide)));;
|
||||
|
||||
.. image:: _static/AbreOrdonne.png
|
||||
|
||||
Recherche d'un élément dans un arbre ordonné
|
||||
---------------------------------------------
|
||||
|
||||
La structure ordonnée des arbres binaires de recherche permet d’effectuer
|
||||
la recherche d’un élément avec une compléxité en moyenne de O(log n)
|
||||
|
||||
::
|
||||
|
||||
let rec recherche elt abr =
|
||||
match abr with
|
||||
| Vide -> false
|
||||
| Noeud (x,_,_) when x = elt -> true
|
||||
| Noeud (x,g,_) when elt < x -> recherche elt g
|
||||
| Noeud (_,_,d) -> recherche elt d
|
||||
;;
|
||||
|
||||
Autres structures de données complexes
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- arbres
|
||||
- graphes
|
||||
- dates
|
||||
|
||||
- le parcours de graphes
|
||||
- les calculs de dates
|
||||
|
@ -3,6 +3,20 @@
|
||||
Définitions par filtrage
|
||||
--------------------------
|
||||
|
||||
::
|
||||
|
||||
type formule = Vrai | Faux | Conjonction of formule * formule
|
||||
|
||||
|
||||
le fitrage permet un examen par cas sur les valeurs construites::
|
||||
|
||||
let rec evalue = function
|
||||
| Vrai -> true
|
||||
| Faux -> false
|
||||
| Conjonction (Faux, _) | Conjonction (_, Faux) -> false
|
||||
| Conjonction (f1, f2) -> evalue f1 && evalue f2;;
|
||||
|
||||
|
||||
Lorsqu'un argument est passé à un ensemble de clauses :
|
||||
|
||||
- la première clause qui filtre l'argument est exécutée, les autres sont
|
||||
|
Reference in New Issue
Block a user