¿Es la búsqueda binaria óptima en el peor de los casos?

¿Es la búsqueda binaria óptima en el peor de los casos? Mi instructor lo ha dicho, pero no pude encontrar un libro que lo respalde. Comenzamos con una matriz ordenada y, en el peor de los casos (el peor de los casos para ese algoritmo), cualquier algoritmo siempre tomará más comparaciones por pares que la búsqueda binaria.

Mucha gente dijo que la pregunta no estaba clara. ¡Perdón! Entonces, la entrada es cualquier matriz ordenada general. Estoy buscando una prueba que diga que cualquier algoritmo de búsqueda tomará al menos comparaciones log2 (N) en el peor de los casos (el peor de los casos para el algoritmo en consideración).

preguntado el 28 de septiembre de 11 a las 05:09

¿Qué pasará con todas las respuestas que no abordan la pregunta real, es decir, no explican / prueban? el porqué log2 (N) es óptimo para el peor de los casos de cualquier algoritmo? Estoy dudando en rechazar todas las respuestas dadas hasta ahora .. -

Creo que te refieres a "como máximo comparaciones log2 (N) en el peor de los casos". -

5 Respuestas

Sí, la búsqueda binaria es óptima.

Esto se ve fácilmente apelando a la teoría de la información. Se necesita log N bits simplemente para identifican un elemento único fuera de N elementos. Pero cada comparación solo le brinda un poco de información. Por lo tanto, debe realizar log N comparaciones para identificar un elemento único.

Más prolijamente ... Considere un algoritmo hipotético X que supera la búsqueda binaria en el peor de los casos. Para un elemento particular de la matriz, ejecute el algoritmo y grabar las preguntas que hace; es decir, la secuencia de comparaciones que realiza. O más bien, registre el respuestas a esas preguntas (como "verdadero, falso, falso, verdadero").

Convierta esa secuencia en una cadena binaria (1,0,0,1). Llame a esta cadena binaria la "firma del elemento con respecto al algoritmo X". Haga esto para cada elemento de la matriz, asignando una "firma" a cada elemento.

Ahora aquí está la clave. Si dos elementos tienen la misma firma, ¡entonces el algoritmo X no puede diferenciarlos! Todo lo que el algoritmo sabe sobre la matriz son las respuestas que obtiene de las preguntas que hace; es decir, las comparaciones que realiza. Y si el algoritmo no puede diferenciar dos elementos, entonces no puede ser correcto. (Dicho de otra manera, si dos elementos tienen la misma firma, lo que significa que dan como resultado la misma secuencia de comparaciones por parte del algoritmo, ¿cuál devolvió el algoritmo? Contradicción).

Finalmente, demuestre que si cada firma tiene menos de log N bits, entonces deben existir dos elementos con la misma firma (principio de casillero). Hecho.

[actualizar]

Un comentario adicional rápido. Lo anterior asume que el algoritmo no sabe nada sobre la matriz, excepto lo que aprende al realizar comparaciones. Por supuesto, en la vida real, a veces sabes algo sobre la matriz. a priori. Como ejemplo de juguete, si sé que la matriz tiene (digamos) 10 elementos, todos entre 1 y 100, y que son distintos, y que los números 92 a 100 están todos presentes en la matriz ... Entonces claramente no es necesario realizar cuatro comparaciones incluso en el peor de los casos.

De manera más realista, si sé que los elementos están distribuidos uniformemente (o distribuidos aproximadamente uniformemente) entre su mínimo y su máximo, nuevamente puedo hacerlo mejor que la búsqueda binaria.

Pero en el caso general, la búsqueda binaria sigue siendo óptima.

Respondido el 28 de Septiembre de 11 a las 20:09

¿En el peor de los casos, para qué algoritmo? No hay un "peor caso" universal. Si tu pregunta es ...

"¿Hay algún caso en el que la búsqueda binaria requiera más comparaciones que otro algoritmo?"

Entonces, sí, por supuesto. Una búsqueda lineal simple lleva menos tiempo si el elemento es el primero en la lista.

"¿Existe incluso un algoritmo con un mejor tiempo de ejecución en el peor de los casos que la búsqueda binaria?"

Sí, en los casos en los que sepa más sobre los datos. Por ejemplo, un árbol de base o trie es, en el peor de los casos, de tiempo constante con respecto al número de entradas (pero lineal en la longitud de la clave).

"¿Existe un algoritmo de búsqueda general con un mejor tiempo de ejecución en el peor de los casos que la búsqueda binaria?"

Si solo puede asumir que tiene una función de comparación en las teclas, no, el mejor peor caso es O (log n). Pero hay algoritmos que son más rápidos, pero no en el sentido de una gran O.

... así que supongo que primero tendrías que definir la pregunta.

Respondido el 28 de Septiembre de 11 a las 09:09

Me refería al último caso "¿Existe un algoritmo de búsqueda general con un mejor tiempo de ejecución en el peor de los casos que la búsqueda binaria?". La entrada, por supuesto, es una matriz ordenada. También estoy interesado solo en el número de comparaciones por pares para el peor de los casos (el peor de los casos para el algoritmo dado). También será bueno el enlace a una prueba. - BSRK Aditya

No tengo una prueba a la mano, pero la idea es que esté buscando el índice del elemento, que es un número con log2 (n) bits. Lo máximo que puede estar seguro de aprender de una comparación es un bit, comparando con la mitad de la lista restante. Por lo tanto, necesitará comparaciones log_2 (n) al menos, en el peor de los casos, donde el elemento no está en la lista. - Sean Owen

La búsqueda binaria tiene la complejidad del peor de los casos de O(log(N)) comparaciones: lo cual es óptimo para una búsqueda basada en comparación de una matriz ordenada.

En algunos casos, puede tener sentido hacer algo más que una búsqueda basada puramente en la comparación; en este caso, es posible que pueda superar el O(log(N)) barrera - es decir, echa un vistazo interpolación buscar.

Respondido el 28 de Septiembre de 11 a las 09:09

Depende de la naturaleza de los datos. Por ejemplo, el idioma inglés y un diccionario. Podría escribir un algoritmo para lograr mejores resultados que una búsqueda binaria haciendo uso del hecho de que ciertas letras aparecen en el idioma inglés con diferentes frecuencias.

Pero, en general, una búsqueda binaria es una apuesta segura.

Respondido el 28 de Septiembre de 11 a las 09:09

Creo que la pregunta no está un poco clara, pero aún así, aquí están mis pensamientos.

El peor caso de búsqueda binaria sería cuando el elemento que está buscando se encuentra después de todas las comparaciones log n. Pero los mismos datos pueden ser el mejor caso para la búsqueda lineal. Depende de la disposición de los datos y de lo que esté buscando, pero el peor de los casos para la búsqueda binaria sería log n. Ahora bien, esto no se puede comparar con los mismos datos y la búsqueda de búsqueda lineal, ya que su peor caso sería diferente. El peor de los casos para la búsqueda lineal podría ser encontrar un elemento que esté al final de la matriz.

Por ejemplo: la matriz A = 1, 2, 3, 4, 5, 6 y la búsqueda binaria en A para 1 sería el peor de los casos. Mientras que para la misma matriz, la búsqueda lineal de 6 sería el peor de los casos, no la búsqueda de 1.

Respondido el 28 de Septiembre de 11 a las 10:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.