2015-02-24 10:31:14 +01:00
|
|
|
#!/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'
|
|
|
|
|
2015-02-24 10:34:05 +01:00
|
|
|
|
|
|
|
def question(numero):
|
|
|
|
print('\n***', 'Question', numero, '***')
|
|
|
|
|
|
|
|
def squestion(lettre):
|
|
|
|
print('\n%s)' % lettre)
|
|
|
|
|
|
|
|
|
|
|
|
question(1) # Programmer recherches seq, seq triée, dicho
|
|
|
|
|
2015-02-24 10:36:37 +01:00
|
|
|
def seq(l, a, b, x): # Jean-loup
|
2015-02-24 10:45:33 +01:00
|
|
|
"""
|
|
|
|
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)
|
2015-02-24 10:54:28 +01:00
|
|
|
Renvoie True et l'emplacement de x dans l, si x a été trouvé, sinon (False, 0)
|
2015-02-24 10:45:33 +01:00
|
|
|
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)
|
|
|
|
|
2015-02-24 10:36:37 +01:00
|
|
|
def seqTrie(l, a, b, x): # Jean-loup
|
2015-02-24 10:54:28 +01:00
|
|
|
"""
|
|
|
|
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)
|
2015-02-24 10:36:37 +01:00
|
|
|
|
|
|
|
def dicho(l, a, b, x): # Geoffrey
|
2015-02-24 10:41:45 +01:00
|
|
|
"""
|
|
|
|
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]
|
2015-02-24 10:36:37 +01:00
|
|
|
|
2015-02-24 10:34:05 +01:00
|
|
|
question(2) # Utiliser LEXIQUE
|
|
|
|
|
2015-02-24 10:43:27 +01:00
|
|
|
from lexique import *
|
|
|
|
|
2015-02-24 10:34:05 +01:00
|
|
|
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
|