En primer lugar, como ya han señalado otros, para la clasificación en sí, utilizará cualquiera de los algoritmos de clasificación conocidos, que abstraen con elegancia cualquier conocimiento sobre el tipo de datos ordenados en una función / función de comparación para que se centren en la clasificación en sí, agnóstica sobre los datos.
Ahora, el verdadero misterio aquí radica en la comparación de nuestros datos. Como usted señala, la simple comparación lexicográfica no es suficiente. Las cadenas no entienden los números, solo propiedades y operaciones homogéneas basadas en caracteres. En C ++ los llamamos rasgos; en SQL los llamamos colaciones. Sin embargo, no está ordenando datos homogéneos aquí, por lo que ya no funcionan, porque está aplicando diferentes semánticas a diferentes partes de sus datos. Está dividiendo una cadena “abc 123” en una cadena “abc” y un número entero 123. Estoy enfatizando un ejemplo intencionalmente simple, porque produce una lógica de comparación simple: divida sus cadenas en una lista de partes que corresponden a datos numéricos y no numéricos y compárelos por partes y en orden: comparaciones lexicográficas para cadenas frente a cadenas / números y comparación numérica para números. Puede generalizar eso para comparar cualquier número, no solo enteros.
Esto significa esencialmente que tokenizará cadenas y comparará tokens. A veces, los límites entre estos tokens son claros e intuitivos, pero a veces no lo son, ya que los números no se pueden separar convenientemente. ¿Cómo se compara “5xyz” y “12foo”? Si extrae los “tokens” numéricos independientemente del hecho de que no haya una separación clara entre ellos y las cadenas adyacentes, obtendrá un resultado, si los ve como dos cadenas alfanuméricas, obtendrá otro, por lo que los resultados variarán según su implementación y De todos los que estamos aquí, usted es el único que conoce la naturaleza de sus datos.
- ¿Pueden los algoritmos de aprendizaje automático reforzar los estereotipos?
- Cómo diseñar una estructura de datos que pueda almacenar 1-1000 números
- ¿Qué tipo de ordenación usa C ++ para hacer múltiples clasificaciones?
- ¿Cómo funciona un árbol de expansión y cómo lo configuro?
- ¿Qué puedes hacer con los algoritmos?