Cómo encontrar la diferencia mínima entre 2 números dentro de una matriz de tamaño n (encontrar el intervalo más pequeño) en PHP

Después de intentar resolver un examen para un trabajo, encontré una pregunta interesante que parece muy básica, pero sin la implementación correcta puede terminar en problemas. El problema es el siguiente, necesitas encontrar la diferencia mínima o el intervalo más pequeño de los números dentro de una matriz. Por ejemplo:

// De la matriz dada
[1, 5, 3, 19, 18, 25]
// El intervalo más pequeño o la diferencia mínima es: 1
// Porque esa es la diferencia entre los 2
// números más cercanos en la matriz (numéricamente hablando)
// en este caso 18 y 19 (19-18 = 1)

Es muy probable que pienses que una posible solución sería encontrar los 2 elementos de menor número en la matriz, para que puedas encontrar la diferencia y por lo tanto el intervalo, sin embargo con el siguiente caso:

// Entrada:
[80, 1, 4, 25, 12, 60, 78, 70]
// Resultado: 2
// Diferencia entre 78 y 80

No funcionará ya que el intervalo más pequeño, en este caso, es 2 (intervalo entre 78, 80) y el intervalo entre 1 y 4 es 3. Entonces, la solución propuesta no funcionaria. En este artículo, te explicaré cómo encontrar fácilmente el intervalo más pequeño o la diferencia entre los números de una matriz en PHP de manera óptima.

Implementación

Por lo tanto, el problema actual requiere una solución óptima; de lo contrario, con matrices enormes, el rendimiento será complicado. Lo ideal es ordenar la matriz en orden ascendente, utilizando la función de clasificación de PHP sort. Esto nos permitirá iterar sobre la matriz y encontrar la diferencia mínima simplemente comparando cada par ascendente en la matriz dada. La siguiente representación de imagen mostrará exactamente lo que vamos a hacer con la matriz de entrada de 8 elementos:

  • Establece la matriz de entrada, en este caso, hay 8 elementos en diferente orden numérico.
  • Ordena la matriz, que generará la misma matriz de 8 elementos pero comenzando con el número más bajo y aumentando respectivamente.
  • A continuación, crea pares con el índice de iteración de un bucle, por ejemplo, 1 y 44 y 1212 y 25, y así sucesivamente con todos los elementos.
  • Resta el número más pequeño del número más grande del par, esto generará el intervalo.
  • Almacena en una variable la diferencia que genera cada operación y actualícela solo si el resultado es menor que el anterior, una vez finalice la variable almacenará el intervalo más pequeño, que en este caso es 2.

Smallest Interval Between Numbers in Array PHP

Habiendo dicho eso, escribiendo esta lógica en código PHP, nuestro fragmento se vera así:

/**
 * Encuentre el intervalo más pequeño (diferencia mínima) entre los números de una matriz.
 * 
 * @param array $numbers
 * @return {Int} $diff
 */
function findSmallestInterval(array $numbers)
{
    // Número de elementos de la matriz
    $length = count($numbers);

    // Ordenar matriz en orden ascendente
    sort($numbers);

    // Inicializar la diferencia con el número entero máximo permitido por PHP en la constante
    // Por lo general, int (2147483647) en sistemas de 32 bits e int (9223372036854775807) en sistemas de 64 bits
    $diff = PHP_INT_MAX;

    // Encuentre el intervalo más pequeño comparando los pares adyacentes en la matriz ordenada
    for ($i = 0; $i < $length - 1; $i++){
        if ($numbers[$i + 1] - $numbers[$i] < $diff){
            $diff = $numbers[$i + 1] - $numbers[$i];
        }
    }

    return $diff;
}

Estos son algunos elementos que puedes probar con esta implementación:

$items = [80, 1, 4, 25, 12, 60, 78, 70];

// Esperado: 2
echo findSmallestInterval($items);

$items = [1, 5, 3, 19, 18, 25];

// Esperado: 1
echo findSmallestInterval($items);

$items = [1, 19, -4, 33, 38, 25, 100];

// Esperado: 5
echo findSmallestInterval($items);

Que te diviertas ❤️!

Esto podria interesarte

Conviertete en un programador más sociable