Escolar Documentos
Profissional Documentos
Cultura Documentos
Contedo
1
Mtodo de bisseces
Cadeias de caracteres
Mtodo de bisseces
Mtodo de bisseces
com 5 iteraes
0.0, 1.0, 5)
com 10 iteraes
0.0, 1.0, 10)
# verificao
>>> eq(0.41455078125)
-0.0015123802004382014
Eliminar a recurso
chamadas recursivas apenas no final da funo
podem ser substitudas por iterao com um ciclo while
vantagem: reduz o uso de pilha de execuo (stack)
Mtodo de bisseces iterativo
def bissect(f, a, b, n):
"Efectua n bisseces de f(x)=0 em [a,b]."
while n>0:
m = (a+b)/2.0 # calcula o ponto mdio
# parte o intervalo ao meio
if f(a)*f(m) < 0:
b = m
else:
a = m
n = n-1
# fim do ciclo
# resultado o ponto mdio final
return m
# fim do programa
Exerccio
Seja x? a raz exacta e x a aproximao retornada pela funo. O erro da aproximao |x? x|.
Exerccio Escreva uma funo
bissect2(f,a,b,eps)
que retorna uma aproximao da raz da equao f (x) = 0 com um erro no superior
a eps.
Optimizar a implementao
reduzir o custo computacional do algoritmo
em cada iterao: calcula f trs vezes
podemos fazer melhor:
f a = f (a)
f b = f (b)
f m = f (m)
Mtodo de bisseces optimizado
def bissect(f, a, b, n):
"Efectua n bisseces de f(x)=0 em [a,b]."
fa = f(a)
# valores de f nos extremos
fb = f(b)
while n>0:
m = (a+b)/2.0 # calcula o ponto mdio
fm = f(m)
# valor de f no ponto mdio
.
.
.
.
.
.
# parte o intervalo ao meio
if fa*fm < 0:
b = m
fb = fm # manter invariante
else:
a = m
fa = fm # manter invariante
n = n-1
# menos uma iterao
# fim do ciclo
# resultado o ponto mdio final
return m
# fim do programa
Anlise do mtodo optimizado
em cada iterao: calcula f uma vez
reduzimos o custo de calcular f em 50%
vantagem: f pode ser uma expresso matemtica complexa
usamos apenas trs variveis extra
Sumrio
comear pela formulao abstracta do problema
fazer uma implementao simples e correcta
refinar a implementao passo-a-passo
4
Cadeias de caracteres
Cadeias de caracteres
compostas por caracteres individuais
podemos trat-las como um entidade nica
podemos tambm aceder aos caracteres individuais
>>>
>>>
B
>>>
a
>>>
n
>>>
6
fruta = Banana
fruta[0]
fruta[1]
fruta[2]
len(fruta)
ndices
str B
0
a
1
n
2
ndices: 0, 1, 2, 3, 4, 5
em geral: 0, 1, . . . , len(str)-1
caracteres: str[0], str[1], . . .
ltimo caracter: str[len(str)-1]
penltimo caracter: str[len(str)-2]
Percorrer uma cadeia
Usando um ciclo while
# invariante: 0<=i<=len(fruta)-1
i = 0
while i<len(fruta):
letra = fruta[i]
print letra
i = i + 1
a
3
n
4
a
5