exemples d'algorithmes sur des structures de données simples
This commit is contained in:
parent
9cdfc16cc5
commit
32376db319
|
@ -18,3 +18,45 @@ Exemple : les algorithmes de tri, de recherche dans un arbre, un graphe...
|
|||
|
||||
- la cryptologie
|
||||
- les stratégies de jeux
|
||||
|
||||
Tirés du monde réel
|
||||
--------------------
|
||||
|
||||
Le voyageur de commerce
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Le problème du voyageur de commerce, consiste en la recherche d’un trajet minimal permettant à un
|
||||
voyageur de visiter n villes. En règle générale on cherche à minimiser le temps de parcours total ou la
|
||||
distance totale parcourue.
|
||||
|
||||
Résolution par
|
||||
|
||||
- algorithme de parcours de graphes
|
||||
|
||||
- algorithmes génétiques
|
||||
|
||||
Les algorithmes génétiques s’appuient sur un principe de sélection des individus d’une population qui présen-
|
||||
tent des caractéristiques se rapprochant au mieux de ce que l’on recherche; cette population évoluant par
|
||||
ailleurs selon des critères d’évolution génétique à choisir. Dans le contexte du problème du voyageur de
|
||||
commerce, un individu est une tournée, un chemin et une population un ensemble de tournées. Il s’agit
|
||||
maintenant de dé...nir un critère de sélection ainsi que des règles d’évolution de la population.
|
||||
|
||||
- approches métaheuristiques (exemples: colonies de fourmis)
|
||||
|
||||
|
||||
Exemple de résolution
|
||||
|
||||
.. raw:: latex
|
||||
|
||||
\begin{algorithm}
|
||||
\caption{Algorithme du voyageur de commerce}\label{commerce}
|
||||
\begin{algorithmic}[1]
|
||||
|
||||
\BState \emph{Données} : $L$ \Comment{Liste des villes à parcourir avec les distances entre les villes}
|
||||
\BState \emph{Données} : $L'$ \Comment{Liste du parcours des villes à effectuer}
|
||||
\State \emph{début}
|
||||
\BState ...
|
||||
\State \emph{fin}
|
||||
|
||||
\end{algorithmic}
|
||||
\end{algorithm}
|
||||
|
|
|
@ -73,20 +73,19 @@ Modification de la structure de données
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
>>> l = [('host1', '10.1.2.3', '6E:FF:56:A2:AF:18'), ('host2', '10.1.2.4', '6E:FF:56:A2:AF:17'), ('host3', '10.1.2.5', '6E:FF:56:A2:AF:19')]
|
||||
>>> l = [('host1', '10.1.2.3', '6E:FF:56:A2:AF:18'), ('host3', '10.1.2.5', '6E:FF:56:A2:AF:19')]
|
||||
>>> result = []
|
||||
>>> for hostname, ip, macaddress in l:
|
||||
... result.append(dict(hostname=hostname, ip=ip, macaddress=macaddress))
|
||||
...
|
||||
>>> result
|
||||
[{'hostname': 'host1', 'ip': '10.1.2.3', 'macaddress': '6E:FF:56:A2:AF:18'},
|
||||
{'hostname': 'host2', 'ip': '10.1.2.4', 'macaddress': '6E:FF:56:A2:AF:17'},
|
||||
{'hostname': 'host3', 'ip': '10.1.2.5', 'macaddress': '6E:FF:56:A2:AF:19'}]
|
||||
>>>
|
||||
|
||||
|
||||
Structures de données complexes
|
||||
================================
|
||||
-------------------------------
|
||||
|
||||
- graphes
|
||||
- arbres
|
||||
|
@ -107,7 +106,7 @@ Structures de données complexes
|
|||
pire cas.
|
||||
|
||||
Les types produits
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
-------------------
|
||||
|
||||
Les types construits permettent de structurer l’information.
|
||||
|
||||
|
@ -157,7 +156,7 @@ est renvoyée.
|
|||
- : int list = [4 ;1 ;5 ;8 ;1]
|
||||
|
||||
Algorithme de la longueur d'une liste
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
--------------------------------------
|
||||
|
||||
.. code-block:: ocaml
|
||||
|
||||
|
@ -170,7 +169,7 @@ Cette fonction est prédéfinie en Ocaml : `List.length`
|
|||
|
||||
|
||||
Algorithmes de tri
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
------------------
|
||||
|
||||
On désigne par "tri" l'opération consistant à ordonner un ensemble d'éléments en fonction de clés sur lesquelles est définie une relation d'ordre.
|
||||
|
||||
|
@ -179,8 +178,8 @@ Ils sont fondamentaux dans certains domaines (exemples : map-reduce en database
|
|||
|
||||
L'étude du tri est également intéressante en elle-même, c'est un des domaines de l'algorithmique très étudié et connu.
|
||||
|
||||
Algorithme de tri par insertion
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Tri par insertion
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Cet algorithme de tri suit de manière naturelle la structure récursive des
|
||||
listes. Soit l une liste à trier :
|
||||
|
@ -203,8 +202,8 @@ Description de l'algorithme
|
|||
# inserer 5 [3 ;7 ;10];;
|
||||
- : int list = [3 ; 5 ; 7 ; 10]
|
||||
|
||||
Algorithme de tri rapide
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Tri rapide
|
||||
~~~~~~~~~~~~
|
||||
|
||||
soit une liste l à trier :
|
||||
|
||||
|
|
|
@ -205,7 +205,7 @@ Il est possible de communiquer de la manière suivante avec un programme :
|
|||
|
||||
Exemple de lecture d'une entrée utilisateur
|
||||
|
||||
.. block-code:: python
|
||||
.. code-block:: python
|
||||
|
||||
# coding: utf-8
|
||||
prenom = raw_input("quel est ton prénom ? \n")
|
||||
|
|
Loading…
Reference in New Issue