¿Cuáles son los principios para crear algoritmos utilizando tipos de datos abstractos?

No estoy seguro si está preguntando en términos de un idioma específico o preguntando en términos generales. Asumiré términos generales.

Considere como ejemplo algoritmos de clasificación. Hay algunos algoritmos para ordenar que realmente se preocupan por los tipos de datos de las claves que se ordenarán. La clasificación de radix, por ejemplo, no va a ser feliz con los números de coma flotante. Pero la mayoría de los algoritmos de ordenación solo quieren que sea posible comparar claves y que los registros que se ordenan puedan intercambiarse por pares. Y si piensa en las demandas del tipo en el contenedor que contiene los registros, también hay requisitos en las “colecciones”. Una matriz o lista puede estar bien, pero una combinación puede ser feliz con las colecciones que solo permiten el acceso secuencial a los registros.

Entonces, al hablar sobre un algoritmo de clasificación, puede escribirlo en términos de nociones abstractas de claves, registros y colecciones con algunas notas o alguna notación formal desconocida para mí para explicar los requisitos sobre los tipos abstractos que son aceptables como claves, registros y colecciones que su algoritmo puede manejar.

Con muchos lenguajes de programación más antiguos cuando implementa ese algoritmo, el código va a precisar los tipos de datos en algo muy específico. Pero hay idiomas en los que puedes escribir el código siguiendo solo las nociones abstractas. Python, por ejemplo, usa la escritura de pato. Si le das algo como clave, si las operaciones que necesita hacer con las teclas funcionan en lo que dijiste que eran claves, eso es lo suficientemente bueno. (Si camina como un pato y grazna como un pato, entonces es un pato – ¡escribiendo pato!)

Pero se trata de implementar algoritmos y su pregunta era sobre la creación de algoritmos. Sobre todo lo que puedo decir es que si crea un algoritmo en términos de tipos de datos abstractos, debe tener cuidado de hacer explícitos los requisitos que exige el algoritmo de cualquier tipo concreto que desee desempeñar el papel de uno de los tipos abstractos. que el algoritmo espera manejar. Los números complejos no tienen un orden lineal, por lo que espero que la mayoría de los tipos vomiten si les pide que ordenen los registros utilizando un número complejo como clave. Entonces, cuando cree un algoritmo, dígame cuáles son sus expectativas para el tipo abstracto de las claves, etc.