1. Représentation des graphes :
a) Listes d'adjacences :
#Liste de listes :
S=[ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' ] #liste de correspondance
G= [ ['b', 'c'], ['a', 'd', 'e'], ['a', 'd'], [ 'c', 'b', 'e'], ['b', 'c', 'e'], ['b', 'd', 'f', 'g'], ['e', 'g'], ['e', 'f'], ['g'] ]
#Dictionnaire :
G = { 'a': ['b', 'c'], 'b': ['a', 'd', 'e'], 'c': ['a', 'd'],'d' :[ 'c', 'b', 'e'], 'd': ['b', 'c', 'e'], 'e': ['b', 'd', 'f', 'g'],
'f': ['e', 'g'], 'g': ['e', 'f'], 'h': ['g'] }
b) Matrice d'adjacences :
S= ['a','b','c','d','e']
M = [ [0, 0, 1, 0, 1],
[0, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 1, 0, 1, 0]]
2. La structure de données deque :
L'implémentation des Piles et Files à l'aide d'une liste :
On utilise les méthodes pop et append avec les complexités suivantes :
O(1) pour append() et pop(-1)
O(n) pour pop(0)
L'implémentation des Files et Piles à l'aide de deque():
La structure deque (Doubly Ended Queue) du module collections est préférée à une liste dans les cas où
nous avons besoin d’opérations d’ajout et de suppression plus rapides à partir des deux extrémités de la
structure, car deque fournit une complexité temporelle O(1) pour toutes les opérations d’ajout et de
suppression par rapport à la liste qui peut avoir une complexité temporelle O(n).
Méthodes de deque :
append ajoute une valeur du côté droit du deque
append ajoute une valeur du côté gauche du deque
Supprime et renvoie la dernière valeur du deque
Supprime et renvoie la première valeur du deque
Exemple :
from collections import deque
File = deque()
File.append("A") #ajout à la fin de la File
File.append("B") #ajout à la fin de la File
print(File) #affiche deque(['A', 'B'])
File.popleft() #renvoie: 'A'
M = [ [0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0],
[0, 0, 0, 1, 0, 1],
[0, 1, 1, 0, 1, 0],
[0, 0, 0, 1, 0, 1],
Pas besoin d’une liste de correspondance dans ce cas !