Programa Php para el algoritmo de inversión para la rotación de arrays

Escribe una función rotar(arr[], d, n) que gire arr[] de tamaño n por d elementos. 
Ejemplo : 

Input :  arr[] = [1, 2, 3, 4, 5, 6, 7]
         d = 2
Output : arr[] = [3, 4, 5, 6, 7, 1, 2] 

Array

La rotación de la array anterior por 2 hará que la array
 

ArrayRotation1

Los primeros 3 métodos para rotar una array por d elementos se han discutido en esta publicación. 
Método 4 (El algoritmo de inversión):
Algoritmo: 
 

rotate(arr[], d, n)
  reverse(arr[], 1, d) ;
  reverse(arr[], d + 1, n);
  reverse(arr[], 1, n);

Sean AB las dos partes del arreglo de entrada donde A = arr[0..d-1] y B = arr[d..n-1]. La idea del algoritmo es: 
 

  • Invierta A para obtener ArB, donde Ar es el reverso de A.
  • Invierta B para obtener ArBr, donde Br es el reverso de B.
  • Invierta todo para obtener (ArBr) r = BA.

Ejemplo: 
Sea la array arr[] = [1, 2, 3, 4, 5, 6, 7], d = 2 y n = 7 
A = [1, 2] y B = [3, 4, 5, 6, 7] 
 

  • A inversa, obtenemos ArB = [2, 1, 3, 4, 5, 6, 7]
  • Invertir B, obtenemos ArBr = [2, 1, 7, 6, 5, 4, 3]
  • Invertir todo, obtenemos (ArBr)r = [3, 4, 5, 6, 7, 1, 2]

A continuación se muestra la implementación del enfoque anterior: 
 

PHP

<?php
// PHP program for reversal
// algorithm of array rotation
 
/* Function to left rotate
   arr of size n by d */
function leftRotate(&$arr, $d, $n)
{
 
    if ($d == 0)
        return;
      // in case the rotating factor is
      // greater than array length
      $d = ($d % $n);
    reverseArray($arr, 0, $d - 1);
    reverseArray($arr, $d, $n - 1);
    reverseArray($arr, 0, $n - 1);
}
 
/*Function to reverse $arr
  from index start to end*/
function reverseArray(&$arr,
                       $start, $end)
{
    while ($start < $end)
    {
        $temp = $arr[$start];
        $arr[$start] = $arr[$end];
        $arr[$end] = $temp;
        $start++;
        $end--;
    }
}
 
// Function to
// print an array
function printArray($arr, $size)
{
    for ($i = 0; $i < $size; $i++)
    print $arr[$i]." ";
}
 
// Driver code
$arr = array(1, 2, 3,
             4, 5, 6, 7);
$n = sizeof($arr);
$d = 2;
 
// Function calling
leftRotate($arr, $d, $n);
printArray($arr, $n);
     
// This code is contributed
// by ChitraNayal
?>

Producción : 

3 4 5 6 7 1 2

Complejidad de tiempo: O (n), donde n representa el tamaño de la array dada.
Espacio auxiliar: O(1), no se requiere espacio adicional, por lo que es una constante.

Consulte el artículo completo sobre el algoritmo de inversión para la rotación de array para obtener más detalles.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *