Algunas respuestas son básicamente correctas, aunque no lo parezcan. El enfoque de tabla hash (para un ejemplo) tiene un límite superior basado en el rango tipo involucrado en lugar del número de elementos en las matrices. Al menos por la mayoría de las definiciones, eso hace que el (límite superior en) el espacio sea constante, aunque la constante puede ser bastante grande.
En teoría, podría cambiar eso de un límite superior a una cantidad constante de espacio. Sólo por ejemplo, si estuviera trabajando en C o C++, y era una matriz de char
, podría utilizar algo como:
size_t counts[UCHAR_MAX];
Desde UCHAR_MAX es una constante, la cantidad de espacio utilizado por la matriz es también una constante.
Editar: Me gustaría tener en cuenta que un límite en los rangos/tamaños de los elementos implicados está implícito en casi todas las descripciones de complejidad algorítmica. Solo por ejemplo, todos "sabemos" que Quicksort es un algoritmo O (N log N). Sin embargo, eso solo es cierto si suponemos que comparar e intercambiar los elementos que se ordenan requiere tiempo constante, lo que solo puede ser cierto si vinculamos el rango. Si el rango de elementos implicados es lo suficientemente grande como para que no podamos tratar una comparación o un intercambio como tomar un tiempo constante, entonces su complejidad sería algo así como O (N log N log R), donde R es el rango, por lo que log R
se aproxima la cantidad de bits necesarios para representar un artículo.
Ya etiquetado como interview question. – Kibbee
Hum ...Tal vez tratando de engañarte, porque el enfoque obvio es O (1) para el espacio y O (n) para el tiempo ... ¿Dónde está el truco? – mjv
@mjv: si tiene una solución O (n), dígale. –