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é la búsqueda por interpolación realiza solo 2 pasos cuando se calcula manualmente, pero cuando se programa, requiere más de 2 pasos?

Estoy confundido por el cálculo de la interpolación de búsqueda, el programa proporciona diferentes resultados de paso en comparación con los cálculos manuales.

Datos de entrada: {3, 5, 10, 14, 21}

Y quiero encontrar el número 14. Si se calcula manualmente, solo se necesitan 2 pasos para encontrar 14.

Intenté esto en mi programa de Interpolación de Búsqueda

System.out.println(“post low higth ” + post + ” ” + low + ” ” + hight);

Y muestra 3 pasos para encontrar la clave que estoy buscando, como se ve en la siguiente imagen: enlace a la imagen.

Pero cuando hago

System.out.println(“mid row col dataMid: ” + mid + ” ” + left + ” ” + right);

en la Búsqueda Binaria, los cálculos manuales y los bucles en el programa son los mismos, que son solo 2 pasos, como se ve en la siguiente imagen: enlace a la imagen.

¿Alguien puede explicarme por qué está sucediendo esto?

Este es mi código de búsqueda por interpolación:

public static void interpolationSearch(int[] arr, int key) {
int low, hight, post;
low = 0;
hight = arr.length – 1;

while (low <= hight) {
    post = low + ((key - arr[low]) / (arr[hight] - arr[low])) * (hight - low);

    System.out.println("post low higth " + post + " " + low + " " + hight);
    if (key == arr[post]) {
        System.out.println("Data found");
        System.out.println("data ada di indeks ke-: " + post);
        return;
    } else if (arr[post] > key) {
        hight = post - 1;
    } else {
        low = post + 1;
    }
}

}

Y este es mi código de búsqueda binaria:

public static void binarySearch(int arr[], int key) {
int left = 0;
int right = arr.length – 1;

while (left <= right) {
    int mid = left + (right - left) / 2;

    System.out.println("mid left hight: " + mid + " " + left + " " + right);
    //divide and conquer
    if (key == arr[mid]) {
        System.out.println("Data ditemukan!");
        return;
    } else if (key > arr[mid]) {
        left = mid + 1;
    } else {
        right = mid - 1;
    }
}
System.out.println("Data tidak ditemukan!");

}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La búsqueda por interpolación y la búsqueda binaria son dos algoritmos diferentes con principios de operación distintos. La búsqueda por interpolación utiliza una posición estimada basada en la distribución de los datos en el array, mientras que la búsqueda binaria utiliza la posición del punto medio del array.

    En tu caso, los datos de entrada {3, 5, 10, 14, 21} están ordenados de manera ascendente. Al buscar el número 14, la búsqueda por interpolación toma tres pasos para encontrar la clave porque estima la posición de la clave basándose en la distribución de los datos en el array. Por otro lado, la búsqueda binaria toma dos pasos para encontrar la clave porque siempre divide el intervalo de búsqueda por la mitad, lo que resulta en menos pasos en comparación con la búsqueda por interpolación.

    La diferencia en el número de pasos entre los dos algoritmos puede tener varias causas, como la distribución de los datos de entrada, la implementación específica del algoritmo o los tipos de datos utilizados en el algoritmo. Es esencial considerar estos factores y elegir el algoritmo más adecuado para el problema específico.

Comments are closed.