@@ -20,26 +20,46 @@ Vous allez améliorer la situation pour que l'équipe puisse se servir du code d
...
@@ -20,26 +20,46 @@ Vous allez améliorer la situation pour que l'équipe puisse se servir du code d
__init__(self, bloom_filter=None): Si un bloom_filter est passé en argument lors de l'initialisation, il est utilisé. Sinon un nouveau filtre de Bloom est créé puis continue avec l'initialisation à None des enfants gauche et droite de l'arbre jusqu'à ce qu'ils soient définis. De plus, il y aura une liste vide datasets qui stockera les noms des jeux de données associé à ce noeud.
__init__(self, bloom_filter=None): Si un bloom_filter est passé en argument lors de l'initialisation, il est utilisé. Sinon un nouveau filtre de Bloom est créé puis continue avec l'initialisation à None des enfants gauche et droite de l'arbre jusqu'à ce qu'ils soient définis. De plus, il y aura une liste vide datasets qui stockera les noms des jeux de données associé à ce noeud.
3. Décrivez à quoi sert `class Structure`. Ecrivez les doctests pour cette classe.
3. Décrivez à quoi sert `class Structure`. Ecrivez les doctests pour cette classe.
Cette classe construit un arbre binaire dont chaque feuille correspond à un jeu de données.
Chaque feuille contient un filtre de Bloom créé à partir des k-mers propres à ce jeu de données.
Les nœuds internes fusionnent les filtres de Bloom de leurs enfants (par opération OU bit à bit)
et regroupent l'ensemble des noms des jeux de données correspondant.
La méthode 'query' permet de rechercher un k-mer dans l'arbre et retourne la liste des jeux de données
susceptibles de le contenir.
4. Cette structure mélange donc deux structures de données que nous avons vues. Quelles sont elles ?
4. Cette structure mélange donc deux structures de données que nous avons vues. Quelles sont elles ?
La structure combine essentiellement :
-----
1-Les Tables de hachage via le filtre de bloom
### La stucture Structure mélange deux structures de données principales:
*** 1-Filtre de Bloom:
Utilisé pour représenter les k-mers de chaque jeu de données. Le filtre de Bloom permet de tester
Utilisé pour représenter les k-mers de chaque jeu de données. Le filtre de Bloom permet de tester
rapidement si un k-mer est potentiellement présent dans un jeu de donnnées, avec un certain taux de
rapidement si un k-mer est potentiellement présent dans un jeu de donnnées, avec un certain taux de
faux positifs.
faux positifs.
2- Les arbre :
*** 2-Arbre binaire:
La structure est organisée sous forme d'arbre binaire, où chaque noeud interne présente l'union
La structure est organisée sous forme d'arbre binaire, où chaque noeud interne présente l'union
des filtres de Bloom de ses enfants. Les feuilles de l'arbre correspondent aux jeux de données
des filtres de Bloom de ses enfants. Les feuilles de l'arbre correspondent aux jeux de données
individuels.
individuels.
-----
5.D'après vous, que peut-on dire sur la complexité de la requête de cette structure ?
5.D'après vous, que peut-on dire sur la complexité de la requête de cette structure ?
La complexité de la requête dépend de l'efficacité du filtre de Bloom. Si le filtre ne produit pas de faux positifs,
la recherche suit un chemin unique dans un arbre équilibré, soit O(log N).
En cas de faux positifs, plusieurs branches inutiles peuvent être explorées, ce qui peut dégrader la complexité jusqu'à O(N).
6.Quelles sont les différences avec la table basée sur une MPHF que nous avons vu ?
6.Quelles sont les différences avec la table basée sur une MPHF que nous avons vu ?
La principale différence réside dans la nature des structures :
En terme d'exactitude :
La table basée sur une MPHF fournit un accès exact aux k-mers sans faux positifs,
tandis que la structure avec filtres de Bloom et arbre est probabiliste et peut donner des faux positifs.
Complexité de la requête :
La MPHF permet un accès en temps constant (O(1)) une fois la table construite,
alors que la recherche dans la structure hybride est, dans le meilleur des cas, logarithmique (O(log N)) et peut se dégrader en linéaire (O(N)) en cas de nombreux faux positifs.
Mémoire et construction :
La MPHF est adaptée à des ensembles statiques et optimise l'espace en évitant les collisions par construction itérative.
La structure Bloom/arbre, quant à elle, offre une organisation hiérarchique facilitant la fusion d'indices
mais au prix d'une imprécision probabiliste et d'une complexité potentiellement plus élevée en cas d'erreurs.
7.Bonus : Pouvez-vous retracer de quel papier de bioinformatique vient cette idée ?
7.Bonus : Pouvez-vous retracer de quel papier de bioinformatique vient cette idée ?
Cette approche – combiner des filtres de Bloom avec une structure arborescente pour indexer des k-mers – a été popularisée par les travaux sur les Sequence Bloom Trees (SBT).
Dans ce papier, Solomon et Kingsford ont proposé d’organiser des Bloom filters dans un arbre afin de faciliter la recherche rapide dans de vastes bases de données de séquençage.