示例#1
0
class OccurenceBloom:
	def __init__(self):
		#Initialisation de filtre avec une taille de 1200 bits 
		#et deux fonctions de hashage 
		self.tableau=[]
		self.nb_function=1
		self.taille=33000
		self.filtre=BloomFilter(300,2)
		self.faux_positive=0
		self.res="resultBloom.csv"
	def ajouter(self,adresse):
		#Verifier si le hash de l adresse existe dans le filtre 
		if(self.filtre.existe(adresse)):
			#Si oui , on verifie si ce n'est pas un faux positive			
			existe=False
			taille=len(self.tableau)
			#Recherche normal dans le tableau de frequence 	
			for i in range(taille):
				if(self.tableau[i][0]==adresse):
					existe=True
					self.tableau[i]=(adresse,self.tableau[i][1]+1)
					break
			if not existe:
			#Un faux positive detecte, on insere la nouvelle adresse
				self.tableau.append((adresse,1))
				self.faux_positive+=1				
		else:
		#Le hash n existe pas on insere directement a la fin 
			self.tableau.append((adresse,1))
		#On mets a jour le filtre 	
		self.filtre.ajouter(adresse)
	
	def sauvegarder(self):
		with open("save.bloom","wb") as sauvegarde:
			pickle.dump(self, sauvegarde, pickle.HIGHEST_PROTOCOL)			
		print("sauvegarde en cours ....")

	def reset(self):
		self.tableau=[]
		self.filtre=BloomFilter(self.taille,self.nb_function)
		self.faux_positive=0
	def dix_premier(self):
		return sorted(self.tableau,key=lambda x:-x[1])[0:10]

	def changer_taille(self,taille):
		self.taille=taille
		self.filtre=BloomFilter(taille,self.nb_function)
		
	def changer_nb_fct(self,nb_function):
		self.nb_function=nb_function
		self.filtre=BloomFilter(self.taille,nb_function)