Je suis étudiant pour les prochains entretiens et ont rencontré à cette question plusieurs fois (écrit textuellement)
De trouver ou de déterminer la non-existence d'un nombre dans une liste de N nombres, où les numéros de plage de plus de M, M >> N et N assez grand pour s'étendre sur plusieurs disques. Algorithme de battre O(log n); des points bonus pour la constante de temps de l'algorithme.
Tout d'abord, je ne suis pas sûr si c'est une question avec une réelle solution. Mes collègues et moi avons réfléchi sur ce problème pendant des semaines, et il semble mal formé (bien sûr, juste parce que nous ne pouvons pas penser à une solution ne signifie pas qu'il n'en est pas une). Quelques questions que j'aurais demandé à l'enquêteur sont les suivantes:
- Sont il répète dans la liste triée?
- Quel est le rapport du nombre de disques et N?
Une approche que j'en considération est à la recherche binaire min/max de chaque disque afin de déterminer le disque qui doit contenir ce nombre, si elle existe, puis une recherche binaire sur le disque lui-même. Bien sûr ce n'est qu'un ordre de grandeur de l'accélération si le nombre de disques est grand et vous avez également une liste triée des disques. Je pense que cela donnerait une sorte de O(log log n) fois.
Comme pour le M >> N indice, peut-être que si vous savez combien de numéros sont sur un disque et que la plage est, vous pouvez utiliser le casier principe de la règle certains cas, une partie du temps, mais je ne peux pas comprendre un ordre de grandeur de l'amélioration.
Aussi, les "points bonus pour la constante de temps de l'algorithme" me fait un peu suspect.
Des idées, des solutions, ou pertinents de l'histoire de ce problème?