#!/usr/bin/python3 # -*- coding: utf-8 -*- """ TP AP1 Licence SESI 1ère année Univ. Lille 1 tp4.py TP 4 """ __author__ = 'PREUD\'HOMME Geoffrey & BEAUSSART Jean-loup' __date_creation__ = 'Tue, 24 Feb 2015 10:30:21 +0100' def question(numero): print('\n***', 'Question', numero, '***') def squestion(lettre): print('\n%s)' % lettre) question(1) # Programmer recherches seq, seq triée, dicho def seq(l, a, b, x): # Jean-loup """ Recherche séquentielle de l'élément x dans la liste l, entre les borne a et b, b étant exclu list(x), int, int, x → (bool, int) Renvoie True et l'emplacement de x dans l, si x a été trouvé, sinon (False, 0) CU: 0 <= a < b <= len(l) """ assert(a >=0 and b > a and b <= len(l)) i=a while i < b and l[i] != x: i += 1 if i < b: return (True, i) else: return (False, 0) def seqTrie(l, a, b, x): # Jean-loup """ Recherche séquentielle de l'élément x dans la liste l triée, entre les bornes a et b, b étant exclu list(x), int, int, x → (bool, int) Renvoie True et l'emplacement de x dans l, si x a été trouvé, sinon (False, 0) CU: l est triée et 0 <= a < b <= len(l) """ assert(a >=0 and b > a and b <= len(l)) i=a while i < b and l[i] < x: i +=1 if i < b and l[i] == x: return (True, i) else: return (False, 0) def dicho(l, a, b, x): # Geoffrey """ list, int, int, a → (bool, int) Renvoie la position d'un élément x dans la liste l aux bornes a et b par dichotomie. """ a = d f = b - 1 while d < f: m = (d+f)//2 if l[m] < x: d = m+1 else: f = m return x == l[d] question(2) # Utiliser LEXIQUE from lexique import * squestion('a') # Vérifier que LEXIQUE est triée squestion('b') # Effectuer de nombreuses recherches de LEXIQUE # et comparer les temps d'éxécution selon les # algorithmes utilisés