He notado que muchos tutoriales de clasificación algo devuelven una matriz ascendente. Obviamente, esto se filtra a la implementación de su algoritmo de búsqueda que también toma una matriz ascendente ordenada como entrada.
¿Son los requisitos ascendentes para la ordenación/búsqueda solo una guía estándar para aprender sobre la resolución algorítmica de problemas?
¿Por qué no se implementa un algoritmo de búsqueda que acepte una matriz ascendente o descendente?
¿Sigue siendo seguro decir, por ejemplo, que un algoritmo de ordenación por inserción que genera una matriz descendente seguirá siendo una ordenación por inserción? En otras palabras, ¿son solo metodologías generales sujetas a pequeños ajustes para su salida?
Los algoritmos de clasificación son solo un esqueleto general en el que puede trabajar. Puede ordenar una matriz en orden ascendente/descendente, lexicográficamente (para cadenas), etc. según sus necesidades. Todavía se llamará 'clasificación por inserción' o 'clasificación por fusión' o lo que sea que esté usando.
Generalmente se muestra un orden ascendente en las plataformas educativas porque es el más común o básico. No hay otra razón.
El algoritmo de búsqueda del que está hablando es probablemente la búsqueda binaria. ¡También puede realizar una búsqueda binaria en una matriz descendente! Solo tienes que hacer ciertos cambios menores. Puede obtener más información al respecto aquí: https://en.wikipedia.org/wiki/Binary_search_algorithm También hay una página sobre búsqueda binaria en orden descendente (igual de rápido que el estándar): https://www.geeksforgeeks.org/search -un-elemento-en-una-matriz-ordenada-inversa/
En general, no es muy interesante hablar de ordenar a la inversa desde una perspectiva algorítmica. Simplemente intercambiamos algunos > por < y el problema es obviamente simétrico con el orden ascendente.
En mi experiencia, en general, cuando la gente dice "en orden", quiere decir ordenados en orden ascendente. Si alguien enumeró los números 5,6,7, diría que estaban en orden, y si enumeró 7,6,5, diría que están en orden inverso.
En términos de código, muchos lenguajes implementan una función o interfaz de comparación para manejar la clasificación, ya que los tipos de cosas que se clasifican suelen ser más complejos que las primitivas simples (números, cadenas) con una lógica de clasificación obvia. Dado que todos los algoritmos aún se aplican siempre que tenga un concepto de "a la izquierda de" y "a la derecha de" en una matriz ordenada de elementos, es común escribir algo como esto (ejemplo JS):
// Comparator function to sort in ascending order function sortAscending(a, b) { if (a > b) return 1; // return a positive number if a > b if (a < b) return -1; // negative if b < a return 0; // 0 if b == a } // Comparator function to sort in descending order function sortDescending(a, b) { return sortAscending(b, a); // look how easy it is to reverse }Estas funciones se pueden usar con (p. ej.) array#sort integrado
[1,2,3].sort(sortDescending);Como para
¿Por qué no se implementa un algoritmo de búsqueda que acepte una matriz ascendente o descendente?
Ciertamente podrías. Dependiendo de su algoritmo, es posible que deba verificar en qué orden está la matriz. Esto introduce un costo de rendimiento y complejidad que probablemente sea mayor que simplemente hacer que los consumidores clasifiquen su matriz en orden ascendente. Incluso si su lógica de clasificación es una caja negra completa, podría invertir la lista resultante.