Esta pregunta y esta pregunta me hicieron pensar un poco. Para ordenar una matriz de longitud con elementos únicos en , necesitamos poder almacenar conteos de valores en la matriz. Hay algunas sugerencias, pero estoy buscando una manera de hacerlo en el peor de los casos, el tiempo lineal. Más específicamente:
Dada una lista de elementos con elementos distintos, determinar una lista de tuplas de todos los elementos únicos tal que es el recuento de elemento en .
Aquí hay algunas ideas (fallidas) que he tenido y que me han sugerido:
- Árbol de búsqueda binaria equilibrado : con esto se necesitará para insertar en el árbol y aumentar los valores. Después de las inserciones podríamos hacer un recorrido del árbol en . Por lo tanto, el tiempo total sale a que es demasiado lento.
- Hash Map : con esto podemos obtener inserciones esperadas y, por lo tanto, tiempo esperado . Sin embargo, esto todavía no es peor de los casos.
- Vaciar el mapeo espacial - Encontrar el mínimo y el máximo elemento en . Asigne (pero no inicialice) suficiente memoria para cubrir este rango. Utilice esta memoria básicamente como un mapa hash e incluya un hash aleatorio para que no intentemos acceder a la memoria corrupta. Esta estrategia presenta problemas. (1) Es probabilístico con muy, muy baja probabilidad de falla, pero aún no está garantizado. Usar memoria como esta nos limita a las restricciones de punto flotante o entero.
- Matrices asociativas : hay muchas otras matrices asociativas que se pueden utilizar, de forma similar a los mapas hash y BST, pero no encuentro ninguna que coincida con estas restricciones.
Tal vez hay un método obvio que me falta, pero también creo que podría no ser posible. ¿Cuáles son tus pensamientos?