Sujet ENS Info 2008

beauby

Sujet ENS Info 2008

Message par beauby » 27 avr. 2010 23:26

Bonjour à tous,

En faisant ce sujet, dont l'énoncé est disponible ici: http://www.ens.fr/IMG/file/concours/200 ... t_info.pdf, j'ai eu un problème pour la question 1.1.3.
Il est demandé de donner un algorithme qui détermine si un graphe connexe donné est acyclique, ce qui se fait sans trop de souci à l'aide d'un parcours en profondeur du-dit graphe. Il s'agit ensuite d'en prouver la correction, et autant il est facile de voir que si l'algorithme trouve un cycle, c'est qu'il y en a effectivement un, autant j'ai du mal à montrer que s'il n'en trouve pas, on est certain qu'il n'y en a pas. Si par hasard quelqu'un avait une idée... :)

Beauby

nael

Re: Sujet ENS Info 2008

Message par nael » 28 avr. 2010 00:05

J'imagine que quand tu dis parcours en profondeur tu garde qquepart le predecesseur de ton sommet dans le parcours.
Moi je ferais comme ca :
- Tu montre que tout sommet dans la même composante connexe que celui duquel t'es parti est visité a un moment (recurrence sur la distance à ton sommet de départ).
- Suppose que ton graphe contient un cycle $ c_1,\dots,c_n $ et que, quitte a renumeroter, $ c_n $ est le dernier visité dans le cycle par le programme. Parmi $ \{c_{n-1},c_1\} $, au plus un seul des deux peut être le predecesseur de $ c_n $ donc quand ton algorithme verifie ses voisins, il detecte forcemment un cycle.

(Tout ceci si on suppose que tu as codé ton algo comme je le pense :wink:)

beauby

Re: Sujet ENS Info 2008

Message par beauby » 28 avr. 2010 06:49

Oui, effectivement ça marche bien comme ça, merci :)
J'ai maintenant un problème sur la question 2.1.3: Montrer que l'espace vectoriel $ \varphi(G,T) $ des cycles fondamentaux d'un graphe simple connexe $ G=(S,A) $, relatifs à un arbre couvrant $ T=(S,A') $, est une base de l'espace $ \Cal C(G) $ des cycles de $ G $.
Autant la liberté se montre facilement, autant pour le caractère générateur, j'ai du mal. J'arrive à conclure par la dimension de $ \varphi(G,T) $ à l'aide de la notion de cocycle, mais je crois pas que c'est ce qui est attendu par le sujet.
Une idée ?

nael

Re: Sujet ENS Info 2008

Message par nael » 28 avr. 2010 13:50

Je dirai par recurrence sur le nombre d'arretes dans $ A \setminus A' $ : en notant $ s(c) = c \cap (A \setminus A') $ on montre que, pour $ c \in \mathcal{C}(G) $, $ c = \sum_{a \in s(c)} \varphi_a $
- Il ne peut pas y en avoir 0, car l'arbre est acyclique
- Si il y en une, on a dejà prouvé l'unicité du cycle en (1.3.1), donc $ c = \varphi_a $
- Si il y en a $ n+1 $. Soit $ b \in s(c) $.
$ c + \varphi_b $ est la difference symmetrique entre $ c $ et $ \varphi_b $ donc $ s(c+\varphi_b) = s(c) \setminus {b} $ car $ \varphi_b $ n'a qu'une arrête dans $ A \setminus A' $.
Donc, $ c + \varphi_b = \sum_{a \in (s(c) \setminus \{b\})} \varphi_a $ donc $ c = \sum_{a \in s(c)} \varphi_a $

beauby

Re: Sujet ENS Info 2008

Message par beauby » 28 avr. 2010 18:34

Effectivement, merci une fois de plus ^^
J'en profite pour (te) poser une dernière question: Pour la question 2.2.2, est-ce que t'aurais une idée pour montrer que $ \{C_1,\dots,C_N\} $ est une base minimale ? (On voit facilement que c'est une base, mais j'ai du mal à montrer qu'elle est minimale)
En fait, j'arrive à montrer que si $ B = \{B_1,\dots,B_N\} $ est une base de $ \Cal C(G) $, alors $ \forall i \in \{1,\dots,N\}, \exists k \in \{1,\dots,N\} : w(B_k) \geq w(C_i) $, mais je vois pas comment conclure avec ça :/

nael

Re: Sujet ENS Info 2008

Message par nael » 28 avr. 2010 21:16

Alors la par contre, j'avais pas trouvé un truc simple.

Donc pour commencer j'ai montré que le poids d'un $ B_i $ est plus grand que tous ceux des $ C_k $ qui apparaissent dans sa decomposition dans la base $ C $.
C'est (encore) une recurrence, en gros, si $ B_i = \sum_j C_{k_j} $, alors $ ( B_i | S_{k_p}) \ket = \sum_{j \geq p} ( C_{k_j} | S_{k_p}) \ket $.
Donc, soit $ (B_i | S_{k_p}) = 1 $ et donc $ w(B_i) \geq w(C_{k_p}) $ car l'algorithme prends un cycle minimal etc.
Soit, ca fait zero, donc un des termes d'après, mettons $ (C_{k_q} | S_{k_q}) $ fait un, donc, $ w(C_{k_q}) \geq w(C_{k_p}) $ et d'après l'hypothèse de recurrence, $ w(B_i) \geq w(C_{k_q}) $.

Après il faut plus ou moins mettre les $ B_i $ et les $ C_i $ ensembles. Quitte a réordonner, on prends les $ C_i $ dans l'ordre de poids décroissant.
On va construire iterativement une extraction $ (B_{k_j})_j $ de $ B $ telle que $ w(B_{k_j}) \geq w(C_j) $.

Si on a construit $ B_{k_1}\dots B_{k_p} $ (p pouvant etre nul pour l'initialisation).
Si un des $ (C_j)_{j \leq p} $, disons $ C_r $ apparait encore dans la décomposition d'un des $ (B_j)_j $ pas encore utilisé, disons $ B_q $, c'est fini, car en posant $ k_{p+1} = q $, on a bien $ w(B_{k_{p+1}}) \geq w(C_r) \geq w(C_{p+1}) $ car les $ C $ sont en ordre décroissant de poids et $ r < p+1 $.
Sinon, il faut montrer que $ C_{p+1} $ apparait forcemment dans une des décompositions des $ (B_j) $ restants. Si ce n'etait pas le cas, on engendrerait une famille de rang $ N - p $ (les $ B $ restants) avec une famille de rang $ N - (p+1) $ (les $ (C_j)_{j > p+1} $), c'est impossible.
Donc on peut continuer l'éxtraction jusqu'a avoir placé tous les $ (B_j) $.

Ensuite plus qu'a sommer les inégalitées pour recuperer $ w(B) \geq w(C) $

Ouf... C'est un peu lourd a rédiger proprement, et je suis interessé si quelqun à plus simple.

Répondre