IIC1253 / IIC1253-2024-1

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Demostración de algoritmos

noamsito opened this issue · comments

Holaa, tengo una consulta acerca de la forma en que tenemos que demostrar que un algoritmo funciona. Entiendo que se tiene que encontrar una invariante y posteriormente utilizarla para demostrar que el algoritmo es correcto, utilizando inducción. Mi duda es, ¿tengo que crear un algoritmo que desarrolle (cambien) todas las variables a través de las iteraciones, tal que pueda encontrar una invariante que sea lo suficientemente útil o expansible para demostrar el algoritmo?

Más concretamente en la ayudantía 10 el ejercicio 1, piden desarrollar un algoritmo que encuentre el mínimo común múltiplo entre dos números a y b, por lo que yo llegué a este algoritmo:

imagen

Y como la variable iter es la que va cambiando con el paso de las iteraciones hasta la última de estas que es donde se retorna dicha variable, concluí que una posible invariante podría ser I(i):= iter_i = iter_{i-1} + 1. Pero a partir de ahí no encuentro la forma de desarrollarla para demostrar que el algoritmo es correcto mediante inducción.

commented

Hola!

Generalmente, como usamos los invariante para demostrar correctitud de algoritmos, buscamos plantear uno que de cierta forma exprese la "esencia" del algoritmo. Personalmente, una técnica que me es útil a la hora de plantear invariantes en base a un algoritmo concreto es buscar una forma de incorporar todos los términos participantes en el loop dentro de una ecuación. Esto suele funcionar de buena manera si asumimos que el algoritmo no hace "cosas inútiles", ya que al usar todos los términos participantes en un loop dentro de una ecuación, estamos de cierta forma resumiendo el comportamiento del algoritmo matemáticamente, lo que se puede generalizar para demostrar su correctitud.

En tu caso, te recomendaría buscar una forma de incorporar los términos a, b y max en el invariante, ya que con ello podrías resumir el comportamiento general del loop en una ecuación.

Espero que se entienda mejor :)