es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué algunos códigos en la Búsqueda Binaria establecen el pivote medio como ‘izquierda + (derecha – izquierda) // 2’?

Por ejemplo, búsqueda binaria básica en Python:

left, right = 0, len(nums) - 1

while left <= right:
    # // 2 -> piso
    pivot = izquierda + (derecha - izquierda) // 2
    if nums[pivot] == objetivo:
        devolver pivote
    if objetivo < nums[pivot]:
        derecho = pivote - 1
    else:
        izquierda = pivote + 1

En este código, pivot es izquierda + (derecha - izquierda) // 2, no len(nums) // 2.
¿Podría explicar por qué?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón por la que se calcula el “pivote” como “izquierda + (derecha – izquierda) // 2” en lugar de simplemente “len(nums) // 2”, es evitar problemas de desbordamiento de enteros cuando la longitud de la lista de entrada es extremadamente grande.

    “Len(nums) // 2” es una expresión más simple, pero implica calcular la longitud de la lista, lo que puede ser enorme y causar desbordamiento de enteros. En cambio, “izquierda + (derecha – izquierda) // 2” calcula directamente el punto medio desde los límites del índice izquierdo y derecho, lo que evita el problema de desbordamiento.

    Además, calcular el punto medio de esta manera es más eficiente en términos de complejidad temporal, ya que solo implica algunas operaciones aritméticas básicas, mientras que calcular la longitud de la lista requiere iterar sobre toda la lista. La complejidad temporal del algoritmo de búsqueda binaria se vería afectada si se utilizara un enfoque de cálculo de punto medio menos eficiente.

Comments are closed.