Alignement de séquences biologiques

Slides:



Advertisements
Présentations similaires
La recherche de chemin optimal
Advertisements

Explorer un espace d’états
La théorie du monde est petit
Comparaison et analyse combinatoire de structures biologiques arborescentes P. Ferraro S. Dulucq J. Allali A. Ouangraoua.
Efficient Simplification of Point-Sampled Surfaces
Cours 8 Problèmes de dynamiques : techniques de résolution pas-à-pas
Regroupement (clustering)
Cours d’Algorithmique
Prédiction de sites dinteraction des protéines par analyse darbres phylogénétiques Stéfan Engelen Génomique Analytique, INSERM U511 Université Pierre et.
Colloque Traitement et Analyse de séquences : compte-rendu
M. EL Adel & M. Ouladsine LSIS – UMR-CNRS 6168 Marseille - France
Le remplacement moléculaire
1 Recherche de répétitions distantes dans les séquences Etudiant : Laurent NOE Encadrant : Gregory KUCHEROV.
Recherche heuristique de similitudes dans les séquences dADN École Jeunes Chercheurs en Algorithmique et Calcul Formel Laurent Noé
New Deflation Criterion for the QR Algorithm Présenté par Nader EL KHATIB Sous la direction de M. Mario AHUES.
Concepts avancés en mathématiques et informatique appliquées
Introduction à l’Intelligence Artificielle
Comparaison de structures d’ARN
Sélection doligonucléotides spécifiques à laide de familles de graines AS Indexation de Texte et Découverte de Motifs Lina (Nantes) mai 2004.
Optimisation linéaire
Théorie des graphes Un peu de vocabulaire.
Systèmes d’équations linéaires
Examen partiel #2 Mercredi le 15 novembre de 13h30 à 15h20
SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]
Alignement de séquences (suite)
IFT-2000: Structures de données Les graphes Dominic Genest, 2009.
Analyse d’Algorithmes
Bioinformatique et Biologie Structurale I/ – Principes et techniques A/ Linformation structurale B/ Les différentes techniques de détermination de structure.
IFT Complexité et NP-complétude
Algorithmes d ’approximation
Optimisation linéaire
1.
Prédiction d’interactions protéine-protéine
D.L. Nash, G.W. Rogers, J.B. Cooper, G.L. Hargrove, and J.F. Keown
GPA750 – Gestion de Projets
ASI 3 Méthodes numériques pour l’ingénieur
Structures de données IFT-2000 Abder Alikacem Semaine 11 Gestion des arbres binaires de tri et de recherche. Les arbres cousus. Les arbres n-aires Département.
Programmation linéaire en nombres entiers : les méthodes de troncature
Recherche heuristique dans les bases de données L’algorithme BLAST
Modélisation géométrique de base
Etienne Danchin & Amandine Campan Présentation interne, pôle Santé des Plantes, Sophia - Antipolis Mercredi 21 avril 2010 Grille PACA ProActive : retour.
La décomposition en valeurs singulières: un outil fort utile
D.E ZEGOUR Ecole Supérieure d’Informatique
O-notation 1. Introduction 2. O-notation 3. Opérations 3.1 Somme 3.2 Produit 4. Règles générales 5. Exemple 6.Analyse des algorithmes récursifs 6.1 Dilatation.
Alignements de séquences par paires
Séquençage par hybridation
Programmation linéaire en nombres entiers
Ceci est un graphe valué Des arcs : 1-2, 1-4, 7-10,…..
Recherche exacte de motifs
Familles de gènes Nadia El-Mabrouk.
Exploration systématique de graphes
2008/ Plan du cours 1.Introduction –Contenu du cours 2.Logique mathématique –Calcul propositionnel –Calcul des prédicats –Logique floue et aide à.
Problème de double digestion
Recherche par automates finis
Optimisation pour la Conception de Systèmes Embarqués
2005/2006 Structures de Données Introduction à la complexité des algorithmes.
Introduction à la Bio-Informatique
Changement de représentation et alignement de séquences. Hugues DELALIN Encadrement: E. Mephu Nguifo.
Ajouts et retraits dans un arbre de connexion Nicolas Thibault et Christian Laforest, Équipe OPAL Laboratoire IBISC (regroupement LaMI et LSC), Évry 8.
NP-complétude de EDIT ( Nested, Nested ) G.Blin, G. Fertin, I. Rusu, C. Sinoquet Institut de Recherche en Informatique de Nantes.
Cours 5 - Trois algorithmes de tri d'un tableau
Recherche heuristique dans les bases de données L’algorithme BLAST
Post-optimisation, analyse de sensibilité et paramétrage
Organisation des séquences pédagogiques TD TP
Présentations BIN1001.
Les banques de séquences nucléiques
Algorithme de Needleman et Wunsch (programmation dynamique)
1 UE Intro. Optimisation L3 INFO UPSud II. Programmation linéaire en variables entières (ou mixtes)
Alignement de séquences biologiques
Alignement de séquences biologiques
Transcription de la présentation:

Alignement de séquences biologiques Nadia El-Mabrouk Inspiré de: An introduction de Bioinformatics Algorithms – www.bioalgorithms.info Neil C. Jones and Pavel A. Pevzner

Motivation Identification des gènes: Est-ce qu’un ORF est un gène? S’il existe un gène similaire dans un autre organisme, alors de forte chance que l’ORF représente un gène. Déduire la fonctionnalité d’un gène grâce à sa similarité avec un gène de fonction connue. Regrouper les gènes en familles d’homologues. Étudier l’évolution des espèces...

Alignement global/ local - Recherche Alignment Global Alignement local— trouver des régions conservées Recherche – trouver la position d’un gène --T—-CC-C-AGT—-TATGT-CAGGGGACACG—A-GCATGCAGA-GAC | || | || | | | ||| || | | | | |||| | AATTGCCGCC-GTCGT-T-TTCAG----CA-GTTATG—T-CAGAT--C tccCAGTTATGTCAGgggacacgagcatgcagagac |||||||||||| aattgccgccgtcgttttcagCAGTTATGTCAGatc tcccagtTATGTCAGGggacacgagcatgcagagac ||| ||||| TAT-TCAGG

Exemple Un alignement de séquence réalisé par ClustalW entre deux protéines humaines. http://fr.wikipedia.org/wiki/Alignement_de_s%C3%A9quences

Modèle sous-jacent: mutations ponctuelles Exemple: Substitution de caractères Séquence ancestrale inconnue ACG G C G I I A C G A G GCG ACG X Y Séquences observées Séquences observées

Alignement global 2 séquences v et w: v : A T C G m = 8 w : T G C A Alignement : matrice 2 * k ( k > m, n ) v A T -- C -- T G A T G w -- T G C A T -- A -- C 4 matches 2 insertions 3 deletions 1 mismatch An introduction de Bioinformatics Algorithms – www.bioalgorithms.info

Alignement global v : A T C G m = 8 Un alignement de v et w est une matrice A de 2 lignes et k colonnes, avec k ≥ max (n,m) telle que Pour tous 1 ≤i ≤2 et 1 ≤j ≤k, A[i,j] est dans {A,C,G,T,-}; v (respectivement w) est obtenu en concaténant, dans l’ordre, les lettres {A,C,G,T} de la 1ère (respec. la 2ème) ligne de A; Il n’existe aucune colonne j telle que A[1,j]=A[2,j]=“-”. w : T G C A n = 7

Alignement sans indels- Distance de Hamming Deux séquences d’ ADN v et w : v : A T w : A T Distance de Hamming : dH(v, w) = 8 C’est beaucoup, bien que les séquences soient très similaires. An introduction de Bioinformatics Algorithms – www.bioalgorithms.info

Alignement avec indels En décalant d’une seule position: v : A T -- w : -- A T La distance d’édition ou de Levenshtein (1966) D(v, w) = 2. D(v, w) = MIN d’opération élémentaires pour transformer v en w An introduction de Bioinformatics Algorithms – www.bioalgorithms.info

Distance d’édition versus Hamming Dist. de Hamming compare toujours i-ème lettre de v et i-ème lettre de w V = ATATATAT W = TATATATA Dist. de Hamming: D(v, w)=8 Calculer distance de Hamming : trivial.

Distance d’édition versus Hamming Dist. d’édition peut comparer i-ème lettre of v et j-ème lettre de w Dist. de Hamming compare toujours i-ème lettre de v et i-ème lettre de w V = - ATATATAT V = ATATATAT Un seul shift et tout s’aligne W = TATATATA W = TATATATA - Dist. de Hamming: Distance d’Édition: D(v, w)=8 D(v, w)=2 Calculer Hamming distance Calculer dist. d’édition tâche triviale tâche non-triviale Comment trouver quel j va avec quel i ???

Plus longue sous-séquence commune(LCS) – Alignement ignorant les Mismatches Étant donné deux mots v = v1 v2…vm et w = w1 w2…wn LCS de v et w: séquence de positions dans v: 1 < i1 < i2 < … < it < m et dans w: 1 < j1 < j2 < … < jt < n telque la ik lettre de v est égale à la jk lettre de w pour tout 1 ≤ k ≤ t, et t est maximal

LCS: Exemple Chemin dans une grille 2D: Graphe d’édition 1 1 2 2 3 4 3 1 1 2 2 3 4 3 5 4 5 6 6 7 7 8 j : v A T -- C -- T G A T C w -- T G C A T -- A -- C i: (0,0) (1,0) (2,1) (2,2) (3,3) (3,4) (4,5) (5,5) (6,6) (7,6) (8,7) positions dans v: 2 < 3 < 4 < 6 < 8 Matches en rouge positions dans w: 1 < 3 < 5 < 6 < 7 Chemin dans une grille 2D: Graphe d’édition

A T C T G A T C T G C A T A C A T -- C G v w 1 2 3 4 5 6 7 8 i : j : j 3 4 5 6 7 8 i : j : A T C T G A T C j 1 2 3 4 5 6 7 8 i T 1 G 2 C 3 A 4 T 5 A 6 C 7

T G C A A T -- C -- T G A T C -- T G C A T -- A -- C 1 2 3 4 5 6 7 i 8 j A T -- C -- T G A T C -- T G C A T -- A -- C LCS: Trouver un chemin avec un maximum d’arêtes diagonales.

Comment calculer LCS (v,w)? Pour chaques préfixes: v[1,i] = v1 … vi de v et w[1,j] =w1 … wj de w On considère le dernier caractère de vi et wj . 3 cas possibles vi et wj sont alignés  lcs(v[1,i] ,w[1,j]) = lcs(v[1,i-1], w[1,j-1]) +1 vi n’est pas aligné lcs(v[1,i],w[1,j]) = lcs(v[1,i-1], w[1,j]) wj n’est pas aligné lcs(v[1,i],w[1,j]) = lcs(v[1,i], w[1,j-1])

Programmation dynamique! Pour résoudre un problème (ici lcs(v,w)),on a besoin de résoudre tous les sous-problèmes (ici lcs(v[1,i] ,w[1,j]) pour tous les i et j). Pour simplifier, notons lcs(i,j) au lieu de lcs(v[1,i] ,w[1,j]) lcs (i,j) = max lcs (i-1,j) lcs (i,j-1) lcs (i-1, j-1) + 1 si vi = wj Conditions initiales: lcs (i,0) =lcs (0,j) =0

Graphe d’édition/Table de programmation dynamique C A 1 2 3 4 5 6 7 i 8 j

Graphe d’édition/Table de programmation dynamique j A T C T G A T C i 1 2 3 4 5 6 7 8 T G C A 1 2 3 4 5 6 7

Graphe d’édition/Table de programmation dynamique j A T C T G A T C i 1 2 3 4 5 6 7 8 T G C A 1 2 (i-1,j-1) (i-1,j) 3 +1 +0 (i,j-1) (i,j) 4 +0 5 6 7

Graphe d’édition/Table de programmation dynamique j A T C T G A T C i 1 2 3 4 5 6 7 8 T G C A 1 2 3 4 5 6 7

Graphe d’édition/Table de programmation dynamique j A T C T G A T C i 1 2 3 4 5 6 7 8 T G C A 1 2 3 4 5 6 7

Graphe d’édition/Table de programmation dynamique 1 2 3 4 5 j A T C T G A T C i 1 2 3 4 5 6 7 8 T G C A 1 2 3 4 5 6 7

Graphe d’édition/Table de programmation dynamique 1 2 3 4 5 j A T C T G A T C i 1 2 3 4 5 6 7 8 T G C A 1 2 3 4 5 6 7

Graphe d’édition/Table de programmation dynamique 1 2 3 4 5 j A T C T G A T C i 1 2 3 4 5 6 7 8 T G C A 1 2 3 4 5 6 7

Graphe d’édition/Table de programmation dynamique 1 2 3 4 5 j A T C T G A T C i 1 2 3 4 5 6 7 8 T G C A 1 2 3 4 5 6 7

5 j A T C T G A T C i T G C A A T -- C -- T G A T C -- T G C A T -- A 1 2 3 4 5 j A T C T G A T C i 1 2 3 4 5 6 7 8 T G C A 1 2 3 4 5 6 7

Distance d’édition D(i,j) = MIN d’erreurs (substitutions, insersions, suppressions) entre v[1,j] et w[1,i] j=7 v : A T C G m = 8 w : T G C A n = 7 i=6

Distance d’édition D(i,j) = MIN d’erreurs (substitutions, insersions, suppressions) entre v[1,j] et w[1,i] 3 cas possibles: Vj est impliqué dans un indel: j=7 v : A T C G w : T G C A i=6

Distance d’édition D(i,j) = MIN d’erreurs (substitutions, insersions, suppressions) entre v[1,j] et w[1,i] 3 cas possibles: Vj est impliqué dans un indel: j-1=6 [ ] v : A T C G w : T G C A - i=6

Distance d’édition D(i,j) = MIN d’erreurs (substitutions, insersions, suppressions) entre v[1,j] et w[1,i] 3 cas possibles: Wi est impliqué dans un indel: j=7 A T C G v : w : i=6

Distance d’édition D(i,j) = MIN d’erreurs (substitutions, insersions, suppressions) entre v[1,j] et w[1,i] 3 cas possibles: Wi est impliqué dans un indel: j=7 [ ] A T C G - v : w : i-1=5

Distance d’édition D(i,j) = MIN d’erreurs (substitutions, insersions, suppressions) entre v[1,j] et w[1,i] 3 cas possibles: Vi et Wi sont alignés: j=7 A T C G v : w : i=6

Distance d’édition D(i,j) = MIN d’erreurs (substitutions, insersions, suppressions) entre v[1,j] et w[1,i] 3 cas possibles: Vi et Wi sont alignés: j-1=6 [ ] A T C G v : w : i-1=5

Distance d’édition D(i,j) = MIN d’erreurs (substitutions, insersions, suppressions) entre v[1,i] et w[1,j] D (i,j) = max D (i-1,j) +1 D (i,j-1) +1 D (i-1, j-1) + 1 si vi ≠ wj D (i-1, j-1) si vi = wj Conditions initiales: D (i,0) =i; D(0,j) =j

D G T C A 1 2 3 4 5 6 7 G T C A G G T C 1 2 2 3 4 5 6 A 2 2 3 2 3 4 5 3 2 3 3 3 4 4 T A 4 3 3 3 4 4 5 4 4 4 4 3 4 5 5 4 5 5 4 4 4 6 5 5 6 5 4 5 C - A G T - C A G T - G - T

Algorithme { { { distEdit(v,w) for i  1 to n D(i,0)  i for j  1 to m D(0,j)  j D(i-1,j) +1 D(i,j)  max D(i,j-1) +1 D(i-1, j-1) if vi = wj D(i-1, j-1) + 1, if vi ≠ wj “ “ if D(i,j) = D(i-1,j) bi,j  “ “ if D(i,j) = D(i,j-1) “ “ otherwise return (D(n,m), b) { { {

Complexité Temps constant pour chaque chaque i,j avec 1≤i ≤n et 1≤j ≤m Temps proportionnel à O(nm) pour remplire la table de n lignes et m colonnes. Complexité en espace: également O(nm).

Distance d’édition avec pondération des opérations On peut associer un score à chaque opération: d pour une insertion/délétion r pour une substitution e pour un match d>0, r>0 et e≥0. En général e=0. Il faut que r<2d, sinon jamais de substitutions. Relations de récurrence: D(i,0) = i x d; D(0,j) = j x d D(i,j) = min [D(i,j-1)+d, D(i-1,j)+d, D(i-1,j-1)+p(i,j)] où p(i,j) = e si vi = wj et p(i,j) =r sinon.

Distance d’édition généralisée Le score d dépend des caractères. Par exemple, remplacer une purine par une pyrimidine plus coûteux que remplacer une purine par une purine Relations de récurrence: D(i,0) = S1≤k ≤i d(vi ,-); D(0,j) = S1≤k ≤j d(-,wj) D(i,j) = min [D(i,j-1)+ d(-,wj), D(i-1,j)+d(vi ,-), D(i-1,j-1)+ d(vi ,wj)] Si d est une distance, alors D est une distance (séparation, symétrie et inégalité triangulaire)

Similarité entre deux séquences Plutôt que de mesurer la différence entre deux séquences, mesurer leur degré de similarité P(a,b): score de l’appariement (a,b): Positif si a=b et ≤0 sinon. V(i,j): valeur de l’alignement optimal de v[1,i] et w[1,j] Relations de récurrence: V(i,0) = S1≤k ≤i P(vi ,-); V(0,j) = S1≤k ≤j P(-,wj) V(i,j) = max [V(i,j-1)+ P(-,wj), V(i-1,j)+P(vi ,-), V(i-1,j-1)+ P(vi ,wj)] Ça s’appelle: Algorithme de Needleman-Wunch.

Score simple Lorsque mismatches pénalisés par –μ, indels pénalisés by –σ, et matches gratifiés d’un +Ɛ, le score d’un alignement est: Ɛ(#matches) – μ(#mismatches) – σ (#indels) Exemple: Ɛ =2; μ = σ = 1; A T -- C G v w 4 matches 2 insertions 3 deletions 1 mismatch Score = 2x4-1x6=2

Matrice de score pour les AA: Blosum50

Alignement local: Algorithme de Smith-Waterman Alignement global: Plus long chemin entre (0,0) et (n,m). Alignement local: Plus long chemin entre n’importe quelles arêtes (i,j) et (i’, j’) du graphe d’édition. Quelle mesure de distance/similarité? Distance d’édition: Alignement vide! Pas de sens. Mesure de similarité avec scores négatifs

Alignement local: Exemple Input : Deux séquences v, w et une matrice de scores de similarité d. Output : Trouver deux facteurs de v et w dont le score de similarité est maximal parmi tous les facteurs possibles. Global alignment Local alignment

Pourquoi faire de l’alignement local? Deux gènes dans deux espèces peuvent être similaires sur de courtes régions, mais dissimilaires dans l’ensemble. Exemple: Les gènes Homeobox ont une courte région appelée « homeodomain » très conservées. Un alignement global ne trouverait pas cette région.

Solution directe En temps O(n4): Il y a n x n arêtes dans le graphe d’éditions  n2 arêtes sources et n2 arêtes cible. Calculer la valeur de similarité maximale d’un chemin prend un temps O(n2). Global alignment Local alignment

Solution directe En temps O(n4): Il y a n x n arêtes dans le graphe d’éditions  n2 arêtes sources et n2 arêtes cible. Calculer la valeur de similarité maximale d’un chemin prend un temps O(n2).

Solution: Parcours gratuits Yeah, a free ride! Vertex (0,0) The dashed edges represent the free rides from (0,0) to every other node. An introduction de Bioinformatics Algorithms – www.bioalgorithms.info

Alignement local: Récurrences La plus grande valeur V(i,j) est le score du meilleur alignement local. Récurrences: V(i,0) = V(0,j) = 0 Seules différences avec l’alignement global. Réinitialisation à 0. Possibilité d’arrivée à chaque arête par un parcours gratuit! V(i,j) = max V(i-1,j-1) + δ (vi , wj) V(i-1,j) + δ (vi , -) V(i,j-1) + δ (-, wj) {

Alignement local: Récurrences Remplire la table de programmation dynamique Rechercher une case (i,j) contenant une valeur maximale. Démarrer à (i,j) et remonter les pointeurs jusqu’à tomber sur un 0. V(i,j) = max V(i-1,j-1) + δ (vi , wj) V(i-1,j) + δ (vi , -) V(i,j-1) + δ (-, wj) { V(i,0) = V(0,j) = 0

D G T C A G T C A G C C C 2 1 2 2 A 1 4 3 2 1 2 1 3 3 2 1 1 1 3 2 2 1 2 1 2 5 4 3 1 4 3 2 4 4 3 2 3 3 2 4 3 3 Match =2; Mismatch, indel = -1

D G T C A T C A G 2 2 1 2 2 1 4 3 2 1 T 2 1 3 3 2 1 A 1 1 3 2 2 1 G 2 1 2 5 4 3 1 4 3 2 4 4 3 2 3 3 2 4 3 3 T C A G T -- A G

Scores des indels: Approche naïve Un score de pénalité σ pour chaque indel: -σ pour 1 indel, -2σ pour 2 indels consécutifs -3σ pour 3 indels consécutifs, etc. Peut être trop sévère pour une suite de 100 indels consécutifs

Considérer les gaps ATA__GC ATATTGC ATAG_GC AT_GTGC En fait, des indels consécutifs dans les séquences biologiques sont plutôt dûs à un événement unique: ATA__GC ATATTGC ATAG_GC AT_GTGC Plus probable Moins probable Le score “naïf” donnerait la même valeur aux deux alignements

Considérer les gaps Gaps: séquence d’indels consécutifs sur une ligne de l’alignement Contient 7 indels, mais seulement 4 gaps. Score particulier pour les gaps: influence la distribution des indels. C T A ---

Pondération constante Score d’un gap indépendant de sa taille: pénalité constante r. Score d’un alignement entre v et w contenant k gaps S1≤i ≤td(vi,wj)-kr Exemple: score = 3d(C,C) + 2d(A,A) + d(A,C)-4r C T A ---

Pondération affine r : pénalité d’ouverture d’un gap Pénalités pour les gaps: -ρ-σ pou 1 indel -ρ-2σ pour 2 indels -ρ-3σ pour 3 indels, etc. r : pénalité d’ouverture d’un gap σ : pénalité d’extension. Score d’un gap de taille t: -r -t.σ Score d’un alignement de taille l contenant k gaps et q indels: S1≤i ≤ld(vi,wj)-kr -qσ Permet une pénalité réduite pour les grands gaps. Exemple: score = 3d(C,C) + 2d(A,A) + d(A,C)-4r-7σ C T A ---

Autres pondérations Pondération convexe: chaque indel supplémentaire est moins pénalisé que le précédent. Exemple: score d’un gap de taille t: -r -loge(t) Pondération quelconque w: Fonction quelconque de la taille du gap. Exemple: score d’un gap de taille t: -w(t)

Alignement avec gap – Pondération quelconque Trois alignements possibles de v[1,i] avec w[1,j]: Alignement de v[1,i] avec w[1,j-1] suivit de (-,wj) Alignement de v[1,i-1] avec w[1,j] suivit de (vj ,-) Alignement de v[1,i-1] avec w[1,j-1] suivit de (vj ,wj) E(i,j): Valeur maximale d’un alignement de type 1. F(i,j): Valeur maximale d’un alignement de type 2. G(i,j): Valeur maximale d’un alignement de type 3. V(i,j) = max [E(i,j), F(i,j), G(i,j)]

Alignement avec gap – Pondération quelconque Wj Vi

Alignement global avec gap – Pondération quelconque Conditions initiales: V(i,0) = F(i,0) = -w(i) V(0,j) = E(0,j) = -w(j) Relations de récurrence: G(i,j) = V(i-1,j-1) + d(vi ,wj) E(i,j) = max0≤k≤j-1[V(i,k) – w(j-k)] F(i,j) = max0≤k≤i-1[V(k,j) – w(i-k)] Valeur optimale: V(m,n) Complexité: O(m2n+nm2)

Alignement avec gap – Pondération affine Conditions initiales: V(i,0) = F(i,0) = -r – i.s V(0,j) = E(0,j) = -r – j.s Relations de récurrence: G(i,j) = V(i-1,j-1) + d(vi,wj) E(i,j) = max[ E(i,j-1), V(i,j-1) - r ] -s F(i,j) = max[ F(i-1,j), V(i-1,j) - r ] -s Complexité: O(mn)

Parallélisme Table de programmation dynamique pour l’alignement: Pour calculer une case (i,j), on a besoin des 3 cases voisines (i-1,j), (i-1,j-1), (I,j-1)  Remplissage ligne par ligne, colonne par colonne, ou anti-diagonale par anti-diagonale:

Parallélisme Pour chaque anti-diagonale k, on a besoin des anti-diagonales k-1 et k-2. Observation clef: Chaque case d’une anti-diagonale k est calculée indépendamment des autres cases de l’anti-diagonale k  Un processeur peut-être assigné au calcul de chaque case Complexité en temps: O(n)!