2009/9/18 Alberto Bertogli <albertito@???>
> Si queres demostrar que el algoritmo de Dijkstra funciona, lo podes
> expresar
> de forma matematica y sale sin mayores complicaciones. Se ve todos los
> cuatrimestres en alguna clase de algoritmos 3 en Exactas en la UBA.
>
:D
La hice de macho pistola después de cursar Algo 2 un día, y luego la vi en
Algo 3.
Hacerlo con toda rigurosidad no es sencillo - cierto que no tiene mayores
complicaciones. Pero es un algoritmo muy elegante, pensado ya desde el vamos
en términos de invariantes, variantes, guardas, etc..
El tema es: no tendrá mayores complicaciones, pero lleva muuucho trabajo
hacerlo con toda la formalidad.
Con lo que no estoy de acuerdo es con tu criterio de "valer la pena". Pesar > algo en base a cuan facil o dificil es hacer algo que no vas a hacer, creo
> que
> no tiene sentido.
Hm... siempre me cuesta explicar este punto.
A ver si me sale ahora.
Si yo tengo bien internalizada la técnica de demostración, es intuitiva
después de todo, y programo, desde el vamos, pensando en cumplir sus
preceptos, entonces no necesito hacer la demostración rigurosamente. Puedo
hacerla de forma intuitiva a medida que escribo el código.
Un ejemplo tonto:
i = 0
n = int(raw_input("cuántos?"))
while i < 10:
print "hola"
Me dice "noooo"
¿por qué?
Porque no veo "función variante" ;-)
Lo corrijo:
i = 0
n = int(raw_input("cuántos?"))
while i < n:
print "hola"
i += 1
De nuevo nooooo.
¿por qué?
Porque no veo que la función variante tenga cota.
Se ve... se ve sin hacer la demostración.
Meté un código más complejo y también lo vas a ver, más si lo estás
escribiendo vos, porque sabés la idea que hay detrás del bucle.
Meter cosas raras como "break" y "continue", por más que ciertamente se
puede, hay que hacerlo con cuidado, porque invalida esa intuición que uno
tiene sobre cómo se comportan los bucles. No digo que no se pueda hacer -
sólo que no todos pueden hacerlo, hace falta experiencia para no introducir
errores.
¿se entiende?
(igual ya paro de spammear... creo que ya fue demasiado lejos la discusión.
Espero se entienda...)