From c8f8de6a220ad89e36f552193648e9da1728bba8 Mon Sep 17 00:00:00 2001 From: Jean-Loup Beaussart Date: Tue, 24 Feb 2015 11:32:46 +0100 Subject: [PATCH 1/2] 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 From 26af6c5696e1e31e4c6f424c9b667976748bd8a0 Mon Sep 17 00:00:00 2001 From: Jean-Loup Beaussart Date: Tue, 24 Feb 2015 11:42:16 +0100 Subject: [PATCH 2/2] =?UTF-8?q?Trichotomie=20corrig=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- S2/TP4/tp4.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/S2/TP4/tp4.py b/S2/TP4/tp4.py index 94bd870..e349a02 100644 --- a/S2/TP4/tp4.py +++ b/S2/TP4/tp4.py @@ -145,16 +145,14 @@ def tricho(l, a, b, x): while d < f: m1 = (d+f)//3 m2 = m1*2 - if l[m1] < x: + if l[m1] >= x: + f = m1 + elif l[m2] >= x: d = m1+1 f = m2 - elif l[m2] < x: - d = m2+1 else: - f = m1 + d = m2+1 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 +print(tricho(LEXIQUE_TRIE, 0, len(LEXIQUE_TRIE), 'banane')) \ No newline at end of file