# Affectation des algo
###### tags: `organisation`
## Algorithmes
- Suppression/Duplication/Matrice
- Conversion adjacence -> incidence
- calcul degrés entrant/sortant
- Liste de voisins
- Plus court chemin
- Arborescence de poid minimum
- Anti arborescence
- Coloration
- Stables/cliques
- PERT
- Gestion des flots
- Problème du voyageur de commerce
- Chaines eulériennes
- Chaine hamiltonienne
## Membre du groupe
### Guillaume
- Arborescence de poids minimum
Entrée : Graphe G
Pour chaque Sommet
Prendre le plus petit poids d'arc entrant et le soustraire à chaque poids d'arc entrant
Fin pour
Créer un nouveau Graphe contenant tous les sommets et les arcs de poids 0 (si plusieurs arcs de poids 0 pour un sommet choisir arbitrairement)
Sortie : une Arborescence (Graphe)
- Anti arborescence
Inversion du sens des arcs + application de l'algo d'arborescence.
### Camille
- PERT
```
Algorithme: PERT
Entrée: nom et durée des tâches, contraintes d'antériorité
Sortie: graphe avec date au plus tôt et au plus tard, tâche et chemin critique
Pour tous sommet s
Pout tout sommet t
Si s est un antécédent de t, ajouter t aux successeurs de s.
Fin Pour
Fin Pour
Créer un sommet "départ" et lui affecter la valeur 0 comme date au plus tôt.
Pour toute tâche t n'ayant aucune contrainte d'antériorité
Créer le sommet t et un arc a allant de départ vers t.
Affecter à a la durée de t.
La date au plus tôt de t est égale à la durée de t.
Fin Pour
Tant qu'il existe une tâche non traitée
Pour toute tâche t ayant une unique contrainte d'antériorité sur une tâche x déjà traitée
Créer le sommet t et un arc a allant du sommet x vers s.
Affecter à a la durée de t.
La date au plus tôt de t est égale à la date au plus tôt de x plus la durée de t.
Fin Pour
Pour tout tâche t ayant plus d'une contraînte d'antériorité sur des tâches x1, x2, ..., xn toutes déjà traitées
Si la postériorité du xi ayant la valeur au plus tôt la plus élevée est égal à 1, alors
Créer le sommet t et un arc allant du sommet xi ayant la date au plus tôt la plus élevée au nouveau sommet.
Créer un arc fictif entre chaque sommet antérieur et le sommet xi.
Affecter à a la durée de t.
La date au plus tôt de t est égale à la date au plus tôt de x plus la durée de t.
Sinon
Créer un noueau sommet x1 + x2 ... + xn = SS
Créer un arc fictif entre chaque sommet antérieur et le sommet SS.
Affecter au nouveau sommet SS la valeur de la date au plus tôt du sommet xi le plus grand.
Créer un nouveau sommet t et un arc a allant du sommet SS au sommet t.
Affecter à a la durée de t.
La date au plus tôt de t est égale à la date au plus tôt de SS plus la durée de t.
Fin Pour
Fin Tant que
Créer un sommet "arrivée", créer un arc fictif entre tous les sommets n'ayant aucun successeurs et ce sommet.
Affecter à arrivée la valeur de la date au plus tôt la plus élevée, comme date au plus tôt et au plus tard.
Pour chaque sommet s
la date au plus tard de s est égale à la date au plus tard la moins élevée de ses successeurs moin
s la valeur de l'arc les rejoignant.
Fin Pour
```
### Hugo
- Gestion des flots
### Salsa
- Liste de voisins ( compléxité au dans le pire des cas O(Nb de sommets - 1))
Entrées: Sommet S, Graphe G
Sorties: Liste de voisin du Sommet S
Variable: Liste
On initialise une liste L a NULL.
Pour toutes les colonnes de la ligne de sommet S de la matrice d'adjcence :
Si il existe un arc entre le sommet S et un sommet de la matrice:
On ajoute à la liste L, le nom du sommet de la colonne.
FinSi
FinPour
Return Liste L
### Sébastien
- Calcul degrés entrant/sortant
Entrées: Sommet S, Graphe G
Sorties: Degrés entrant, Degrés sortant, Nombre de voisins
Variable: Successeur, Predecesseur, Nombre de voisins
On initialise le successeur et le predeceseur a 0, ainsi que le nombre de voisin a 0.
Pour toutes les ligne et les colonnes de la matrice d'adjcence jusqu'a la fin.
Si il existe un arc entre le sommet S et un sommet de la matrice:
On augmente le nombre de voisin pour le sommet ainsi que le nombre de successeurs.
Fin Si
Si il existe un arc entre un sommet de la matrice et le sommet S
On augmente le nombre de voisin pour le sommet ainsi que le nombre de predecesseurs.
Fin Si
Fin Pour
- Conversion adjacence -> incidence
Entrées: Matrice d'ajacence MA
Sortie: Matrice d'incidence MI de taille n*m avec m le nombre d'arc dans le graphe et n le nombre de sommet
Pour toutes les lignes de MA
Pour toutes les colonnes de MA
Si il existe un arc entre le sommet S et un sommet voisin T
On ajoute un arc dans la matrice d'incidence
Alors on met a 1 entre S et T
2 Et -1 entre T et S
Fin Si
Fin Pour
Fin Pour
### Alexandre
- Plus court chemin
Floyd-Warshall:
Entrée: Matrice d'adjacence A correpondante au graphe, Matrice pere MP
Sortie: Matrice avec les distances et la matrice pere MP remplie
```
On copie la matrice MA dans la matrice MA'
pour tout les sommets K de la matrice
pour toute les lignes S de la matrice
pour toute les colonnes T de la matrice
On compare les chemins direct (entre S et T)
et les chemins utilisant k comme intermediaire (S-K et K-T).
Si le chemin intermediaire est plus court que le chemin
direct on le remplace dans la matrice MA' et on K devient
le sommet pere de T dans la matrice MP
Fin pour
Fin pour
Fin pour
```
Ford-Bellman:
Entrée: Le graphe G sans cycle absorbant, un sommet choisis, les poids des arcs.
Sortie: Tableau des distance(TD) entre S et tout les autres sommets T. Tableau des chemins(TC) entre S et tout les autre sommet T.
```
Pour tout les sommets T
On met la case du TD a l'infini
Fin pour
On met la case S du TD a 0
On repete un nombre de fois egal au nombre de sommet
Pour tout les arcs (T, U) de G
La distance dans le TD a la case U est egal au minimum entre
la valeur deja presente dans cette case et la valeur dans la
case T + le poids de l'arc (T, U).
Fin pour
Si il n'y a eu aucun changement de valeur lors du dernier passage
on arrete l'algorithme.
Fin repetition
```
### Théo
- Coloration
```
Algorithme : DSATUR
Entree : Liste L des sommets du graphe G
Sortie : Liste des sommets et leur couleur associée
---------------------------------------------------------------------
L = Ordonner L par ordre décroissant de degrés
S = Sommet de degré maximum dans L
Colorer S avec la couleur 1
Tant que tous les sommets de L ne sont pas colorés :
S_0 = Sommet avec le DSAT le plus important dans L (Si égalité
prendre le sommet de degrés maximum)
Colorer S_0 avec la plus petite couleur possible (absente de son voisinage)
Fin Tant que
Retouner la liste des sommets et de leur couleur associée
```
Fonction de calcul de DSAT :
```
DSAT(S)= nombre de couleurs différentes dans les sommets adjacents à S
```
- Stables/cliques
- Stables : On utilise DSATUR
- Clique : On inverse le graphe et on applique DSATUR
```
Algorithme : Inversion de graphe
Entree : Matrice M d'ajacence
Sortie : Matrice W d'adjacence du graphe inversé
---------------------------------------------------------------------
Parcourir la matrice M:
Remplacer 1 par 0
Remplacer 0 par 1 sauf sur la diagonale
Renvoyer W matrice inverse de M
```
### Amandine
- Chaine eulérienne
```
Algorithme : EULERIEN
Entrée : Sommet S, Graphe G
Sortie : Liste de sommets formant une chaine Eulérienne (vide ou non)
---------------------------------------------------------------------
Si S est isolé
Retourne le circuit sous forme de liste.
Fin Si
Sinon
Sauvegarde du circuit qui contient le sommet S.
Sauvegarde du graphe G' qui prends la valeur de G sans le circuit qui contient le sommet S.
Parcours des sommets du circuit qui contient le sommet S :
Concaténation du circuit qui contient le sommet S + ALGORITHME EULERIEN sur G' et le sommet parcouru.
Fin Sinon
```
- Chaine hamiltonienne O(n2) ?
```
Algorithme : HAMILTONIEN
Entrée : Graphe G
Sortie : Liste de sommets formant une chaine Hamiltonienne (vide ou non)
Variable : Sommet S
------------------------------------------------------------------------
Parcours de la matrice du graphe horizontalement et verticalement :
Si tout les sommets sont marqué
Retourne la liste de sommets.
Fin Si
Si S est isolé et tout les sommets ne sont pas marqués
Retourne une liste vide.
Fin Si
Si S non marqué
Marque le sommet.
Fin Si
Si le sommet S+1 parcouru horizontalement est successeur du sommet S sur lequel on se trouve verticalement et non marqué
Marque le sommet successeur S+1.
Concaténation de la liste de sommet avec ce même sommet S+1.
Continue le parcours de la matrice depuis ce sommet S+1.
Fin Si
Fin Boucle
```
### Vincent
- Problème du voyageur de commerce.
```
Algorithme : LITTLE
Entréee : Graphe G, Arbre A
Sortie : Arbre binaire avec le coût total pour chaque feuille de l'arbre
Variable : entier T
------------------------------------------------------------------------
Si la matrice du graphe est nulle
Renvoie A
Sinon
Parcours de la matrice du graphe horizontalement et verticalement :
Si il n'y a pas d'arc de poids nul à partir du sommet
Cherche l'arc de poids le plus faible et on soustrait son poids à tous les arcs partant de ce sommet
Ajoute son poids dans T
Fin Si
Racine de A prend la valeur T
Pour chaque arc de poids nul dans notre matrice
Calcul du regret associé (Ajout du poids le plus faible de la ligne et de la colonne autre que l'arc sélectionné)
Fin Pour
On sélectionne l'arc avec le plus grand regret
Création de deux feuilles
Fils gauche prend la valeur du parent plus le regret (cas trajet exclu)
Fils droit prend en récursif l'algorithme de Little avec l'arbre A et la matrice du graphe sans l'arc choisi (cas trajet inclus)
Fin Si
```
### Truc a ne pas oublier dans le cdc:
- Manque certaines complexité
- Faire la conclusion
- voir les info sur les modules (a appronfondir potentiellement)
-