La siguiente breve descripción del conocido "Google Eggs Puzzle" proviene principalmente del sitio web Google Eggs :
Google Eggs Puzzle: Dado n pisos ym huevos, ¿cuál es el enfoque para encontrar el piso más alto desde el cual los huevos se pueden tirar de manera segura, mientras se minimizan los lanzamientos (no los huevos rotos).
El llamado "piso más alto" en el problema anterior merece una definición más formal:
"más alto": debe haber un piso f (en cualquier edificio lo suficientemente alto) de manera que un huevo caído del piso f se rompa, pero uno que se caiga del piso ( f-1 ) no lo hará. Entonces, f-1 aquí es el piso más alto.
En realidad, la descripción de "más alto" es un extracto del libro "The Algorithm Design Manual (Second Edition)" de Steven S. Skiena. Al ser un ejercicio en el Capítulo 8 "Programación dinámica", hay muchos recursos en la Web dedicados a resolver el rompecabezas por medio de la programación dinámica, como Google Eggs y The Two Egg Problem .
Sin embargo, hay una pregunta del libro anterior:
Muestre que , donde es el número mínimo de lanzamientos. (Nota: he cambiado las anotaciones utilizadas en el libro para mantener la coherencia).E(⋅)
Es la pregunta que motiva mi problema:
Mi problema: ¿Hay alguna forma matemática cerrada para el "Rompecabezas de huevos de Google" general con n pisos ym huevos, en lugar de recurrencia de programación dinámica y, por supuesto, más estricta que uno?
fuente
Respuestas:
Con m huevos y k mediciones, la mayoría de los pisos que se pueden verificar es exactamente (tal vez dependiendo de la definición exacta). La prueba es trivial por inducción. Esta expresión no tiene forma inversa cerrada pero da buena asintótica.
fuente
En mi comentario anterior, dije que quizás es un límite apretado. No estoy seguro sobre el límite inferior, pero dado que solo desea una explicación de lo que significa , puedo explicar la intuición utilizando el límite superior.Θ(mink≤mkn1k) k
Como habrás adivinado, es la cantidad de huevos que realmente se usa. Eso explica el en el exterior. Ahora, una vez que hemos decidido usar eggs, he aquí una estrategia que funciona: piense en el número como escrito en la base . Entonces , la representación de tendrá "dígitos" (la palabra "dígito" generalmente está reservada para la base 10, pero la usaré aquí), y cada dígito tiene un valor de 0 a . Con nuestros huevos, estamos tratando de extraer los dígitos de uno por uno. Primero comenzamos con el dígito más significativo. Esto se puede determinar arrojando un huevo del piso numeradok min k n n1/k n k n1/k−1 k n 100..00 , , y así sucesivamente. Después de a lo sumo tiros, hemos aprendido cuál es el bit más significativo, y en el peor de los casos hemos roto solo 1 huevo. Ahora hacemos esto para todos los demás dígitos. Como hay dígitos, necesitaremos tiros.200..00 n1/k−1 k O(kn1/k)
Como comprobación de la cordura, observe que cuando , esta estrategia se reduce a dejar caer los huevos de cada piso uno por uno a partir del piso 1. Cuando , solo estamos trabajando en la base 2. Entonces esto produce el algoritmo de búsqueda binaria.k=1 k=logn
fuente