From 3b23eb2ac1dd9f99de70317f4313e33b4eb3ed4b Mon Sep 17 00:00:00 2001 From: Orestis <orestis.malaspinas@pm.me> Date: Fri, 6 May 2022 17:38:59 +0200 Subject: [PATCH] added image and slide for adjacency --- slides/cours_24.md | 100 ++++++++++++++++++++++++++++++++ slides/figs/ex_graphe_cycle.pdf | Bin 0 -> 16261 bytes 2 files changed, 100 insertions(+) create mode 100644 slides/figs/ex_graphe_cycle.pdf diff --git a/slides/cours_24.md b/slides/cours_24.md index 00061e1..28f05ba 100644 --- a/slides/cours_24.md +++ b/slides/cours_24.md @@ -244,5 +244,105 @@ avec $k$ la longueur de la chaîne (le nombre d'arêtes du chemin). ::: +# Généralités + +## Définition + +* Un graphe orienté est dit **fortement connexe**, s'il existe un chemin reliant n'importe quelle paire de sommets distincts. + +## Exemples + +\ + +::: columns + +:::: column + +{width=60%} + +:::: + +:::: column + +{width=100%} + +:::: + +::: + +# Généralités + +## Définition + +* Un **cycle** dans un graphe *non-orienté* est une chaîne de longueur $\leq 3$ telle que le 1er sommet de la chaîne est le même que le dernier, et dont les arêtes sont distinctes. +* Pour un graphe *orienté* on parle de **circuit**. +* Un graphe sans cycles est dit **acyclique**. + +## Exemples + +{width=100%} + +# Question de la mort + +* Qu'est-ce qu'un graphe connexe acyclique? + +. . . + +* Un arbre! + +# Représentations + +* La complexité des algorithmes sur les graphes s'expriment en fonction du nombre de sommets $V$, et du nombre d'arêtes $E$: + * Si $|E|\sim |V|^2$, on dit que le graphe est **dense**. + * Si $|E|\sim |V|$, on dit que le graphe est **peu dense**. +* Selon qu'on considère des graphes denses ou peu denses, différentes structure de données peuvent être envisagées. + +## Question + +* Comment peut-on représenter un graphe informatiquement? Des idées (réflexion de quelques minutes)? + +. . . + +* Matrice/liste d'adjacence. + +# Matrice d'adjacence + +* Soit le graphe $G(V,E)$, avec $V=\{1, 2, 3, ..., n\}$; +* On peut représenter un graphe par une **matrice d'adjacence**, $A$, de dimension $n\times n$ définie par +$$ +A_{ij}=\left\{ \begin{array}{ll} + 1 & \mbox{si } i,j\in E,\\ + 0 & \mbox{sinon}. + \end{array} \right. +$$ + + +::: columns + +:::: column + +## Exemple + +```{.mermaid format=pdf width=400 loc=figs/} +graph LR; + 1---2; + 1---4; + 2---5; + 4---5; + 5---3; +``` + +:::: + +:::: column + +## Quelle est la matrice d'adjacence (1min)? + +. . . + +:::: + +::: + diff --git a/slides/figs/ex_graphe_cycle.pdf b/slides/figs/ex_graphe_cycle.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d75b0fdc98e52e1abe38adaf3566cc3edc18f60c GIT binary patch literal 16261 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%0AUjoV>lfPa-@QONPcKu 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 literal 0 HcmV?d00001 -- GitLab