From c8f8de6a220ad89e36f552193648e9da1728bba8 Mon Sep 17 00:00:00 2001 From: Jean-Loup Beaussart Date: Tue, 24 Feb 2015 11:32:46 +0100 Subject: [PATCH] Trichotomie (ou pas) --- S2/TP4/tp4.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/S2/TP4/tp4.py b/S2/TP4/tp4.py index 985b5a1..94bd870 100644 --- a/S2/TP4/tp4.py +++ b/S2/TP4/tp4.py @@ -127,3 +127,34 @@ for n in range(NB_ELEMENTS): elements.append(LEXIQUE[randint(0, taille)]) # + +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: + d = m1+1 + f = m2 + elif l[m2] < x: + d = m2+1 + else: + f = m1 + est_dedans = x == l[d] + return (est_dedans, d if x == l[d] else -1) + + +print(dicho(LEXIQUE, 0, len(LEXIQUE), 'banane')) +print(tricho(LEXIQUE, 0, len(LEXIQUE), 'banane')) \ No newline at end of file