support de cours algo avancée - correction unicode
This commit is contained in:
parent
6a50f7f261
commit
75bb842bb6
|
@ -1,11 +1,3 @@
|
|||
définitions récursives
|
||||
une fonction est
|
||||
récursive
|
||||
si elle fait appel à elle même dans sa propre
|
||||
définition
|
||||
|
||||
récursivité mutuelle
|
||||
|
||||
les types structurés
|
||||
- le produit cartésien
|
||||
- le n-uplet
|
||||
|
@ -23,20 +15,6 @@ val a : complexe = {re = 1.4; im = 0.5}
|
|||
les types sommes : modélisation de domaines finis
|
||||
# type couleur = Pique | Coeur | Carreau | Trefle;;
|
||||
type couleur = Pique | Coeur | Carreau | Trefle
|
||||
# let a = Trefle ;;
|
||||
# let a = Trefle ;;
|
||||
val a : couleur = Trefle
|
||||
|
||||
définition par cas
|
||||
(match-with)
|
||||
|
||||
let points v =
|
||||
match v with
|
||||
Pique -> 1
|
||||
| Trefle -> 2
|
||||
| Coeur -> 3
|
||||
| Carreau -> 4;;
|
||||
# points a ;;
|
||||
- : int = 2
|
||||
#
|
||||
constructeurs avec arguments
|
||||
type num = Int of int | Float of float
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 594 KiB |
|
@ -1,10 +1,10 @@
|
|||
Notion de complexité d'un algorithme
|
||||
====================================
|
||||
|
||||
définition
|
||||
Définition
|
||||
-----------
|
||||
|
||||
l’analyse de la complexité d’un algorithme consiste à évaluer les ressources
|
||||
L’analyse de la complexité d’un algorithme consiste à évaluer les ressources
|
||||
consommées par l’algorithme lors de l’exécution
|
||||
|
||||
deux critères d’évaluation
|
||||
|
@ -17,7 +17,7 @@ principes de base
|
|||
-----------------
|
||||
|
||||
Caractériser la quantité de ressources consommées en fonction de la
|
||||
taille des données sur lesquelles l’algorithme est appliqué.
|
||||
taille des données sur lesquelles l’algorithme est appliqué.
|
||||
|
||||
Evaluer le coût exact est difficile, on exprimera donc seulement un
|
||||
ordre de grandeur
|
||||
|
@ -27,17 +27,18 @@ définition mathématique
|
|||
-----------------------
|
||||
|
||||
|
||||
- si f est la fonction caractérisant exactement le coût d’un algorithme
|
||||
- si f est la fonction caractérisant exactement le coût d’un algorithme
|
||||
- et n la taille des données
|
||||
- on s’intéresse à la façon dont croı̂t f(n) lorsque n croı̂t
|
||||
- on va montrer que f (n) ne croı̂t pas plus vite qu’une autre fonction g(n)
|
||||
- on s'intéresse à la façon dont croît f(n) lorsque n croît
|
||||
- on va montrer que f (n) ne croît pas plus vite qu’une autre fonction g(n)
|
||||
|
||||
Du point de vue mathématique, on dit que la fonction f est dominée
|
||||
asymptotiquement par la fonction g ce qui se note f= O(g)
|
||||
|
||||
::
|
||||
|
||||
f = O(g) ssi ∃k, ∃n 0 , ∀n, n > n 0 ⇒ f (n) ≤ k.g (n)
|
||||
f = O(g) ssi il existe k, il existe n 0 , pour tout n, n > n 0 implique
|
||||
f(n) inférieur ou egal k.g (n)
|
||||
|
||||
|
||||
exemples
|
||||
|
|
|
@ -3,14 +3,25 @@
|
|||
Définitions par filtrage
|
||||
--------------------------
|
||||
|
||||
Lorsqu'un argument est passé à un ensemble de clauses::
|
||||
|
||||
p1 -> e1 ∣ … ∣ pn -> en
|
||||
Lorsqu'un argument est passé à un ensemble de clauses :
|
||||
|
||||
- la première clause qui filtre l'argument est exécutée, les autres sont
|
||||
ignorées.
|
||||
ignorées.
|
||||
- si aucune clause ne filtre l'argument, une exception est levée.
|
||||
|
||||
exemple de définition par cas
|
||||
::
|
||||
|
||||
let points v =
|
||||
match v with
|
||||
Pique -> 1
|
||||
| Trefle -> 2
|
||||
| Coeur -> 3
|
||||
| Carreau -> 4;;
|
||||
|
||||
# points a ;;
|
||||
- : int = 2
|
||||
|
||||
|
||||
Définitions récursives
|
||||
-----------------------
|
||||
|
@ -31,13 +42,14 @@ On peut imprimer leur valeurs pour qques valeurs::
|
|||
|
||||
begin
|
||||
for i = 1 to 15 do
|
||||
printf "%d " (f (i)) done;
|
||||
printf "%d " (f(i)) done;
|
||||
printf "\n"
|
||||
end ;;
|
||||
|
||||
f, g sont les fonctions de Fibonacci et factorielles. C'est la même notation que pour les suites récurrentes. Que valent h et m?
|
||||
f, g sont les fonctions de Fibonacci et factorielles. C'est la même notation que pour les suites récurrentes. Que valent h et m ?
|
||||
|
||||
La récursivité est très puissante. Invention de Kleene (1935). Théorie des fonctions récursives, comme moyen général de calcul. On peut montrer qu'il existe toujours des fonctions récursives partielles (qui ne terminent pas pour tte valeur de leurs arguments), si on veut un modèle général. La sous théorie des fonctions récursives primitives correspond aux programmes sans boucles, sans appels récursifs, et l'instruction for. Ces programmes terminent toujours. (cf Introduction to Metamathematics, S. Kleene; Recursive Functions Theory and Logic, A. Yasuhara).
|
||||
La récursivité est très puissante. Invention de Kleene (1935). Théorie des fonctions récursives, comme moyen général de calcul.
|
||||
On peut montrer qu'il existe toujours des fonctions récursives partielles (qui ne terminent pas pour tte valeur de leurs arguments), si on veut un modèle général. La sous théorie des fonctions récursives primitives correspond aux programmes sans boucles, sans appels récursifs, et l'instruction for. Ces programmes terminent toujours. (cf Introduction to Metamathematics, S. Kleene; Recursive Functions Theory and Logic, A. Yasuhara).
|
||||
|
||||
Church et les autres logiciens des années 30 ont montré que systèmes de Post, les fonctions récursives de Kleene, les machines de Turing, sont tous équivalentes. Il a émis la thèse suivante: tous les modèles de la calculabilité sont équivalents.
|
||||
|
||||
|
@ -53,8 +65,7 @@ Fonctions récursives
|
|||
dans le prompt::
|
||||
|
||||
utop # let rec fact n = if n > 1 then n * fact (n -1) else 1;;
|
||||
val fact : int -> int = <fun>
|
||||
counter: 0 }─utop # fact 5;;
|
||||
utop # fact 5;;
|
||||
- : int = 120
|
||||
|
||||
et mutuellement récursives::
|
||||
|
|
Loading…
Reference in New Issue