Junio 22, 2018, 08:49:29 am

Autor Tema: Biblioteca del algoritmo  (Leído 21076 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado WaesWaes

  • Actualmente es
  • Colaborador
  • ****
  • Mensajes: 4402
  • You are not prepared!
    • Ver Perfil
Biblioteca del algoritmo
« en: Mayo 01, 2010, 06:16:50 pm »
Bien a lo largo de este tema los usuarios de CPH iremos recopilando distintos algoritmos con el afan de lograr construir una biblioteca lo suficientemente grande como para que le sirva a cualquier programador.

Como publicar un algoritmo:

Solo debe publicarse el algoritmo en si, sin el programa principal para que este mas explicito.

Deben comentar que es cada paramentro y cada variable que usen y sea necesario comentarla para que se entienda el algoritmo.

El lenguaje no importa porque estariamos privando a usuarios que solo saben un lenguaje a publicar un algoritmo, pero lo mejor (si es que sabes alguno de estos lenguajes) es que este o en pascal o en C/C++ o en Java (eligo estos lenguajes ya que los los aceptedos por la ACM-ICPC, pascal en realidad no, pero antes si =D), sin embargo si tu algoritmo esta en otro lenguaje no importa.

Hay que comentar las particularidedes de cada lenguaje, como por ejemplo uso de una libreria.

Hay que categorizar el algoritmo: por ejemplo decir "Algoritmo: de ordenamiento, estructura de dato: Arreglo, lenguaje de programacion: C" y luego postear el codigo.

Saludos

PD: este tema esta sujeto a cambios que el moderador de seccion considere necearios.

Desconectado WaesWaes

  • Actualmente es
  • Colaborador
  • ****
  • Mensajes: 4402
  • You are not prepared!
    • Ver Perfil
Re: Biblioteca del algoritmo
« Respuesta #1 en: Mayo 01, 2010, 06:34:35 pm »
Algoritmo de: ordenamiento
Estructura de datos: Arreglo
Lenguaje: Java

Ordenamiento de Burbuja

Código: (java) You are not allowed to view links. Register or Login
//recibe un arreglo de enteros que sera el que ordenara
void ordenamientoBurbuja(int[] arreglo){
    int aux; //variable donde se guardara un valor al hacer el cambio
    for(int i=0; i<arreglo.length; i++){
        for(int j=0; j<vector.length-1; j++){
            if (arreglo[j]>arreglo[j+1]){
                aux =arreglo[j];
                arreglo[j] = arreglo[j+1];
                arreglo[j+1] = aux;
            }
       }
    }
}

Ese algoritmo asi como esta tiene algunas deficiencias como por ejemplo, si el arreglo llega ordenado lo recorre todo (omega(n2))

Se podria mejorar con una variable booleana que indique si hubo algun cambio:

Código: (java) You are not allowed to view links. Register or Login
//recibe un arreglo de enteros que sera el que ordenara
void ordenamientoBurbuja(int[] arreglo){
    int aux; //variable donde se guardara un valor al hacer el cambio
    boolean hayaCambio=true; //variable que indica si se hacen cambios en el arreglo
    while(hayaCambios) {
        hayaCambios=false; //seteamos en false para saltar del while cuando se ordena el arreglo
        for(int j=0; j<vector.length-1; j++){
            if (arreglo[j]>arreglo[j+1]){
                hayaCambios=true;
                aux =arreglo[j];
                arreglo[j] = arreglo[j+1];
                arreglo[j+1] = aux;
            }
       }
    }
}

Saludos

Desconectado jep

  • Night Elf Druid
  • Moderador
  • *****
  • Mensajes: 1773
  • Sexo: Masculino
    • Ver Perfil
Re: Biblioteca del algoritmo
« Respuesta #2 en: Mayo 14, 2010, 09:12:17 am »
Algoritmo de: ordenamiento
Estructura de datos: Arreglo
Lenguaje: C

Ordenamiento Quicksort

Introducción
El método de ordenamiento se basa en elegir un elemento llamado pivot, colocar los elementos menores a él antes, y los mayores a él después, de modo que este elemento ya queda en su posición final.
se realiza el algoritmo recursivamente para las 2 sub-listas formadas (la anterior al pivot y la posterior al pivot)

Este algoritmo puede optimizarse de 2 formas, mejorando el método para elegir el pivot, y mejorando el método para colocar el pivot en su posición (y a su vez colocar las sub-listas en su posición)

Código: (c) You are not allowed to view links. Register or Login
void swap(int *a,int *b) /* permutar entre 2 valores */
{
int temp;

temp=*a;
*a=*b;
*b=temp;
}

/* esta rutina elije un pivot y coloca los elementos menores a él antes de su posición, los mayores o iguales despues de su posicion */
int ordenar_sublista(int *lista, int cant_lista)
{
int pivot=cant_lista/2; /* posicion inicial del pivot */
int pos_pivot=0; /* posicion final del pivot */
int c1,c2; /* contadores */


/* buscamos la cantidad de valores menores al pivot (los iguales van a quedar del lado de los mayores) */

for(c1=0;c1<pivot;c1++)
if(lista[c1]<lista[pivot]) /* busqueda para las posiciones anteriores a la del pivot */
pos_pivot++;

for(c1=pivot+1;c1<cant_lista;c1++) /* busqueda para las posiciones posteriores a la del pivot */
if(lista[c1]<lista[pivot])
pos_pivot++;

swap(&lista[pivot],&lista[pos_pivot]); /* colocamos el pivot en la posición que debe ocupar */

/* colocamos todos los valores menores al pivot antes de él, y los mayores e iguales después de él */
for(c1=0,c2=pos_pivot+1;c1<pos_pivot || c2<cant_lista;c1++,c2++)
{
while(c1<pos_pivot && lista[c1]<lista[pos_pivot]) c1++; /* buscamos algun valor del lado menor que debe pasar al otro lado */
while(c2<cant_lista && lista[c2]>=lista[pos_pivot]) c2++; /* buscamos algun valor del lado mayor que debe pasar al otro lado */

if(c1>=pos_pivot || c2 >= cant_lista) /*  comprueba si se llegó al final de alguna lista */
break; /*  si uno de los 2 llega al final necesariamente la lista está ordena */

swap(&lista[c1],&lista[c2]); /*  permuta los valores que tienen que cambiar de lado */
}

return(pos_pivot); /* devuelve la posición del pivot, para poder calcular las sub listas  */
}

void quicksort(int *lista,int cant_lista)
{
int pivot;

if(cant_lista>2)
{
pivot=ordenar_sublista(lista,cant_lista); /* ordena la sublista, y retorna el valor del pivot elejido */
quicksort(lista,pivot); /* llamo con la sublista menor al pivot */
quicksort(lista+pivot+1,cant_lista-(pivot+1)); /* llamo con la sublista mayor al pivot */
}
else if(cant_lista==2 && lista[0]>lista[1]) /* si ya solo quedan 2 elementos ordeno directamente */
{
swap(&lista[0],&lista[1]);
}
}
« Última modificación: Mayo 14, 2010, 09:23:57 am por jep »

Desconectado -SharK_90-

  • Yo vivo en CPH
  • ***
  • Mensajes: 718
  • Sexo: Masculino
  • buuu
    • Ver Perfil
Re: Biblioteca del algoritmo
« Respuesta #3 en: Julio 10, 2010, 02:27:50 am »
Algoritmo de Busqueda binaria.
Estructura de datos: Arreglo
Lenguaje: Java

Para utilizar este algoritmo, el array debe estar ordenado. La búsqueda binaria consiste en dividir el array por su elemento medio en dos subarrays más pequeños, y comparar el elemento con el del centro. Si coinciden, la búsqueda se termina. Si el elemento es menor, debe estar (si está) en el primer subarray, y si es mayor está en el segundo.


Código: (java) You are not allowed to view links. Register or Login
     /**
     * lista:  un arreglo de enteros
     */
    public int buscar(int numBuscado){return buscar(0,cant,numBuscado);}

    private int buscar(int desde,int hasta,int numBuscado){
        int Salida=-1;
        if(desde==hasta){ //caso base, busco en un solo elemento.
            if(lista[desde]==numBuscado)Salida=desde;
            else Salida=-1;
        }
        else{//caso recursivo
            int nHasta=((hasta-desde+1)/2)+(desde-1);
            if(lista[nHasta]>=numBuscado)Salida=buscar(desde,nHasta,numBuscado);
            else{
                int nDesde=nHasta+1;
                Salida=buscar(nDesde,hasta,numBuscado);
            }
        }
        return Salida;
    }

Desconectado -SharK_90-

  • Yo vivo en CPH
  • ***
  • Mensajes: 718
  • Sexo: Masculino
  • buuu
    • Ver Perfil
Re: Biblioteca del algoritmo
« Respuesta #4 en: Julio 10, 2010, 02:38:16 am »
Algoritmo solucion a las torres de hanoi.
Lenguaje: Java

Las Torres de Hanói es un rompecabezas o juego matemático inventado en 1883 por el matemático francés Éduard Lucas.1 Este solitario se trata de un juego de ocho discos de radio creciente que se apilan insertándose en una de las tres estacas de un tablero. El objetivo del juego es crear la pila en otra de las estacas siguiendo unas ciertas reglas. El problema es muy conocido en la ciencia de la computación y aparece en muchos libros de texto como introducción a la teoría de algoritmos.
You are not allowed to view links. Register or Login


Código: (java) You are not allowed to view links. Register or Login
public class Torres{
    private int transiciones=0;
    private int[] Disco;
    public Torres(int n){
        Disco=new int[n];
        for (int i=0;i<n;i++){
            Disco[i]=1;
        }
    }
    public void Hanoi(){
        transiciones=0;
        Hanoi(Disco.length,1,3,2);
        System.out.println("se realizaron "+transiciones+" transiciones");
   
    }
    private void Hanoi(int n,int Origen,int Destino,int Auxiliar){
        transiciones++;
        if (n==1) pasar(n,Origen,Destino);
        else{
            Hanoi(n-1,Origen,Auxiliar,Destino);
            pasar(n,Origen,Destino);
            Hanoi(n-1,Auxiliar,Destino,Origen);
        }
    }
    private void pasar(int d,int Origen,int Destino){Disco[d-1]=Destino;}
}

Desconectado ralymontes

  • Yo vivo en CPH
  • ***
  • Mensajes: 487
  • Sexo: Masculino
  • Dime "Raly" ... ;-)
    • Ver Perfil
Re: Biblioteca del algoritmo
« Respuesta #5 en: ſeptiembre 06, 2010, 10:18:43 pm »
Algoritmo: Ordenamiento
Estructura da Datos: Arreglo
Lenguaje: C

Ordenamiento Quicksort Recursivo.

El método de ordenación Quicksort, esta generalmente considerado como el mejor algoritmo de ordenación disponible actualmente.

El algoritmo correspondiente a este método es el siguiente:

1-. Se selecciona un valor del array. Este valor se puede escoger aleatoriamente ó haciendo la media de un pequeño conjunto de valores tomados de array. El valor optimo sería aquel que esté precisamente a la mitad del arreglo. Pero aún en el peor de los caso (inicar con el valor en un extremo del array) quicksort funciona muy bien.

2-. Se divide el array en dos, una mitad con  todos los valores menores que el escogido, y el otro extremo con los valores mayores ó iguales a éste.

3.- Se repiten pasos 1 y 2 en cada parte (división del arreglo) hasta que el array esté arreglado.



El programa está dividido en dos funciones. En una está el control del algoritmo (qs) y la otra (qsort) controla el envio del arreglo.
Código: (c) You are not allowed to view links. Register or Login

void qsort(int lista[], int n_elementos)
{
     qs( lista,  0 ,  n_elementos-1);
/* la función qs hace el ordenamiento ademas de controlar los limites de la diovision del arreglo*/
     return  ;
}
void qs (int lista[], int inf, int sup)
{
     int izq=0,der=0;
     int mitad=0,x=0;
     izq=inf;
     der=sup;
     mitad=(lista[(izq+der)/2]);
     do
     {
       while(lista[izq]< mitad && izq<sup) izq++;
       while(mitad<lista[der] && der > inf) der--;
       if(izq<=der)
          {
          x=lista[izq],lista[izq]=lista[der],lista[der]=x;
          izq++;der--;
          }
     }
       while(izq<=der);
       if(inf<der)qs(lista, inf, der);
       if(izq<sup)qs(lista, izq, sup);
       return  ;
}
NI UNA INTELIGENCIA SUBLIME, NI UNA GRAN IMAGINACION, NI LAS DOS COSAS JUNTAS FORMAN EL GENIO; ES AMOR, ESO ES EL ALMA DEL GENIO

Desconectado miserik

  • Me das tu IP?
  • *
  • Mensajes: 120
  • Sexo: Masculino
  • no culpo a la crisis, yo ya era pobre antes de eso
    • Ver Perfil
Re: Biblioteca del algoritmo
« Respuesta #6 en: Noviembre 06, 2010, 11:10:18 am »
Algoritmo: invierte un numero (p.ej. de 123 a 321)
Estructura da Datos: Numeros Enteros
Lenguaje: creo que TODOS, en realidad solo son operaciones aritmeticas.

Código: You are not allowed to view links. Register or Login
int numero;
float x;
float n;
float k;

.....
.....//Darle valor a la variable "numero"
.....//("scanf, showInputDialog, numero=XXXX")
.....

n= (float) numero;
while(n>0)
{
    k= n%10;
    x= x*10+k;
    n=n/10;
}

.....
.....//x ahora tiene el numero invertido, listo para mostrar o trabajar con el
.....




Aqui hay una aportacion hecha por jep, usando el algoritmo en una funcion de un programa en lenguaje C.

las adaptaciones son:
1.- se usan solo variables de tipo int
2.- Num es la variable con el valor ingresado por el usuario, usada para la llamada a la funcion InvertirDigitos
3.- UltDigito es la variable local equivalente a k
4.- NumInv es la variable local equivalente a x


Código: (c) You are not allowed to view links. Register or Login
int InvertirDigitos(int Num)
{
int NumInv = 0;
int UltDigito;

while( Num > 0 )
{
UltDigito = Num % 10;
NumInv = NumInv * 10 + UltDigito;
Num = Num / 10;
}

/* NumInv ahora tiene el numero invertido, listo para mostrar o trabajar con el  */

return( NumInv );

Aqui el algoritmo aplicado a un metodo en java

Código: (java) You are not allowed to view links. Register or Login
public class InviertirDigitos
{
 static int NumInv, UltDigito;

 public static int Invierte(int Num)
  {
    NumInv=0;

    while( Num > 0 )
    {
       UltDigito = Num % 10;
       NumInv = NumInv * 10 + UltDigito;
       Num = Num / 10;
    }
    return NumInv;
  }
}
« Última modificación: Noviembre 06, 2010, 02:05:58 pm por miserik »
de nada sirve la pluma si no tienes las palabras apropiadas, y de nada sirve la espada si peleas por razones equivocadas
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Desconectado .:.IlcOn14.:.

  • Yo vivo en CPH
  • ***
  • Mensajes: 1146
  • Sexo: Masculino
  • Simplemente Pro
    • Ver Perfil
Re: Biblioteca del algoritmo
« Respuesta #7 en: Enero 23, 2011, 11:21:46 am »
3 pequeñas aportaciones.

Algoritmo: Consigue el numero binario de un numero decimal. Ej: 1024 = 10000000000
Tipo de Datos: Enteros
Lenguaje: Vb.net (Aplicable a casi cualquier lenguaje)

Código: You are not allowed to view links. Register or Login
    Public Function GetBinaryOfNumber(ByVal Den As ULong) As String
        Dim R As String = Nothing
        Do Until Den = 0
            R &= Den Mod 2
            Den \= 2
        Loop
        Return StrReverse(R)
    End Function

Algoritmo: Calculo de Factorial de un número.
Tipo de datos: Enteros
Lenguaje: Vb.net (aplicable a casi todos los lenguajes)
(La comprobacion Try puede ser eliminada)

Código: You are not allowed to view links. Register or Login
    Public Shadows Function Factorial(ByVal Num As SByte) As ULong
        Dim Factorial1 As ULong
        Factorial1 = 1
        Try
            Do Until Num = 1
                Factorial1 *= Num
                Num -= 1
            Loop
            Return (Factorial1)
        Catch ix As OverflowException
            Throw New OverflowException("El numero resultante es demasiado grande")
        End Try
    End Function

Algoritmo: Calculo Doble Factorial. Ej: 8!! = 2 x 4 x 6 x 8 = 384
Tipo de datos: Enteros
Lenguaje: Vb.net (Aplicable a casi todos los lenguajes)
(La comprobacion Try puede ser eliminada)

Código: You are not allowed to view links. Register or Login
    Public Shadows Function DobleFactorial(ByVal Num As Byte) As ULong
        Dim Factorial1 As ULong
        Factorial1 = 1
        Try
            Do Until Num = 1 Or Num = 0
                Factorial1 *= Num
                Num -= 2
            Loop
            Return (Factorial1)
        Catch ix As OverflowException
            Throw New OverflowException("El numero resultante es demasiado grande")
        End Try
    End Function

Saludos
Fuck Youuuuuuuuu (8)(8)

Desconectado NetSyS

  • Me das tu password?
  • **
  • Mensajes: 202
  • Sexo: Masculino
  • Only If You Want You Can :)
    • Ver Perfil
    • Comunidad Rock-Games
Re:Biblioteca del algoritmo
« Respuesta #8 en: ſeptiembre 01, 2011, 11:22:33 am »

Algoritmo: Recorrer una matriz por filas.
Estructura de datos: Matriz
Lenguaje: Java

Código: (java) You are not allowed to view links. Register or Login
int matriz = new int [2][2];
int j;
for(int i=0;i<matriz.length;i++)
{
     for(j=0;j<matriz[i].length;j++)
       {
              //Operacion a realizar por filas.
        }
}

Algoritmo: Recorrer una matriz por Columnas:
Estructura de datos: Matriz
Lenguaje: Java.

Código: (java) You are not allowed to view links. Register or Login
int matriz = new int [2][2];
int i;
for(int j=0;j<matriz[j].length;j++)
{
     for(i=0;i<matriz.length;i++)
       {
              //Operacion a realizar por Columnas.
        }
}

Saludos espero les sirva.
--[El Conocimiento es Libre y lo que Hagas con el Depende de ti ]--
You are not allowed to view links. Register or Login

<a href="You are not allowed to view links. Register or Login"><img src="You are not allowed to view links. Register or Login"></a>
.::Usalo::.




Desconectado kicasta

  • Moderador
  • *****
  • Mensajes: 578
    • Ver Perfil
Re:Biblioteca del algoritmo
« Respuesta #9 en: ſeptiembre 23, 2011, 09:48:27 pm »
Algoritmo: n primeros primos.
Lenguaje: C#, con uso de Linq

Es un algoritmo bastante sencillo e intuitivo, pues se basa en la definición de los primos.

Enumera los n  primeros primos en el intervalo [2,m].

Código: (C#) You are not allowed to view links. Register or Login
        static void Main(string[] args)
        {
            var n= 10;
            var m= 1000;

            foreach (var primo in (from numero in Enumerable.Range(2,m)
                                   where Enumerable.Range(2, (int)Math.Sqrt(numero) -1)
                                   .Count((int tmp) => numero % tmp== 0) == 0
                                   select numero)
                                   .Reverse()
                                   .Take(n)
                                   )
            {               
                Console.WriteLine(primo);
            }
        }

Saludos
« Última modificación: Enero 05, 2012, 03:44:01 pm por kicasta »

“When all you have is a hammer, every problem looks like a nail.”

You are not allowed to view links. Register or Login: You are not allowed to view links. Register or Login - You are not allowed to view links. Register or Login

Desconectado kicasta

  • Moderador
  • *****
  • Mensajes: 578
    • Ver Perfil
Re:Biblioteca del algoritmo
« Respuesta #10 en: ſeptiembre 24, 2011, 08:41:35 am »
Algoritmo:  de Ordenamiento
EDA: Arreglo
Lenguaje: C#

CountingSort.

Está demostrado que la cota mínima para ordenar n elementos es O(nLog(n)), sin embargo asumiendo algunas hipótesis sobre los datos de entrada, por ejemplo enteros pequeños, caracteres, etc, se puede realizar un ordenamiento sin comparación (que al fin y al cabo es lo que da el Log(n)).

El algoritmo construye un vector auxiliar, con valor inicial cero en todas sus posiciones. Este vector cuenta las incidencias del número (nos centramos en enteros para la explicación) en el vector original. Luego coloca los números en el original recorriendo el auxiliar.

Código: (C#) You are not allowed to view links. Register or Login
        static int[] countingSort(int[] arr)
        {
            int min = arr.Min();
            int max = arr.Max();

            int[] aux = new int[max - min + 1];
            int pos = 0;

            for (int i = 0; i < arr.Length; i++)
                aux[arr[i] - min]++;

            for (int i = min; i <= max; i++)           
                while (aux[i - min]-- > 0)
                {
                    arr[pos] = i;
                    pos++;
                }
           
            return arr;
        }

El algoritmo se basa en la hipótesis que los elementos están en el rango 1..k, por lo que queda O(n+k), si k es O(n) entonces el algoritmo queda lineal.

Otro algoritmo que sale directamente es el RaddixSort. Y es que suponiendo que todos los números tienen la misma cantidad de dígitos (o los string tienen la misma longitud), se le hace un CountingSort a cada dígito y queda ordenado el arreglo.

Saludos
« Última modificación: Enero 05, 2012, 03:44:24 pm por kicasta »

Desconectado kicasta

  • Moderador
  • *****
  • Mensajes: 578
    • Ver Perfil
Re:Biblioteca del algoritmo
« Respuesta #11 en: Octubre 07, 2011, 03:42:19 pm »
Algoritmo: Determinar si un número es primo.
Lenguaje: C#

El teorema de Wilson plantea que p > 4 es primo <=> (p – 1 )! % p == 0. Sin embargo esto computacionalmente no es comprobable. Así que este pequeño algoritmo lo que hace moverse por los 6 * q + 1, 6 * q - 1, que es la forma que tienen todos los números primos excepto 2 y 3, hasta la raíz cuadrada de p. Si no se encuentra divisor, entonces el número es primo.

Código: (C#) You are not allowed to view links. Register or Login
static bool IsPrime(int n)
        {
            if (n % 2 == 0 || n % 3 == 0)
                return true;

            bool result = false;
            for (int q = 1; q < Math.Sqrt(n); q++)
            {
                if (n % (6 * q + 1) == 0 || n % (6 * q - 1) == 0)
                {
                    result = true;
                    break;
                }
            }

            return result;
        }

Saludos
« Última modificación: Enero 05, 2012, 03:45:13 pm por kicasta »

Desconectado SC123+

  • Me das tu IP?
  • *
  • Mensajes: 64
  • EN/DECRyPT TIS MADAFACKER!!!!
    • Ver Perfil
Re:Biblioteca del algoritmo
« Respuesta #12 en: Noviembre 13, 2011, 03:08:17 pm »
Algoritmo: ingreso y ordenamiento de elementos de menor a mayor de un array
Lenguaje: Basic
Complejidad: O(n2) (en todos los casos)

En cada iteración se busca el mayor valor de la lista, se coloca en la última posición y se vuelve a buscar con la lista descontando el valor encontrado.

Código: You are not allowed to view links. Register or Login
CLS
PRINT "INGRESE CANTIDAD DE ELEMENTOS DEL ARRAY:"
INPUT n
a = n
PRINT "INGRESE ELEMENTOS:"

FOR i = 1 TO n
   INPUT a(i)
NEXT i

DO UNTIL n <= 1
   m = -9999
   FOR i = 1 TO n
      IF a(i) > m THEN
         m = a(i)
         j = i
      ELSE
      END IF
   NEXT i
   a(j) = a(n)
   a(n) = m
   n = n - 1
LOOP

PRINT "################# ORDENADOS DE < A > ###################"

FOR i = 1 TO a
   PRINT "a("; i; ")="; a(i)
NEXT i
« Última modificación: Noviembre 14, 2011, 07:45:48 pm por jep »

Desconectado kicasta

  • Moderador
  • *****
  • Mensajes: 578
    • Ver Perfil
Re:Biblioteca del algoritmo
« Respuesta #13 en: Noviembre 14, 2011, 05:25:15 pm »
Algoritmo: Descomposición Wavelet.
Lenguaje: C#

Este Algoritmo brinda un procedimiento sencillo para hallar la descompsición Wavelet de un vector mediante su definición clásica. La transformada Wavelet es una especie de transformada de Fourier, que se puede usar en el tratamiento de señales e imágenes.

Se puede mejorar su costo en memoria, pero esto solo la haría más ilegible, que no es la idea.

REMARK: el vector de entrada debe tener como longitud un número que sea potencia de dos.

Más información: You are not allowed to view links. Register or Login
                           

Código: (C#) You are not allowed to view links. Register or Login
static double[] Wavelet(double[]wv)
        {
            double b = Math.Log(wv.Length, 2);
            if (b - (int)b == 0)
            {
                int levels;
                double avg;
                double[] wv1 = new double[wv.Length];

                levels = (int)b;
               
                for (int j = 0; j < levels; j++)
                {
                    for (int i = 0, pos = 0; i < wv.Length/Math.Pow(2, j); i += 2, pos++)
                    {
                        avg = (wv[i] + wv[i + 1])/2;
                        wv1[pos] = avg;
                        wv1[pos + (wv.Length/((int) Math.Pow(2, j)*2))] = wv[i] - avg;

                    }
                    wv = (double[]) wv1.Clone();
                }
            }
            else
                throw new Exception("Invalid Argument Length");

            return wv;
           
        }

Saludos
« Última modificación: Enero 05, 2012, 03:45:39 pm por kicasta »

Desconectado kicasta

  • Moderador
  • *****
  • Mensajes: 578
    • Ver Perfil
Re:Biblioteca del algoritmo
« Respuesta #14 en: Diciembre 07, 2011, 04:14:39 pm »
[C#] Trabajo con arreglos.

Este es un algoritmo que permite rotar un arreglo de n elementos m posiciones hacia atrás, de forma tal que A <- A[(i+m) mod(n)]

Código: (C#) You are not allowed to view links. Register or Login
using System;
using System.Collections.Generic;

namespace DaaProblema1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] A = { 1, 2, 3, 4 };
            RotateArr(9, A);
            for (int i = 0; i < A.Length; i++)
                Console.Write(A[i] + "|");
        }

        private static void RotateArr<T>(int m, T[] A)
        {
            if (m % A.Length != 0)
                Rotate(0, m % A.Length, A);
        }

        private static void Rotate<T>(int pos, int m, T[] A)
        {
            for (int j = pos; j < A.Length - m; j += m)
                for (int i = 0; i < m; i++)
                {
                    if ((i + j + m) >= A.Length)
                    {
                        Rotate(i + j, m - i, A);
                        break;
                    }
                    Swap(i + j, i + j + m, A);
                }
        }

        private static void Swap<T>(int init, int dest, T[] A)
        {
            T x = A[dest];
            A[dest] = A[init];
            A[init] = x;
        }
    }
}
« Última modificación: Enero 05, 2012, 03:46:06 pm por kicasta »


question
Biblioteca CPH

Iniciado por the dark-angel

4 Respuestas
2443 Vistas
Último mensaje Abril 08, 2011, 10:26:38 am
por the dark-angel
exclamation
La biblioteca de Kamui

Iniciado por kamui23

0 Respuestas
4916 Vistas
Último mensaje Marzo 22, 2009, 05:49:28 am
por kamui23
xx
Biblioteca [HashMap]

Iniciado por Kreusser

0 Respuestas
2306 Vistas
Último mensaje Octubre 08, 2010, 09:14:59 pm
por Kreusser
xx
La Biblioteca de los Sabios

Iniciado por unomas01

3 Respuestas
2125 Vistas
Último mensaje Diciembre 18, 2011, 09:17:43 am
por Beor15
xx
Biblioteca de programas

Iniciado por Cagalas

7 Respuestas
4561 Vistas
Último mensaje Abril 05, 2006, 08:11:45 pm
por Cagalas
exclamation
biblioteca de Api de windows

Iniciado por alexmanycool

15 Respuestas
10016 Vistas
Último mensaje Febrero 05, 2010, 02:13:41 pm
por alexmanycool
xx
Biblioteca de Kamui

Iniciado por kamui23

5 Respuestas
6040 Vistas
Último mensaje Noviembre 04, 2014, 06:44:57 pm
por Kreusser
exclamation
[C] Biblioteca Escolar

Iniciado por Mitos

4 Respuestas
3071 Vistas
Último mensaje Mayo 10, 2012, 08:29:43 pm
por javisuma
xx
biblioteca de programas

Iniciado por Cagalas

0 Respuestas
2993 Vistas
Último mensaje Abril 11, 2006, 05:03:04 am
por Cagalas
exclamation
LA BIBLIOTECA DE ALDEBARAN

Iniciado por aldebaran_taurus

88 Respuestas
36055 Vistas
Último mensaje Marzo 22, 2009, 07:38:10 pm
por Bl@ster25