Representarem un polinomi com la llista que conté els seus coeficients en ordre creixent per grau. Per exemple, si és llavors es representa com . És a dir, a cada posició de la llista, es guarda el coeficient del monomi de grau del polinomi. Noteu que l’últim coeficient que es guarda és el de grau máxim ( a l’exemple). Com a conseqüència, les llistes que representen polinomis no nuls, sempre han de tenir un valor diferent de zero a l’última posició.
Donada una llista que representa un polinomi no nul d’enters, es diu que és un forat si i . La longitud d’un forat és . Per exemple, el polinomi d’amunt té un forat de longitud a la posició , perquè i .
Considereu la següent funció @len_forat(p,i)@ que donat un polinomi no buit , retorna la longitud del forat que comença a la posició , :
def len_forat(p, i):
'''
Donada una llista p que representa un polinomi no buit d'enters,
i una posicio i, 0 <= i <= len(p)-1, retorna la logitud del forat
a la posicio i
>>> len_forat([9, 3, 0, 0, 0, 2, 4], 2)
3
>>> len_forat([9, 3, 0, 0, 0, 2, 4], 1)
0
'''
j = i
while p[j] == 0:
j += 1
return j-i
Implementeu una funció @cerca_forat(p,n)@ que retorni les dues posicions , tal que és el primer forat de longitud més gran o igual que del polinomi no nul . Si no té cap forat més llarg o igual que llavors ha de retornar . És obligatori que la implementació de @cerca_forat(p,n)@ usi @len_forat(p,i)@ i que sigui una cerca.
>>> cerca_forat([9, 3, 0, 0, 0, 2, 4], 2) (2, 4) >>> cerca_forat([9, 3, 0, 0, 0, 2, 4], 3) (2, 4) >>> cerca_forat([9, 3, 0, 0, 0, 2, 4], 4) (-1, -1) >>> cerca_forat([0, 0, 9, 3, 0, 0, 0, 2, 4], 3) (4, 6) >>> cerca_forat([1, 1, 1], 0) (0, -1)