Advertisement
gameboo

exo 3.5

Mar 1st, 2015
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.43 KB | None | 0 0
  1. "Exercice 3.5: Motifs chevauchants"
  2. # prend une sequence et une liste de motifs
  3. # retourne la liste des frequences d'occurence de chaque motif avec chevauchement
  4. def overlapping_motifs(seq, motifs):
  5.     # initialise la liste vide des frequences a retourner
  6.     freqs = []
  7.     # traitement a effecture une fois par motif pour remplir la liste de frequences
  8.     for motif in motifs:
  9.         #####################################################
  10.         #1# calcul du nombre effectif d'occurences du motif #
  11.         #####################################################
  12.     start_idx  = 0 # indice du caractere a partir duquel commencer a chercher
  13.         occurences = 0 # accumulateur contant le nombre total d'occurence du motif courrant
  14.     fini = False   # drapeau indiquant si la sequence a ete totalement exploree
  15.         # tant que la frequence n'est pas totalement exploree
  16.     while not fini:
  17.             # start_idx contient l'index a partir duquel chercher
  18.             found = seq.find(motif, start_idx) # chercher le motif
  19.             # find retourne l'index auquel le motif a ete trouve
  20.         if found >= 0:
  21.                 # nouvel indice ou chercher (immediatement apres la derniere occurence du motif)
  22.                 start_idx = found + 1
  23.                 # incrementer le nombre d'occurences trouvees
  24.                 occurences += 1
  25.             # si find ne trouve rien (retourne -1)
  26.             else:
  27.                 fini = True # activer le drapeau
  28.  
  29.         #######################################################
  30.         #2# calcul du maximum potentiel d'occurences du motif #
  31.         #######################################################
  32.         max_occurences = 0 # initialiser l'accumulateur a 0
  33.         # implementation de la formule de l'enonce
  34.         # /!\ dans l'enonce, la fonction plancher devrait etre appliquee /!\
  35.         # /!\ aux termes de la somme, et non a la somme elle meme        /!\
  36.         for i in range (0, len(motif)):
  37.             max_occurences += math.floor((len(seq) - i)/float(len(motif)))
  38.  
  39.         #####################################################################
  40.         #3# calcul de la frequence d'apparition du motif avec chevauchement #
  41.         #####################################################################
  42.         # calcul de la frequence et ajout a la liste des frequences a retourner
  43.         freqs.append(occurences/float(max_occurences))
  44.  
  45.     # retour de la liste remplie
  46.     return freqs
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement