que estoy estudiando para próximas entrevistas y he encontrado esta pregunta varias veces (por escrito textualmente)Buscar existencia de número en una lista ordenada en tiempo constante? (Pregunta de la entrevista)
Encuentra o determinar la no existencia de un número en una lista ordenada de números N, donde se extienden sobre los números M, M >> N y N lo suficientemente grandes como para abarcar múltiples discos. Algoritmo para vencer a O (log n); puntos de bonificación por algoritmo de tiempo constante.
Antes que nada, no estoy seguro si esta es una pregunta con una solución real. Mis colegas y yo hemos reflexionado sobre este problema durante semanas y parece estar mal formado (por supuesto, el hecho de que no podamos pensar en una solución no significa que no haya ninguna). Algunas preguntas que le habría hecho al entrevistador son:
- ¿Hay repeticiones en la lista ordenada?
- ¿Cuál es la relación con la cantidad de discos y N?
Un enfoque que consideré fue la búsqueda binaria en el mínimo/máximo de cada disco para determinar el disco que debería contener ese número, si existe, y luego la búsqueda binaria en el disco. Por supuesto, esto es solo una aceleración de orden de magnitud si la cantidad de discos es grande y también tiene una lista ordenada de discos. Creo que esto produciría algún tipo de tiempo O (log log n).
En cuanto a la sugerencia de M >> N, tal vez si sabe cuántos números hay en un disco y cuál es el rango, podría usar el principio de casillero para descartar algunos casos algunas veces, pero puedo ' t descifrar una mejora de orden de magnitud.
Además, "puntos de bonificación para el algoritmo de tiempo constante" me hace un poco sospechoso.
¿Alguna idea, solución o historial relevante de este problema?
Tengo curiosidad por esto, y me gustaría ver otras respuestas. –
¿Por qué no usar hash (es decir, una tabla hash distribuida)? – jonderry
Oof, eso podría funcionar, dado un hash rápido, y uno de los mecanismos para mantener el desperdicio de espacio, pero las tablas hash distribuidas no son triviales. Ciertamente nada que quisiera escribir en una pizarra en 40 minutos. Aún así, no es un pensamiento fundamentalmente malo. Si soy sincero, probablemente solo le gritaría a Judy Arrays y correría. –