2010-11-22 11 views
9

Recientemente he escuchado una opinión de que la búsqueda binaria puede mejorarse dividiendo el rango por phi (ración dorada) en lugar de por 2. Esto fue una gran sorpresa para mí, porque nunca escuché acerca de dicha optimización. ¿Es esto cierto? ¿Hubiera sido esto cierto si la división por 2 y por phi fuera igualmente efectiva?¿La búsqueda de sección dorada es mejor que la búsqueda binaria?

En caso negativo, ¿hay alguna condición general en virtud de la cual la búsqueda de sección dorada se realice más rápido que la búsqueda binaria?

UPD: Editado para eliminar el enlace a un artículo de Wikipedia no relevante. Lo siento por ser engañoso.

Respuesta

6

Hay dos algoritmos llamados "búsqueda de Fibonacci".

es sobre un algoritmo numérico para encontrar el máximo o mínimo de ciertas funciones. Es el algoritmo óptimo para este problema. Este problema es lo suficientemente diferente del problema de búsqueda binaria que debería ser obvio para cualquier caso dado que sea apropiado.

The other kind of Fibonacci search ataca el mismo problema que la búsqueda binaria. La búsqueda binaria es esencialmente siempre mejor. Knuth escribe que la búsqueda de Fibonacci "es preferible en algunas computadoras, porque implica solo sumas y restas, no división por 2." Pero casi todas las computadoras usan aritmética binaria, en la que la división por 2 es más simple que la suma y la resta.

(El artículo de Wikipedia afirma actualmente que Fibonacci búsqueda podría tener mejor localidad de referencia, una reclamación Knuth hace no maquillaje. Se podría, tal vez, pero esto es engañoso. Las pruebas realizadas por una búsqueda de Fibonacci están más cerca Juntos, precisamente en la medida en que son menos útiles para reducir el rango, en promedio esto daría como resultado más lecturas de más partes de la tabla, no menos. Si los registros se almacenan realmente en cinta, para que domine el tiempo de búsqueda, entonces La búsqueda de Fibonacci puede superar la búsqueda binaria —, pero en ese caso ambos algoritmos están lejos de ser óptimos.)

+1

En lugar de ondear con la mano, sería mejor dejarnos saber las complejidades de la búsqueda de Fibonacci que faltan en el [artículo] de la Wikipedia (http: //en.wikipedia.org/wiki/Fibonacci_search) (solo hay una complejidad dada y esto es sin decir de qué tipo es: inútil * información *). –

+2

Las diferencias son de factor constante. En la memoria de acceso aleatorio, la búsqueda binaria y la búsqueda de Fibonacci son ambas O (log n). Al buscar una cinta, ambos son O (n). –

0

"funciona más rápido" es vago; pero la búsqueda binaria debe tener el peor caso más bajo vinculado al número de accesos.

+1

como en, cualquier método que sesgue la región dividida tendrá más accede cuando el elemento buscado termina en la región más grande. El caso promedio puede disminuir, pero el peor caso aumentará. Conceptos similares en la codificación (en el sentido de Shannon). – lijie

+0

... para extender esa última nota, y el método sesgado será mejor en promedio cuando el elemento buscado tiende a encontrarse con mayor frecuencia en la región más pequeña. Lo cual solo sucederá si tiene una buena forma de decidir qué lado debería ser más pequeño, según el conocimiento de la naturaleza de los datos. – greggo

3

Me puede faltar algo aquí, pero después de mirar la entrada de Wikipedia en la sección de búsqueda dorada parece que no resuelve el mismo problema que una búsqueda binaria. Mientras que una búsqueda binaria es útil para encontrar un valor en una lista ordenada, se utiliza una búsqueda de sección dorada para encontrar un valor mínimo o máximo de una función en un rango de valores.

+2

Correcto, son para diferentes propósitos y óptimos bajo diferentes condiciones. La bisección es para encontrar "raíces", o lugares donde algunas propiedades cambian, y es óptima para refinar "pares de horquillado" - pares de lugares para los cuales el signo (propiedad) difiere. La búsqueda de sección dorada es para minimización/maximización, y es óptima para refinar "trillizos de horquillado", triples de los puntos a, b, c tales que a mokus

Cuestiones relacionadas