319 lines
39 KiB
Plaintext
319 lines
39 KiB
Plaintext
|
|
{
|
|||
|
|
"cells": [
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## Annexe optionnelle — Dijkstra avec une structure de données en dictionnaire\n",
|
|||
|
|
"\n",
|
|||
|
|
"### 2ème mise en œuvre de l'algorithme de Dijkstra\n",
|
|||
|
|
"VERSION corrigée\n",
|
|||
|
|
"\n",
|
|||
|
|
"> **Cette annexe est facultative**, pour les étudiantes à l'aise en Python qui veulent aller plus loin après la Séance 7. Elle reprend le même algorithme que la Séance 7, mais avec une structure de données en dictionnaire plutôt qu'en liste — un bon exercice de transfert, mais pas un prérequis pour la suite du cours."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"Conditions de réalisation de l'évaluation:\n",
|
|||
|
|
"- Travail en binome.\n",
|
|||
|
|
"- A rendre dans un délai de 15 jours après la séance.\n",
|
|||
|
|
"- soit en complétant le notebook fourni soit sous la forme d'un fichier exécutable .py."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"attachments": {
|
|||
|
|
"image.png": {
|
|||
|
|
"image/png": "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
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"# 1- Présentation\n",
|
|||
|
|
" Lors de l'activité précédente vous avez abouti à l'implémentation de l'algorithme de Dijkstra en vous appuyant sur une structure de données sous forme de liste.\n",
|
|||
|
|
"Le graphe :\n",
|
|||
|
|
"\n",
|
|||
|
|
"Cette fois ci je vous demande de construire une solution dans laquelle le graphe serait représenté sous la forme d'un dictionnaire dans lequel les clés serait les sommets."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## 2- Représentation du graphe par un dictionnaire\n",
|
|||
|
|
" ### Travail 1 : définir la structure de donnée\n",
|
|||
|
|
"Définir la structure de donnée pour représenter le graphe sous forme d’un dictionnaire. \n",
|
|||
|
|
" L'idée est de créer un dictionnaire dans lequel chaque sommet serait une clé. Et pour chaque clé on aurait à nouveau un dictionnaire contenant les sommets adjacents et la distance depuis le sommet précédent.\n"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 7,
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [],
|
|||
|
|
"source": [
|
|||
|
|
"#création du dictionnaire du graphe pondéré pour la recherche du plus court chemin\n",
|
|||
|
|
"graph = {\n",
|
|||
|
|
"'A': {'B': 4, 'C': 2},\n",
|
|||
|
|
"'B': {'A': 4, 'C': 6, 'E':5},\n",
|
|||
|
|
"'C': {'A': 2, 'B': 6, 'D': 3, 'H' : 5},\n",
|
|||
|
|
"'D': {'C': 3, 'H': 1, 'G': 4, 'F': 3},\n",
|
|||
|
|
"'E': {'B': 5, 'F': 2},\n",
|
|||
|
|
"'F': {'E': 2, 'D': 3, 'G': 7},\n",
|
|||
|
|
"'G': {'F': 7, 'D': 4, 'H': 10},\n",
|
|||
|
|
"'H': {'C': 5, 'D': 1, 'G': 10},\n",
|
|||
|
|
"}"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"Vous avez la possibilité de revenir vers l’enseignant pour valider votre solution."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## 3- Implémentation de l'algorithme de Dijkstra\n",
|
|||
|
|
" ### Travail 2 : implémenter votre solution\n",
|
|||
|
|
" Votre solution sera documentée et s'appuiera sur le travail réalisé en classe.\n"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 8,
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [],
|
|||
|
|
"source": [
|
|||
|
|
"def initialisation(s_debut):\n",
|
|||
|
|
" \"\"\"\n",
|
|||
|
|
" initialisation des variables permettant de parcourir le graphe\n",
|
|||
|
|
" Parameters\n",
|
|||
|
|
" ----------\n",
|
|||
|
|
" depart : string\n",
|
|||
|
|
" sommet de depart pour le parcours du graphe.\n",
|
|||
|
|
" Returns\n",
|
|||
|
|
" -------\n",
|
|||
|
|
" E_calcul : dict\n",
|
|||
|
|
" chemin en cours de calcul: poids et sommet précédent\n",
|
|||
|
|
" E_calcul = {s_debut:[poids,prédécesseur]}\n",
|
|||
|
|
" la distance au sommet de depart est nulle\n",
|
|||
|
|
" E_sommets : dict\n",
|
|||
|
|
" on met dans le dictionnaire provisoire les sommets adjacents \n",
|
|||
|
|
" et leur poids par rapport au point de départ\n",
|
|||
|
|
" E_sommets = {s_voisin1: [poids,depart],...}\n",
|
|||
|
|
" \"\"\"\n",
|
|||
|
|
" assert type(s_debut) == str, \" s_debut doit être un caractère \"\n",
|
|||
|
|
" \n",
|
|||
|
|
" E_calcul = dict()\n",
|
|||
|
|
" E_calcul = {s_debut:[0,s_debut]}\n",
|
|||
|
|
" \n",
|
|||
|
|
" E_sommets=dict()\n",
|
|||
|
|
" for suivant in graph[s_debut]:\n",
|
|||
|
|
" #chemins en cours d'exploration : sommet: poids, précédent\n",
|
|||
|
|
" E_sommets[suivant]=[graph[s_debut][suivant],s_debut]\n",
|
|||
|
|
"\n",
|
|||
|
|
" return E_calcul,E_sommets"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 9,
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [],
|
|||
|
|
"source": [
|
|||
|
|
"def Maj_poids(s_voisin,s_mini,poids, E_sommets):\n",
|
|||
|
|
" \"\"\"\n",
|
|||
|
|
" Mise à jour du poids et du prédécesseur\n",
|
|||
|
|
" \n",
|
|||
|
|
" Parameters\n",
|
|||
|
|
" ----------\n",
|
|||
|
|
" s_voisin : str\n",
|
|||
|
|
" sommet voisin\n",
|
|||
|
|
" s_mini : str\n",
|
|||
|
|
" sommet de poids mini\n",
|
|||
|
|
" poids : int\n",
|
|||
|
|
" poids du chemin le plus court \n",
|
|||
|
|
" E_sommets : dict\n",
|
|||
|
|
" dictionnaire des chemins en cours d'exploration'\n",
|
|||
|
|
"\n",
|
|||
|
|
" Returns\n",
|
|||
|
|
" -------\n",
|
|||
|
|
" E_sommets : dict\n",
|
|||
|
|
" dictionnaire des chemins en cours d'exploration mise à jour\n",
|
|||
|
|
" avec le poids et le sommet de poids mini\n",
|
|||
|
|
"\n",
|
|||
|
|
" \"\"\"\n",
|
|||
|
|
" #si le sommet est nouveau\n",
|
|||
|
|
" #mettre àjour poids et prédecesseur\n",
|
|||
|
|
" if s_voisin in E_sommets: \n",
|
|||
|
|
" d=poids + graph[s_mini][s_voisin]\n",
|
|||
|
|
" if d< E_sommets[s_voisin][0]:\n",
|
|||
|
|
" #mémoriser son prédécesseur et le poids depuis le début\n",
|
|||
|
|
" E_sommets[s_voisin] = [d,s_mini]\n",
|
|||
|
|
" else:\n",
|
|||
|
|
" #si le sommet est déjà découvert mettre à jour le poids\n",
|
|||
|
|
" E_sommets[s_voisin]=[poids + graph[s_mini][s_voisin],s_mini]\n",
|
|||
|
|
" return E_sommets"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 10,
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [],
|
|||
|
|
"source": [
|
|||
|
|
"def Dijkstra(graphe, s_debut):\n",
|
|||
|
|
" \"\"\"\n",
|
|||
|
|
" Cette fonction implémente l'algorithme de dijkstra\n",
|
|||
|
|
" Parameters\n",
|
|||
|
|
" ----------\n",
|
|||
|
|
" graphe : dict\n",
|
|||
|
|
" DESCRIPTION. description du graphe\n",
|
|||
|
|
" s_debut : str\n",
|
|||
|
|
" DESCRIPTION. le sommet de départ\n",
|
|||
|
|
"\n",
|
|||
|
|
" Returns\n",
|
|||
|
|
" -------\n",
|
|||
|
|
" calcul: dict\n",
|
|||
|
|
" le résultat de l'algorithme de dijkstra\n",
|
|||
|
|
"\n",
|
|||
|
|
" \"\"\"\n",
|
|||
|
|
" assert type(s_debut) == str, \" s_debut doit être un caractère \"\n",
|
|||
|
|
" assert type(graphe) == dict, \"graphe doit être un dictionnaire\"\n",
|
|||
|
|
" \n",
|
|||
|
|
" \n",
|
|||
|
|
" #phase d'initialisation des données\n",
|
|||
|
|
" E_calcul,E_sommets=initialisation(s_debut)\n",
|
|||
|
|
" \n",
|
|||
|
|
" #tant que provisoire non vide\n",
|
|||
|
|
" while E_sommets!= {}: \n",
|
|||
|
|
" #recherche de la distance la plus faible\n",
|
|||
|
|
" s_mini=min(E_sommets, key=E_sommets.get) \n",
|
|||
|
|
" #ajout du sommet de valeur minimum aux sommets explorés\n",
|
|||
|
|
" E_calcul[s_mini]=E_sommets[s_mini]\n",
|
|||
|
|
" poids = E_sommets[s_mini][0]\n",
|
|||
|
|
" \n",
|
|||
|
|
" #suppression du sommet des chemins en cours d'exploration\n",
|
|||
|
|
" del E_sommets[s_mini] \n",
|
|||
|
|
" \n",
|
|||
|
|
" #pour chaque sommet voisin de x\n",
|
|||
|
|
" for s in graphe[s_mini]:\n",
|
|||
|
|
" if s not in E_calcul:\n",
|
|||
|
|
" Maj_poids(s, s_mini, poids,E_sommets) \n",
|
|||
|
|
" \n",
|
|||
|
|
" print(\"calcul \", E_calcul)\n",
|
|||
|
|
" return E_calcul"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": null,
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [],
|
|||
|
|
"source": []
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"### Travail 3: La vérification de votre implémentation\n",
|
|||
|
|
" "
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 11,
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [],
|
|||
|
|
"source": [
|
|||
|
|
"def routage(calcul,depart,arrivee): \n",
|
|||
|
|
" \"\"\"\n",
|
|||
|
|
" Cette fonction donne le routage d'un point A à B à partir\n",
|
|||
|
|
" du résultat obtenu par l'algo de dijkstra\n",
|
|||
|
|
"\n",
|
|||
|
|
" Parameters\n",
|
|||
|
|
" ----------\n",
|
|||
|
|
" calcul : Dict\n",
|
|||
|
|
" résultat de l'algo de dijkstra\n",
|
|||
|
|
" depart : string\n",
|
|||
|
|
" départ\n",
|
|||
|
|
" arrivee : string\n",
|
|||
|
|
" arrivée\n",
|
|||
|
|
"\n",
|
|||
|
|
" Returns\n",
|
|||
|
|
" -------\n",
|
|||
|
|
" routage : list\n",
|
|||
|
|
" le routage de A à B\n",
|
|||
|
|
" distance : int\n",
|
|||
|
|
" la distance\n",
|
|||
|
|
"\n",
|
|||
|
|
" \"\"\"\n",
|
|||
|
|
" \n",
|
|||
|
|
" routage = [arrivee]\n",
|
|||
|
|
" distance=calcul[arrivee][0]\n",
|
|||
|
|
" #création de la liste de routage\n",
|
|||
|
|
" while routage[0]!= depart: \n",
|
|||
|
|
" for key in calcul:\n",
|
|||
|
|
" if key==routage[0]:\n",
|
|||
|
|
" routage.insert(0,calcul[routage[0]][1]) \n",
|
|||
|
|
" return routage,distance"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 12,
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"calcul {'A': [0, 'A'], 'C': [2, 'A'], 'B': [4, 'A'], 'D': [5, 'C'], 'H': [6, 'D'], 'F': [8, 'D'], 'E': [9, 'B'], 'G': [9, 'D']}\n",
|
|||
|
|
"le plus court chemin est: ['A', 'C', 'D', 'G']\n",
|
|||
|
|
"la distance parcourue : 9\n"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"resultat = Dijkstra(graph,\"A\")\n",
|
|||
|
|
"routage, distance= routage(resultat,\"A\",\"G\")\n",
|
|||
|
|
"print(\"le plus court chemin est: \", routage)\n",
|
|||
|
|
"print(\"la distance parcourue : \", distance)"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": null,
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [],
|
|||
|
|
"source": []
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"metadata": {
|
|||
|
|
"kernelspec": {
|
|||
|
|
"display_name": "Python 3",
|
|||
|
|
"language": "python",
|
|||
|
|
"name": "python3"
|
|||
|
|
},
|
|||
|
|
"language_info": {
|
|||
|
|
"codemirror_mode": {
|
|||
|
|
"name": "ipython",
|
|||
|
|
"version": 3
|
|||
|
|
},
|
|||
|
|
"file_extension": ".py",
|
|||
|
|
"mimetype": "text/x-python",
|
|||
|
|
"name": "python",
|
|||
|
|
"nbconvert_exporter": "python",
|
|||
|
|
"pygments_lexer": "ipython3",
|
|||
|
|
"version": "3.7.6"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"nbformat": 4,
|
|||
|
|
"nbformat_minor": 4
|
|||
|
|
}
|