Skip to content
Snippets Groups Projects
Commit 4fbb2359 authored by Mamadou Diallo's avatar Mamadou Diallo
Browse files

description de la classe structure (doctests) et reponse à la question 4

parent 047441c8
No related branches found
No related tags found
No related merge requests found
Vous commencez votre premier job de bioinformaticien.ne. La personne précédente vous a laissé un code quasi sans commentaire et sans test, et votre chef est biologiste et n'y comprend rien. Il sait seulement que ce code était très pratique pour rechercher des k-mer dans des jeux de données.
Vous allez améliorer la situation pour que l'équipe puisse se servir du code de manière pérenne.
1. Décrivez à quoi sert `class SimpleBloomFilter`. Ecrivez les doctests pour cette classe.
2. Décrivez à quoi sert `class StructureNode`.
3. Décrivez à quoi sert `class Structure`. Ecrivez les doctests pour cette classe.
4. Cette structure mélange donc deux structures de données que nous avons vues. Quelles sont elles ?
4. D'après vous, que peut-on dire sur la complexité de la requête de cette structure ?
5. Quelles sont les différences avec la table basée sur une MPHF que nous avons vu ?
6. Bonus : Pouvez-vous retracer de quel papier de bioinformatique vient cette idée ?
Vous commencez votre premier job de bioinformaticien.ne. La personne précédente vous a laissé un code quasi sans commentaire et sans test, et votre chef est biologiste et n'y comprend rien. Il sait seulement que ce code était très pratique pour rechercher des k-mer dans des jeux de données.
Vous allez améliorer la situation pour que l'équipe puisse se servir du code de manière pérenne.
1. Décrivez à quoi sert `class SimpleBloomFilter`. Ecrivez les doctests pour cette classe.
2. Décrivez à quoi sert `class StructureNode`.
3. Décrivez à quoi sert `class Structure`. Ecrivez les doctests pour cette classe.
4. Cette structure mélange donc deux structures de données que nous avons vues. Quelles sont elles ?
-----
### 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
rapidement si un k-mer est potentiellement présent dans un jeu de donnnées, avec un certain taux de
faux positifs.
*** 2-Arbre binaire:
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
individuels.
-----
5.D'après vous, que peut-on dire sur la complexité de la requête de cette structure ?
6.Quelles sont les différences avec la table basée sur une MPHF que nous avons vu ?
7.Bonus : Pouvez-vous retracer de quel papier de bioinformatique vient cette idée ?
......@@ -35,6 +35,38 @@ class StructureNode:
self.datasets = [] # list of dataset names at leaf nodes
class Structure:
"""
Une structure arborescente qui organise des jeux de données (datasets) en
utilisant des filtres de Bloom pour permettre des requetes efficaces de k-mers.
Exemples d'utilisation:
>>> datasets = ["Dataset1", "Dataset2", "Dataset3", "Dataset4"]
>>> kmers_dict = {
... "Dataset1": ["ACGT", "TGCA", "GCTA"], # k-mers du Dataset1
... "Dataset2": ["CGTA", "GCTA", "TACC"], # k-mers du Dataset2
... "Dataset3": ["AAGT", "TCCA", "CGGT"], # k-mers du Dataset3
... "Dataset4": ["TGGC", "GGCA", "CCAA"] # k-mers du Dataset4
... }
>>> structure= Structure(datasets, kmers_dict, bloom_size=100, num_hashes=1)
>>> structure.query("TCCA") #Recherche du k-mer "GCTA"
['Dataset1', 'Dataset2'] #"GCTA" est présent dans Dataset1 et Dataset2
>>> structure.query("TCCA") # Recherche du k-mer "TCCA"
['Dataset3'] # "TCCA" est présent dans Dataset3
>>> structure.query("ACGT") # Recherche du k-mer "ACGT"
['Dataset1'] # "ACGT" est présent dans Dataset1
>>> structure.query("GGGG") # Recherche du k-mer "GGGG"
[] # "GGGG" n'est présent dans aucun dataset
>>> structure.query("TGGC") # Recherche du k-mer "TGGC"
['Dataset4'] # "TGGC" est présent dans Dataset4
>>> structure.query("CGGT") # Recherche du k-mer "CGGT"
['Dataset3'] # "CGGT" est présent dans Dataset3
"""
def __init__(self, datasets, kmers_dict, bloom_size=10000, num_hashes=3):
self.leaves = {} # maps dataset names to their Bloom filter nodes
self.root = self._build_tree(datasets, kmers_dict, bloom_size, num_hashes)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment