FM-indexEn informatique, un FM-index est une structure d'indexation compressée sans perte, fondée sur la Transformée de Burrows-Wheeler, qui a des similitudes avec le tableau des suffixes. Cette structure de données a été créée par Paolo Ferragina et Giovanni Manzini[1], qui la décrivent comme étant un index multi-usages basé sur une structure de donnée astucieuse. Le nom signifie « Full-text index in Minute space »[2],[3]. Cet index peut, en plus de la compression, être utilisé pour trouver de façon efficace le nombre d’occurrences d’un motif dans le texte compressé, ainsi que pour localiser la position de chaque occurrence du mot recherché dans le texte compressé. Aussi bien le temps que l'espace de stockage requis ont une complexité sublinéaire par rapport à la taille des données d’entrée. C'est-à-dire que le temps d'exécution et l'espace de stockage requis ne sont pas proportionnels à la taille des données d'entrée. Le FM-index a été utilisé entre autres en bio-informatique[4]. CadreUtiliser un index est une stratégie commune pour rechercher efficacement dans un vaste corpus de texte. Lorsque le texte est plus grand que ce que peut contenir la mémoire principale de l’ordinateur, il est nécessaire de compresser non seulement le texte, mais aussi l’index. Lorsque le FM-index a été introduit, plusieurs solutions avaient déjà été suggérées pour atteindre ce double but. Elles reposaient sur des méthodes de compression traditionnelles qui essayaient aussi de résoudre le problème de compression d'index. En revanche, FM-index utilise un index compressé de façon native, ce qui signifie qu’il est simultanément capable de compresser les données et d'indexer. Structures FM-indexUn FM-index est créé en prenant d'abord la transformée de Burrows-Wheeler (BWT) du texte d’entrée. Par exemple, la BWT de la chaîne T = « abracadabra » est « ard$ rcaaaabb », et ici elle est représentée par la matrice M où chaque ligne est une rotation du texte, et les lignes ont été triées lexicographiquement. La transformation correspond à la dernière colonne intitulée L.
La BWT en soi permet une compression avec, par exemple, move-to-front et le codage de Huffman, mais la BWT à d'autres utilisations. Les lignes de la matrice sont essentiellement les suffixes triés du texte, ce qui correspond au tableau des suffixes. Ce lien entre le tableau des suffixes et la BWT est au cœur du FM-index.
CompterL’opération count prend un motif P [1..p] et retourne le nombre d’occurrences de ce motif dans le texte original T. Comme les lignes de la matrice M sont triées, et qu'elles contiennent chaque suffixe de T, les occurrences du motif P seront côte à côte dans une unique plage continue. Cette opération est réitérée de façon rétrograde sur le motif. Pour chaque caractère dans le motif, l'ensemble de lignes qui possède ce caractère comme suffixe, est trouvé. Par exemple, la recherche du motif « bra » dans « abracadabra » suit les étapes suivantes :
Si la plage est vide ou si les limites de l'ensemble de lignes se croisent mutuellement avant que l’ensemble du motif soit investigué, cela signifie que P n'est pas présent dans T. Comme OCC (c, k) peut être effectué en temps constant, le comptage peut s'accomplir en temps linéaire proportionnel à la longueur du motif : Temps de O(p). LocaliserL’opération localiser prend comme entrée un index d’un caractère dans L et retourne sa position i en T. Par exemple locate(7) = 8. Pour trouver toutes les occurrences d’un motif, il faut tout d’abord trouver la plage de suffixes de T dont le motif est préfixe, de la même manière que celle pour l’opération compter. Ensuite, il reste à trouver la position de chaque suffixe de cette plage dans T. Pour faire correspondre un index dans L en un index dans T, un sous-ensemble des indices en L est associé à une position en T. Si L [j] a une position qui lui est associée, trouver locate(j) est trivial. S'il n’y a pas de positions associée, la recherche se poursuit sur la chaîne avec LF(i) jusqu'à ce qu’un index associé soit trouvé. En associant un nombre adéquat d’indices, on trouvera une limite supérieure. L’opération trouver peut être implémentée pour trouver les occurrences d'occ P [1..p] dans un texte T [1..u] en O (p + occ log ε u) temps avec bits par symbole d’entrée pour toute k ≥ 0[1]. AméliorationsLes auteurs ont mis au point des améliorations à leur approche première et ont nommé cette nouvelle méthode de compression « FM-Index version 2 »[5]. Une autre amélioration, le FM "respectueux de l’alphabet", combine l’utilisation de la stimulation de compression et les ondelettes [6] pour réduire considérablement l’utilisation de l’espace dans le cas d'utilisation d'alphabets de grande taille. ApplicationsLocalisation de séquences d'ADN sur un génomeLe FM-index a été appliqué avec succès (> 2000 citations) à l’alignement de séquence génomique, voir http://bowtie-bio.sourceforge.net/index.shtml. Notes et références
|