68 CHAPITRE 5. CALCUL DES ETATS ATTEIGNABLES PARTITIONNÉAlgorithme Breadth First Search. L’algorithme traditionnel se traduit par la définitiond’une fonction bfs (R, N) où la variable R représente l’ensemble <strong><strong>de</strong>s</strong> états atteints et N représentel’ensemble <strong><strong>de</strong>s</strong> nouveaux états. Le calcul <strong>de</strong> la fonction se décompose en <strong>de</strong>ux cas selonque l’ensemble <strong><strong>de</strong>s</strong> nouveaux états est vi<strong>de</strong> ou non. Ainsi, l’algorithme 2.1 page 21 se traduit <strong>de</strong>la manière suivante :{R si N = ∅bfs (R, N) =bfs (R ′ , N ′ (5.10)) sinonavec R ′ = (∆(N) ∪ R)N ′ = (∆(N) R)Cette fonction nous permet <strong>de</strong> définir R bfs mathématiquement, en calculant l’ensemble <strong><strong>de</strong>s</strong> états<strong>atteignables</strong> à partir <strong>de</strong> l’état initial ι :R bfs = bfs (ι, ι) (5.11)Algorithme partitionné Notre algorithme partitionné (algorithme 5.1 page 62) se traduitpar la définition d’une fonction part (R, P, A) où R représente l’ensemble <strong><strong>de</strong>s</strong> états atteints, Preprésente l’ensemble <strong><strong>de</strong>s</strong> états en attente et A représente l’intérieur <strong>de</strong> notre frontière. L’ensembleA ′ désigne ici un ensemble quelconque contenant A.part (R, P, A) =⎧⎪⎨ R si P = ∅part (R, P, A⎪⎩′ ⊃ A) si P ≠ ∅ et P ∩ A = ∅part (R ′ , P ′ , A) sinonavec R ′ = (∆(P ∩ A) ∪ R)P ′ = (∆(P ∩ A) R) ∪ (P A)(5.12)Fondamentalement, l’algorithme partitionné se décompose en trois cas. Si l’ensemble <strong><strong>de</strong>s</strong> étatsen attente est vi<strong>de</strong> alors la fonction retourne R. Si l’ensemble <strong><strong>de</strong>s</strong> états en attente situés àl’intérieur <strong>de</strong> notre frontière est vi<strong>de</strong> (P ∩ A = ∅), alors nous faisons croître A en A ′ . Sinon,nous calculons l’image <strong><strong>de</strong>s</strong> états en attente situés à l’intérieur <strong>de</strong> la frontière.Cette fonction permet <strong>de</strong> définir R part <strong>de</strong> la manière suivante, à partir <strong>de</strong> l’état initial ι et d’unensemble A initial que nous pouvons supposer vi<strong>de</strong> dans le pire <strong><strong>de</strong>s</strong> cas :Nous pouvons par ailleurs remarquer que :R part = part (ι, ι, ∅) (5.13)part ( ι, ι, B K) = bfs (ι, ι) (5.14)5.2.2 Correction <strong>de</strong> l’algorithme traditionnel5.2.2.1 <strong>Calcul</strong> <strong>de</strong> bfs (R, N)Soient R n et N n les suites décrivant l’évolution <strong>de</strong> R et N dans les appels successifs <strong>de</strong> lafonction bfs :
5.2. CORRECTION DES ALGORITHMES 69– si n = 1R 1 = ιN 1 = ι (5.15)– si n > 1R n = ∆(N n−1 ) ∪ R n−1N n = ∆(N n−1 ) R n−1 (5.16)5.2.2.2 Convergence <strong>de</strong> bfs (R, N)Par définition <strong>de</strong> Θ, µ(Θ) ≠ Θ 0 . µ(Θ) converge vers Θ n dès que Θ n = Θ n+1 . L’algorithmetraditionnel converge vers R bfs = R n lorsque N n = ∅, c’est à dire lorsque ∆(N n−1 ) ⊆ R n−1 ,c’est à dire lorsque R n = R n−1 . Les suites R n et Θ n convergent donc vers un même point fixeµ(Θ).5.2.2.3 R n = Θ nNous allons montrer que pour tout n > 0 nous avons :Vrai pour n = 1 :Si vrai pour n − 1 alors vrai pour n :R n = Θ n (5.17)N n = Θ n Θ n−1 (5.18)R 1 = ι= Θ 1N 1 = ι= Θ 1 ∅R n = ∆(Θ n−1 Θ n−2 ) ∪ Θ n−1N n = ∆(Θ n−1 Θ n−2 ) Θ n−1∆(Θ n−1 ) ∪ Θ n−1 ⊇ R n ⊇ (∆(Θ n−1 ) ∆(Θ n−2 )) ∪ Θ n−1∆(Θ n−1 ) Θ n−1 ⊇ N n ⊇ (∆(Θ n−1 ) ∆(Θ n−2 )) Θ n−1Nous pouvons également écrire :(ι ∪ ∆(Θ n−1 )) ∪ Θ n−1 ⊇ R n ⊇ ((ι ∪ ∆(Θ n−1 )) (ι ∪ ∆(Θ n−2 ))) ∪ Θ n−1(ι ∪ ∆(Θ n−1 )) Θ n−1 ⊇ N n ⊇ ((ι ∪ ∆(Θ n−1 )) (ι ∪ ∆(Θ n−2 ))) Θ n−1Ceci se réécrit en :Θ n ∪ Θ n−1 ⊇ R n ⊇ (Θ n Θ n−1 ) ∪ Θ n−1Θ n Θ n−1 ⊇ N n ⊇ (Θ n Θ n−1 ) Θ n−1