Algo así como una clasificación Radix o una clasificación contable puede lograr O (N) como el peor de los casos. El problema es que solo funciona en tipos seleccionados de datos para ordenar. Por ejemplo, solo funciona bien si la clave de clasificación es algo así como un ordinal (pensar en caracteres o enteros) en un rango pequeño. La idea detrás de este tipo de clasificación es que ya existe una posición esperada para cada elemento posible; en realidad, todo lo que está haciendo es colocarlo en su posición predefinida.
Para la ordenación de propósito general, no hay forma de moverse por O (N log N). No es que nadie haya podido inventar todavía. El problema con el propósito general es que necesita comparar dos elementos para descubrir cuál va antes que el otro. y, por lo tanto, debe comparar constantemente cada elemento que se inserta con los que ya están en la colección. La mejor forma de esto es O (N log N), es decir, para cada elemento a insertar, lo compara con logN otros elementos que ya están en la colección.
Sin embargo, hay otro problema. En algunas implementaciones no es una buena idea agregar nuevos elementos después del ordenamiento. Por ejemplo, una matriz ya ordenada significaría que hay una sobrecarga adicional para mover elementos existentes al insertar un nuevo elemento. Si la colección necesita mantenerse ordenada y constantemente le agrega y elimina elementos, entonces es mejor diseñar esta colección como un árbol de búsqueda binario (especialmente un BST equilibrado).
- ¿Cuál es el programa C para encontrar la subsecuencia repetida más larga en un texto dado?
- ¿Cuál es la mejor manera de realizar operaciones de intercambio K en un entero de N dígitos para obtener el máximo número posible?
- ¿Por qué no necesito conocer algoritmos para lenguajes de programación modernos como Java o Python?
- ¿Cómo funcionan los algoritmos de clasificación en un sistema distribuido grande?
- ¿Cómo funciona un árbol de expansión y cómo lo configuro?
Si no lo necesita ordenado, solo desea poder llegar a cualquier elemento rápidamente, entonces una tabla hash es realmente más rápida. En efecto, es similar a una ordenación de radix, excepto que en lugar de un valor clave que define un rango exacto, utiliza un valor hash que convierte cualquier tipo de clave en una posición en la colección. Desafortunadamente, esta no es una colección ordenada, ya que las funciones de hash de mejor rendimiento realmente colocan cada elemento en un orden aparentemente aleatorio. Esto podría dar una inserción de O (N), mientras que también proporciona una recuperación de O (1), lo mismo que permite Radix.