domingo, 1 de marzo de 2020

Desordenar un vector numérico - codigo fuente -

Código fuente en lenguaje Vala del algoritmo desordenar un vector numérico mediante la técnica "Mezcla de naipes Fisher-Yates".
Compilar y ejecutar en Linux, por ejemplo, en CentOS 7.
Pasos:
  1. valac -v --Xcc=-lm VectorNum.vala
  2. ./VectorNum
En el 1º paso, compila el programa VectorNum.vala produciendo el programa ejecutable.
Compilación del programa VectorNum.vala

En el 2º paso, se invoca al programa ejecutable VectorNum mostrando en pantalla el vector ordenado y luego el vector desordenado.
Desordenar datos numéricos en un vector.


 VectorNum.vala
Copie y pegue en un editor de texto el siguiente código fuente y guarde todo en un archivo: VectorNum.vala

// Programa   : VectorNum.vala
// Autor          : Octulio Biletán - Febrero de 2020.
// Propósito    : Desordenar/mezclar los datos de un vector numérico
//                      mediante el uso del algoritmo "Mezcla de naipes Fisher-Yates".
// Compilar   : valac -v --Xcc=-lm VectorNum.vala
// Referencias: https://bost.ocks.org/mike/shuffle/
//

public class VectorNum
{
    // Desordena el vector numérico comenzando desde atrás hacia adelante
    void barajar(int[] vnum)
    {
      int m = vnum.length;    // último elemento del vector
      int t;            // var. temporaria
      int i;            // posición del elemento elegido al azar

      // Mientras queden elementos a barajar...
      while(m > 0)
      {
    // Elige un elemento al azar...
    i = (int)Math.floor(Random.next_double() * m--);
   
    // Y lo intercambia con el elemento actual.
    t       = vnum[m];
    vnum[m] = vnum[i];
    vnum[i] = t;
      }
    }
   
    // Muestra el vector numérico en pantalla
    void mostrar(int[] vnum)
    {
    for(int i = 0; i < vnum.length; i++)
    {
        stdout.printf("%d, ", vnum[i]);
    }
    }
   
    static int main(string[] args)
    {
    // Vector entrada: sus datos están ordenados.
    int ventrada[] = {-1,0,1,2,3,4,5,6,7,8,9,10};
   
    VectorNum vector = new VectorNum();

    stdout.printf("Vector ordenado:\n");
    vector.mostrar(ventrada);
    stdout.printf("\n");
       
    // 1º llamado
    vector.barajar(ventrada);
   
    // 2º llamado
    vector.barajar(ventrada);
   
    stdout.printf("\nVector desordenado: con dos mezclas\n");
    vector.mostrar(ventrada);
    stdout.printf("\n");
   
    return 0;
    }
}

Más info. sobre Vala puede encontrar en Wikipedia:
es.wikipedia.org/wiki/Vala_(lenguaje_de_programación)

miércoles, 19 de febrero de 2020

Desordenar un vector numérico

Análisis para realizar un algoritmo: desordenar un vector numérico que se
encuentra ordenado de menor a mayor o viceversa.

1º Caso:
Desordenar 3 elementos que se encuentran ordenados de menor a mayor o viceversa.
Cantidad de permutaciones que se deben realizar para obtener datos desordenados.
DesOrdenar(3) = 3! - 2 = 4
[abc], acb, bac, bca, cab, [cba]
[1,2,3]                             [3,2,1]
Excepto ==> [ ]

Desordenamiento efectivo: cuando todos sus elementos están fuera de su lugar de origen.
Conjunto: bca, cab ==>  2,3,1   ; 3,1,2
                                   m,M,m ; M,m,M

Ejemplo para 12 elementos ordenados y desordenarlos tomando sus elementos en grupos de a 3:
    Ordenados                      ==> 1,2,3,4,5,6,7,8,9,10,11,12
    1º Conjunto Desordenado ==> 2,3,1,5,6,4,8,9,7,11,12,10
    2º Conjunto Desordenado ==> 3,1,2,6,4,5,9,7,8,12,10,11

Ahora proceder a construir el algoritmo teniendo en cuenta al 1º Conjunto Desordenado o al 2º.
Luego de haber realizado dicho algoritmo transformarlo en un programa de computadora
eligiendo algún lenguaje de programación: Ada, Basic, C, C++, Go, Java, Julia,
Modula-3, Oberon-2, Pascal, Perl, PHP, Python, R, REXX, Smalltalk, SQL, Tcl,
Vala y otros más.

2º Caso:
Mezclar los elementos de un vector numérico ordenados de menor a mayor o viceversa.
Aunque no es un requisito necesario que el vector numérico esté ordenado también puede estar desordenado para hacer 'más desorden' en el mismo vector.
Usar el algoritmo "Mezcla de naipes Fisher-Yates".

Referencias:
 ________________\ Eugenio Martínez, Febrero de 2020 /__________________________
Desordenar un vector numérico.

domingo, 16 de febrero de 2020