diff --git a/S2/TP4/tp4.py b/S2/TP4/tp4.py index 588c350..73dc728 100644 --- a/S2/TP4/tp4.py +++ b/S2/TP4/tp4.py @@ -85,6 +85,35 @@ def dicho(l, a, b, x): # Geoffrey est_dedans = x == l[d] return (est_dedans, d if x == l[d] else -1) +def tricho(l, a, b, x): + """ + list, int, int, a → (bool, int) + Renvoie un tuple contenant un booléen indiquant si l'élément x est dans la liste l entre les + bornes [a, b[, ainsi que sa position le cas échéant, -1 sinon, par trichotomie. + CU : l une liste, a et b des ints tels que 0 ≤ a < b ≤ len(l) + """ + + assert(type(l) == list), "l doit être une liste" + assert(type(a) == type(b) == int), "a et b doivent être des ints" + assert(0 <= a < b <= len(l)), "Il faut que 0 ≤ a < b ≤ len(l)" + + d = a + f = b - 1 + while d < f: + m1 = (d+f)//3 + m2 = m1*2 + if l[m1] >= x: + f = m1 + elif l[m2] >= x: + d = m1+1 + f = m2 + else: + d = m2+1 + est_dedans = x == l[d] + return (est_dedans, d if x == l[d] else -1) + +print(tricho(LEXIQUE_TRIE, 0, len(LEXIQUE_TRIE), 'banane')) + question(2) # Utiliser LEXIQUE from lexique import * @@ -118,6 +147,7 @@ squestion('b') # Effectuer de nombreuses recherches dans LEXIQUE # algorithmes utilisés # Définition des éléments choisis pour la recherche +<<<<<<< HEAD from random import randint, SystemRandom from string import ascii_lowercase, ascii_uppercase, digits