Demostrar correccion del algoritmo

Demostrar correccion del algoritmo

de Franco Galasso Correa -
Número de respuestas: 2

Buenas tardes, mi duda no es de un ejercicio en particular sino de una cosigna especifica, en los ejercicios que se pide lo siguiente:



Que debemos probar al momento de demostrar la correccion de un algoritmo para que sea valida dicha demostracion? Para todos los algoritmos debemos demostrar las mismas condiciones?
Por otro lado, cuando se pide demostrar que el algoritmo admite una implementacion en tiempo O(...), debemos realizar la implemenctacion completa reescribiendo el codigo con las estructuras de datos respectivas junto con el uso de las mismas o bastaria con probarlo de forma textual (Por ejemplo: "podemos representar la lista de nodos como una lista simplemente enlazada ... "  )?

Saludos!

En respuesta a Franco Galasso Correa

Re: Demostrar correccion del algoritmo

de Facundo Benavides -
hola Franco, qué tal?
sobre lo primero, la respuesta es depende. según el problema y lo que se espere del alg será la prueba de correctitud (que en gral incluye implicitamente probar que el alg termina).
p.e. El ej.3.2 de K&T. pide escribir un alg que detecte ciclos en un grafo, devolviendo uno cuando exista.
si pensamos en una representación para un ciclo, podríamos considerar el uso de una lista simple. en ese caso, nuestro algoritmo devolvería null si no hay ciclo en G o una lista de vértices que sean un ciclo en G en caso contrario.
luego nuestro alg es correcto si, cuando existe ciclo en G (al menos uno) retorna una lista que representa a uno de los ciclos existentes y si cuando no existe ninguno, retorna null.
estos enunciados cubren todos los casos posibles así que alcanza con probar ambos enunciados.
notar que también podríamos probar correctitud si demostramos que, cuando existe ciclo en G el alg retorna un ciclo y que, cuando retorna un ciclo es porque existía uno en G (sii).
por qué es cierto esto. porque este segundo enunciado (recíproco: retorna un ciclo si existía uno en G) es el contra-recíproco del segundo de los enunciados anteriores (recíproco anterior: cuando no existe ninguno, retorna null).
de hecho, utilizar el contra-recíproco del enunciado que queremos probar es una estrategia bastante usual ya que podría ser más fácil de demostrar que el enunciado original.
por último, como decía al comienzo, cada alg tiene un cometido y la correctitud está asociada al resultado esperado, que cambia en cada caso.

sobre lo segundo, diría que es inevitable referirse a la implementación concreta cuando intervienen representaciones de datos estructurados en la solución (algoritmo).
respecto al alg en sí, podría ser un pseudocódigo más o menos cercano a un lenguaje de programación. la clave es que los pasos no sean ambiguos (esté claro como se ejecuta, qué se hace en cada paso)
saludos