martes, 20 de mayo de 2014

Unidad 1 Elementos para el estudio de las estructuras datosde

1.     ¿Qué es un objeto
Es el conjunto de métodos y atributos que pueden ser utilizado con un propósito.

2.     ¿que es una variable?
Es un valor que puede cambiar, dados por el usuario o el programador.

3.     ¿Cuántos grupos de variables en java conocen?
Globales y locales.

4.     Que es un método en java?
Es un conjunto de instrucciones que realizaran una tarea específica, todos los métodos deben tener nombre, cuerpo y parámetros.

5.     Que es una clase?
Es un conjunto de métodos y variables en la que se pueden crear objetos.

Crea el algoritmo de una condición iterativo ciclo (ciclo iterativo condicionado).
1.     inicio
2.     escribir “da tu edad”.
3.     Leer edad
4.     Si edad<18
Escribir “eres el menor de edad”
5.     Si no
Escribir “eres mayor de edad”
6.     Fin

Supongamos que al inicio del año existe una pareja de conejos y que cada paraje produce un nueva pareja que puede reproducirse después de un mes, calcule el número de parejas de conejos al final del doceavo mes.

1=2
2=4
3=6
4=8
12=24

1.     ¿Qué es un casteo?
Trasforma una variable primitiva de un tipo a otro, o transformar un objeto de una clase a otra clase siempro y cuando haya relación de herencia entre ambas.

2.     ¿Para que se usa la comilla simple?
Para guardar un solo carácter.

3.     ¿Para que sirve .lenght, .indexOf y .Substring?
Lenght devuelve la longitud de una cadena o de un arreglo en un entero.
indexOf nos permite obtener el índice de comienzo de una subcadena dentro de otra.
Substring devuelve una subcadena, la cual corresponde al contenido entre los valores de entrada y salida.

4.     ¿Qué es el ámbito de las variables?

Es la zona del programa en la que se define la variable.

lunes, 19 de mayo de 2014

UNIDAD II:  ANALISIS Y DISEÑO DE ALGORITMOS 

RESUMEN DE O PEQUEÑA

Sea t:N-> R >=n una función arbitraria de los números naturales en los números enteros no negativos, tal como t(n) = 27n2 + 355/113 n+2. Se puede pensar que n representa la cantidad de un recurso dado que se invierte en ese ejemplar por ese una implementación particular de este algoritmo. Por ejemplo podría ser que la implementación invierta t(n) microsegundos en el ejemplar peor en un caso de tamaño n, o quizá t(n) represente la cantidad de espacio.
Matemáticamente significa que existe una constante real y positiva c y un entero umbral no tal que t(n) represente que n>= n0.
Resumen de la O grande.
Es conveniente disponer de un símbolo matemático para representar “el orden de”. Una vez mas, sea f: N -> R>= D una función arbitraria de los números naturales en los reales no negativos. Le indicara mediante O(f)n)) el conjunto de todas las funciones f:N -> R>=0 tales que t(n) <n cf(n) para todo n>= n0. Para  una constante positiva real c y para un umbral entero no.

RESUMEN DE OMEGA

Considérese una vez mas dos definiciones t: f -> infinito de los números naturales en los números enteros reales no negativos. Diremos que f(n) está en omega de f(n), lo cual se denota como t(n) t omega (f(n)), si f(n) está acotada inferiormente por un múltiplo real positivo de f(n) para todo n suficientemente grande. Matemáticamente, esto significa que existe una constante real positiva d y un umbral entero 0 tal que t(n) >= df(n) siempre que n>=n.
Algunos autores definen la notación omega en una forma que es diferente de forma sutil pero importante. Dicen que t(n) pertenece a omega (f(n)) si existe una constante real y positiva d mientras que nosotros requerimos que esta relación sea valida para todos los valores de n salvo un numero finito. Con esta definición un algoritmo que requiera un tiempo en omega (f(n)) en el caso peor es tal que existen infinitos casos en los cuales se requiere al menos df(n) microsegundos para la constante real postiva adecuada d.

Algoritmo de o pequeña.

Suma = 0
For (i=1; i<n; i++)
{
Suma+ = i; // suma = i+i;
} //Fin
Formula:
T(n) = n2 + 2n
Rapidez -> Eficiencia
Preciso -> Eficacia

Tipos de algoritmos:

1.- Deterministicos
2.- No Deterministicos
3.- Polinomicos
4.- No Polinomicos

DETERMINISTICOS:
El resultado de cada operación esta definido en forma única.

NO DETERMINITICOS:
El resultado de cada operación esta determinado por un conjunto de posibilidades.

POLINOMMIAL:
Es un algoritmo de complejidad polinomial o inferior.

NO POLINOMIAL:
Es un algoritmo de complejidad exponencial o mayor.

NOTACIÓN DE O GRANDE.
O(1)
Constante
O(log log(n))
Log log (n)
O(log (n))
Logarítmica
O(n)
Lineal
O(n log(n))
Nlogn
O(n2 )
Cuadrática
O(n3 )
Cubica
O(nm )
Polinomial
O(mn )
Exponencial
O(n! )
Factorial

CUESTIONARIO
1.- ¿Qué es la cota inferior y superior de un algoritmo?
Una cota inferior es una función que sirve de cota inferior de otra función cuando el argumento tiende a infinito, usualmente se utiliza la notación omega.
Una cota superior es una función que sirve de cota superior de otra función cuando el argumento tiende a infinito, usualmente se utiliza la notación O (O grande).
2.- De acuerdo a la complejidad, ¿qué algoritmos son factibles y cuáles son no factibles?
Los algoritmos factibles son aquellos que se denominan omega y son eficientes.
Los algoritmos nos factibles son aquellos que se denominan O (O grande) y su tiempo de ejecución es critico.
3.- De acuerdo a la complejidad, ¿ qué algoritmos son NP, o NP completos?
La clase NP es el conjunto de problemas cuya solución se puede comprobar en tiempo polinómico y el NP completo es un subconjunto del NP, los cuales son los más difíciles en el sentido de no encontrarse en P.
4.- ¿Qué instrumentos de software se usan para efectuar mediciones de algoritmos?
Métodos y entornos de desarrollo que nos ayudan a medir.

Cuestionario:

1. ¿Qué es recurrencia?
La recursividad es cuando una función se llama así misma para resolver un algoritmo y la recurrencia también se refiere a como calculamos el tiempo de ejecución de un algoritmo.
2. ¿Cómo resolver el problema “ejemplo 4.7.15” con recurrencia (considérese la siguiente recurrencia, que define T(n) cuando n es una potencia de 2?
T(n)= {1/3                       si n=1
           nT2 (n/2)               en caso contrario
1.10. Considérense las siguientes funciones de n:
F1(n)=n2                              cuadrática..
F2(n)=n2+1000n                   cuadrática
F3(n)= {n si n es impar
             n3 si n es impar                       cubica
F4(n)=  {n si n <=100
               n3 si n > 100        polinomial y puede ser cubica
Para cada posible par de valores i y j, indíquese si f(n) es O(fi(n)) o no y si fi(n) es Ω (fi(n)) o no.

ALGORITMOS VORACES 

 Los algoritmos voraces se utilizan típicamente para resolver problemas de optimización. Los ejemplos posteriores de este capítulo incluyen la búsqueda de la ruta más corta para ir de un nodo a otro a través de una red de trabajo a la búsqueda del mejor orden para ejecutar un conjunto de tareas en una computadora.
En tales contextos, un algoritmo voraz funciona seleccionando el arco, o la tarea, que parezca más comprometedora en un determinado instante, nunca reconsidera su decisión, sea cual sea la situación que pudiera surgir más adelante. No hay necesidad de evaluar alternativas, ni emplear sofisticados procedimientos, que permiten deshacer las decisiones anteriores.
Existe una función que da el valor de la situación que hemos hallado: el número de maneras utilizadas para dar la vuelta, la longitud de la ruta que hemos conseguido, el tiempo necesario para procesarlas tareas de planificación, o cualquier otro valor que tenemos intentando optimizar. La función objetiva no parece explícitamente en el algoritmo voraz.
Cuando el algoritmo voraz funciona correctamente la primera solución que se encuentre de esta manera es siempre óptima:
Función voraz(c: conjunto)=conjunto
|c| es el conjunto de candidatos
S ß 0 {construimos la solución en el conjunto S }
Mientras c=/ 0 {y no soluciones (s) hacer
Xß seleccionar ©
Cß c\|x|




Unidad 3: Estructuras de datos compuestas: Listas lineales

UNIDAD 3

A los arboles ordenados de grado dos se les conoce como arboles binarios ya que cada nodo del árbol no tendrá más de dos descendientes directos. Las aplicaciones de los arboles binarios son muy variadas ya que se les puede utilizar para representar una estructura en la cual es posible tomar decisiones con dos opciones en distintos puntos.

A continuación está el enlace a una presentación donde se estudian más a fondo los árboles binarios.

Unidad 4: Estructuras de datos compuestas: listas no lineales.

 

UNIDAD 4

En esta unidad hablaremos acerca de los arboles B y arboles B+
Definiciones.
Arboles B : Son estructuras de datos de árbol que se encuentran comúnmente en las implementaciones de bases de datos y sistemas de archivos. Arboles B+:es un tipo de estructura de datos de árbol, representa una colección de datos ordenados de manera que se permite una inserción y borrado eficientes de elementos.
Aqui dejo el link de la exposicion de Arboles B y Arboles B+ http://www.slideshare.net/neltherdaza/arboles-b-y-arboles-b

Unidad 5: Archivos.

La información en la computadora deberá estar almacenada en un archivo físico para poder acceder a ella; por ejemplo: memorias usb, discos duros, discos ópticos, entre otros. La forma de guardar los datos en estos dispositivos auxiliares es mediante unas estructuras llamadas archivos o ficheros.
Sus principales características son:

  • La información almacenada es permanente.
  • Gran cantidad de manejo de datos.
  • Su información es independiente a los programas.
  • Pueden almacenarse en dispositivos externos.
  • No tienen tamaño definido, el tamaño del mismo dependerá de la capacidad disponible en la memoria auxiliar donde se vaya a grabar.
Las operaciones generales que se realizan son:
  • Creación: Escritura de todos sus registros.
  • Consulta: Lectura de todos sus registros.
  • Actualización: Inserción supresión o modificación de algunos de sus registros
  • Clasificación: Reubicación de los registros de tal forma que queden ordenados según determinados criterios.
  • Borrado: Eliminando total del archivo, dejando libre el espacio del soporte que ocupaba.
Existen 2 tipos de organización de archivos: 
  • Organización Lógica: Es la organización que utiliza la computadora llamadas comúnmente carpetas.
  • Organización Física: Es el almacenamiento en dispositivos secundarios como discos magnéticos. 
Un sistema de archivos son los métodos y estructuras de datos que un sistema operativo utiliza para que se organicen los archivos en el disco. El término también es utilizado para referirse a una partición o disco que se está utilizando para almacenamiento, o el tipo del sistema de archivos que utiliza. 

La forma de acceder a los registros de un archivo depende del tipo de soporte y de la forma en que fueron almacenados los mismos.
  • Acceso secuencial: implica el acceso desde el primer registro hasta el registro requerido. El soporte puede ser secuencial y/o direccional. 
  • Acceso directo: esto implica acceder a un registro determinado. Este tipo de acceso sólo se da con soportes direccionales.

Unidad 6: Métodos de ordenamiento


Los algoritmos de ordenamiento nos permite mantener orden en una lista de datos que pueden ser, como veremos en este caso, matrices o vectores, en el siguiente enlace encontrarán las diapositivas en donde se están dichos métodos mencionados anteriormente. 

Unidad 7: Métodos de Búsqueda Parte 1


Unidad 7: Métodos de Búsqueda.

Búsqueda Lineal.

Consiste en ir comparando el elemento o criterio de búsqueda con cada uno de los elementos en el arreglo, esto se hace recorriendo el arreglo y deteniéndose en cada elemento y hacer la comparación, en caso de ser verdadera la comparación, guardar la posición el elemento o dato.


Implementación:


public  int busquedaSecuencial(int []arreglo,int dato){

 int posicion = -1;

  for(int i = 0; i < arreglo.length; i++){//recorremos todo el arreglo

      if(arreglo[i] == dato){//comparamos el elemento en el arreglo con el buscado

    posicion = i;//Si es verdadero guardamos la posicion

    break;//Para el ciclo

   }

 }

 return posicion;

}

Este método nos halla la posición del elemento o dato buscado pero en su primero coincidencia, si queremos que nos halle la posición de la última coincidencia, lo único que tenemos que hacer es eliminar la línea donde aparece 'break'.Si el resultado del método anterior es -1, significa que el elemento no se encuentra en el arreglo.

Algoritmo:


R= Inicio.

i=0.

Bandera = 0.

Mientras 1<n

Si n[i]=x

Inicio

Desplegar “búsqueda exitosa y el dato es”, x.

Desplegar “y se encuentra en la posición”, i=n.

Bandera=1.

Else

I=i+1.

Fin

Fin

Si bandera=0

Desplegar: “no se encontró el dato en la lista”.

Fin
Búsqueda Binaria.


El algoritmo de búsqueda binaria elimina de la búsqueda la mitad de los elementos que quedan en el array después de cada comparación. El array debe estar ordenado previamente,  declaramos las variables inicio y fin con la posición inicial y final del array, en la variable posición almacenamos el valor del centro del array.  En la primera iteración se evalúa si la variable posición coincide con el elemento buscado en ese caso la búsqueda termina y devuelve el resultado. Si el elemento buscado es mayor tomamos el intervalo que va desde el elemento central al final, en caso contrario, tomamos el intervalo que va desde el elemento central hasta el principio del intervalo.

Implementación:


//Implementacion recursiva

//Uso: binSearch(vector,0,vector.lenth-1,dato)

Static int binSearch

(double v[]; int izq, int der, doublé buscado)

{

  int centro = (izq+der)/2;

  If (izq>der)

    return -1;

  else if (buscado==v[centro])

    return centro;

  else if (buscando<v[centro])

    return binSearch(v, izq, centro-1, buscado);

  else

    return binSearch(v, centro+1, der, buscado);

}

Static int binSearch (double v[], double buscado)

{

      int izq = 0;

      int der = v.lenth-1;

      int centro = (izq+der)/2;

While ((izq<der) && (v[centro] ¡=buscado))

{

       If (buscado<v[centro])

             der = centro –  1;

       else

             izq  = centro --  1;

       centro =  (izq+der)/2;

}

If  (izq>der)

       return -1;

else

       return centro;

}



Búsqueda por transformación de llaves.

Función  Hash.

La idea básica de este método consiste en aplicar una función que traduce un conjunto de posibles valores llave en un rango de direcciones relativas.

Hash se refiere a una función o método para generar claves o llaves que representen de manera casi unívoca a un registro, archivo, documento, etc.

Ventajas:

  • Se pueden usar los valores naturales de la llave, puesto que se traducen internamente a direcciones fáciles de localizar.

  • Se logra independencia lógica y física, debido a que los valores de las llaves son independientes del espacio de direcciones.

  •  No se requiere almacenamiento adicional para los índices.

 Desventajas:
  •  No pueden usarse registros de longitud variable.

  •  El archivo no está clasificado.

  •  No permite llaves repetidas.

  • Solo permite acceso por una sola llave.

 FUNCIONES EN HASH MÁS COMUNES:

  •  Residuo de la división: Dividir el valor de la llave entre un numero apropiado, y después utilizar el residuo de la división como dirección relativa para el registro (dirección = llave módulo divisor).

  •  Medio del cuadrado: La llave es elevada al cuadrado, después algunos dígitos específicos se extraen de la mitad del resultado para constituir la dirección relativa.

  • Pliegue: En esta técnica el valor de la llave es particionada en varias partes, cada una de las cuales (excepto la última) tiene el mismo número de dígitos que tiene la dirección relativa objetivo. Estas particiones son después plegadas una sobre otra y sumadas. El resultado, es la dirección relativa.

OPERACIONES BASICAS:

  • Inserción.

  •  Búsqueda.

  •  Eliminar.
Implementación:



import java.util.*;



public class hash {



public static void main (String args[]) throws Exception



 {

Hashtable hash = new Hashtable(10,10);



for (int i = 0; i <= 100; i++)

{

Integer entero = new Integer ( i );

hash.put( entero, "Numero : " + i);

}

for (Enumeration e = hash.keys(); e.hasMoreElements();)

{

 System.out.println (hash.get(e.nextElement()));

}

}


Colisiones.
Cuando la función hash obtiene una misma dirección para dos claves diferentes, se está ante una colisión.

Algunos métodos más utilizados para resolver colisiones son los siguientes:

  •  Reasignación

  •  Arreglos anidados

  •  Áreas de desborde

Reasignación:

Existen varios métodos que trabajan bajo el principio de comparación y  reasignación de elementos. Se analizaran tres de ellos:



  •  Prueba lineal

  •  Prueba cuadrática

  • Doble dirección hash



a)  Prueba lineal

Consiste en que una vez detectada la colisión se debe de recorrer el arreglo secuencialmente a partir del punto de colisión, buscando al elemento. El proceso de búsqueda concluye cuando el elemento es hallado, o bien cuando se encuentra una posición vacía. Se trata al arreglo como a una estructura circular: el siguiente elemento después del último es el primero. 













b)  Prueba Cuadrática

 Este método es similar al de la prueba lineal. La diferencia consiste en que en el cuadrático las direcciones alternativas se generan como D + 1, D + 4, D + 9,

.D + i² en vez de D + 1, D + 2,..., D + i. Esta variación permite una mejor distribución de las claves colisionadas.

















c)  Doble dirección hash

Consiste en que una vez detectada la colisión se debe generar otra dirección aplicando la función hash a la dirección previamente obtenida. El proceso se detiene cuando el elemento es hallado, o bien cuando se encuentra una posición vacía.
La función hash que se aplique a las direcciones puede o no ser la misma que originalmente se aplicó a la clave. No existe una regla que permita decidir cual será la mejor función a emplear en el cálculo de las sucesivas direcciones.