miércoles, 2 de junio de 2010

Archivos y Registros

Registros
Es una estructura heterogénea denominados campos y a los que accedemos por su nombre. al igual que otro dato, debemos declarar el tipo registro antes de utilizar.

De las operaciones que podemos realizar con los registros de encuentra la lectura y la asignación, tambien puede ser utilizado como parametro en los metodos.

Archivos
Es una estructura homogénea de datos consistentes en una secuencia de datos llamada registros, tambien se le denomina ficheros a lo archivos, es una colección de datos relacionados entre si, localizada y almacena como una unidad en alguna parte del computador.

Los archivos pueden ser constrastados con arrays y registros, los archivos no tienen un tamaño fijo por lo que se pueden hacer archivos grandes o pequeños segun se necesiten.

con los archivos al igual que con otras estructuras podemos realizar varias operaciones entre las que encontramos Read (lectura del registro actual), Write (escritura sobre registro actual), Close (cerrar el archivo), etc.

Bibliografia

martes, 1 de junio de 2010

Pilas y Colas


Esta clase fue interesante, se nos explico la estructura de las pilas y colas con ejemplos relacionados con la vida real. Estas estructuras se pueden complementar utilizando las listas de la cuales hablamos anteriormente.

Pilas
Estas estructuras son muy utilizadas como herramientas de programacion de tipo L.I.F.O "last in- first out"lo cual significa ultimo en entrar primero en salir, en esta estructura solo se puede ingresar por un solo extremo de la misma, por lo que sus operaciones se llevan a cabo por ese lado. Entre sus operaciones encontramos apilar (agregar) y desempilar (quitar).

Colas
Estas estructuras son de tipo F.I.F.O "first in- first out" lo cual traduce primero en entrar primero en salir, estas simulan colas en la vida real como la de un banco, son herramientas de programacion como las pilas, pero una de sus diferencias es que sus operaciones no se llevan a cabo solo por un extremos de la cola. entre sus operaciones encontramos encolar el cual agrega un nuevo dato al final de cola, y Atender el cual elimina un dato del principio de la cola.

Las pilas y colas son eficientes ya que el tiempo de ejecucion no depende de su tamaño y sus metodos se realizan en tiempo constante, sin necesidad de comparaciones.

Bibliografia

lunes, 31 de mayo de 2010

Listas

Estas clases fue una de las mas dificiles ya que nos toco reforzar la definicion individualmente, pues no tuvimos los aciertos que se esperaban pero de igual forma fue interesante.

Al momento de definir una lista encontramos que es que es una estructura de datos que sirve para complementar otras estructuras. Consiste en una secuencia de nodos en los que guardamos datos (item, nombres..etc) y referencias dependiendo de la lista que utilicemos. Existen varios tipo de listas entre los que encontramos:

Listas enlazadas Simples: Es la lista enlazada basica esta tiene una referencia hacia el nodo siguiente (si existe), pero si se encuentra en el ultimo nodo esa referencia es nula.




Listas enlazadas Dobles: Esta es un poco mas compleja ya que tiene una referencia al siguiente y una referencia al anterior, si es el primer nodo la referencia anterior es nula y si nos encontramos en el ultimo nodo la referencia siguiente es nula.



Listas circulares Simples: Esta es muy parecida a una lista enlazada simple, su diferencia radica en que su referencia al siguiente en el ultimo nodo no es nula, sino que indica hacia el primer nodo utilizado, para recorrer una lista circular simple podemos empezar por cualquier nodo y continuar hasta llegar al nodo original, por eso se le llama las listas sin comienzo ni fin.


Listas circulares Dobles: Sus referencias son como las de una lista doblemente enlazadas, excepto que el ultimo nodo apunta al primero y el prime r nodo apunta al ultimo formando el ciclo, esta tampoco tiene comienzo ni fin.

Estas listas son utilizadas para la realizacion de otras estructuras de datos co m o pilas y colas, y con ellas podemos realizar muchas operaciones como:
  • Recorrido: Consiste en visitar cada uno de los nodos de la lista, comenzando por el primero se toma el valor del item y su referencia para pasar al siguiente y asi sucesivamente hatsa que ese valor sea nulo o vuelva a la cabeza, eso significara que acabo un ciclo.
  • Inserción: Consiste en agregar un nodo nuevo a la lista, se puede hacer de tres formas: insertando al inicio, insertando al final e insertando en una posición especifica.
  • Borrado: Consiste en quitar un nodo de la lista, tiene cuatro casos: eliminar primer nodo, elminar ultimo nodo, eliminar nodo con cierta información y eliminar un nodo en cualquier posición.
  • Busqueda: Utilizamos el metodo recorrido, pero buscando un nodo en especial o el item que se encuentra en el.
Bibliografia

Backtracking

Esta clase fue un poco divertida ya que nos abrio camino hacia aquellos problemas o juegos que tanto nos gustan en la vida y para los cuales muchas veces no tenemos solucion clara, ejemplos claros son los problemas del sudoku o las ocho reinas en un tablero.

Bueno enfocándonos un poco mas en el tema encontramos que es una estrategia para hallar soluciones a problemas que presentan ciertas restricciones construyendo posibles soluciones candidatas de manera sistemática para al final dar una solución general, a esta estrategia también se le suele llamar “vuelta atrás” porque al no encontrar una solución satisfactoria deshará esa acción y volverá a que se realizo anteriormente.

El problema de las ocho reinas.

En este problema consiste en colocar 8 reinas en un tablero de ajedrez de tal manera que ninguna quede atacando a otra.

En este cas
o colamos la primera ficha y avanzamos horizontalmente uno por uno hasta encontrar un lugar donde colocar la nueva reina sin que se mate con la anterior, si terminamos una fila pasamos a la siguiente.

Si al final no encontramos lugar para colocar otra de las fichas lo que hacemos es devolvernos y mover esa ficha un puesto adelante y asi sucesivamente hasta encontrar una solucion al problema.

domingo, 30 de mayo de 2010

Collection

Traducido al español como colección y es la representación de un conjunto de objetos todos del mismo tipo, conocido comos sus elementos, algunos estan ordenadas y otras no, al igual ahi colecciones que permiten elementos duplicados y otras no.
Cada elemento cuenta con un subindice unico que determina la posicion del mismo en la colección, las colecciones pueden tener solo una dimensión, las colecciones tambien se pueden pasar como parametros



Encoding

Su significado en español es codificar, es el proceso por el cual la información de una fuente es convertida en simbolos para ser comunicada, el proceso contrario es decoding.
Lo que hace es transformar un conjunto de caracteres Unicode en una secuencia de bytes.


Bibliografia

domingo, 18 de abril de 2010

Algoritmo de ordenamientos recursivos

Bueno este fue un tema que quise dejar despues de la explicación de ordenamientos y de recursividad por que es una mezcla de los dos, es un algoritmo de ordenamiento recursivo.

Este tema se ve muy interesante, espero que en la practica sea de mucho agrado para todos ya que puede llegar a ser una gran fuente de ayuda.

El dia de hoy trataremos 2 de estos algoritmos:
  • Quicsort
  • Mergesort
Quicsort

Este algoritmo actualemente es el mas eficiente y veloz, su funcionamiento es de la siguiente manera:
  • tomamos un valor 'a' del arreglo.
  • buscamos la posición correcta del dato de tal forma que todos los que se encuentran a su izquierda seas menores o iguales que el y los de la derecha sean mayores o iguales a el.
  • nos damos cuenta que el valor 'a' ya se encuentra en la posición correcta, el problema si divide en dos (se basa en la tecnica de divide y venceras, muy utilizado en programación orientado a objetos), al final reunimos los resultados en un vector.
  • y repetimos el procedimiento inicial (usamos recursividad)
  • el proceso finaliza cuando cada dato encuentra su posición correcta.



Este metodo recibe un vector de enteros, el dato en la posición inicial y el ultimo dato valido del array(n-1). la elelección del pivote se puede decir que la promedio ya se suba el dato inicial mas dato final entre dos, es una manera de asegurarse que sea el valor medio.
Hasta que i sea menor que el ultimo valor que es j, se realizaran los while que hacen referencia a:
  • Mientras que el valor que se encuentre en la posición sea menor al que escogimos de pivote, se sumara a la posición mientras encontremos un valor igual o mayor al que se encuentre en el pivote.
  • En este caso es muy parecido solo con la diferencia que el valor que se encuentre en la posición es mayor mientras encontremos un valor que sea igual o menos al del pivote.
Dentro del if se hace el intercambio de valores dependiendo la situación, por ultimo en los dos if finales el metodo se vuelve recursivo pero en un lado actualiza el valor maximo, mientras que en el otro if se actualiza el valor inicial.

Mergesort

Es un algoritmo de ordenación tambien denominado ordenamiento por mezcla, se basa en la tecnica de divide y venceras; funciona de la siguiente manera:

  • Si el largo de un array es de 0 ó 1, entonces ya está ordenado.
  • Dividir el array desordenado en dos subarrays de aproximadamente la mitad del tamaño.
  • Ordenamos cada subarray recursivamente aplicando el ordenamiento por mezcla.
  • Mezclamos los dos subarrays en una solo array ordenado.

El algoritmo mergesort incorpora una idea principal para mejorar su tiempo de ejecución:

Siempre es mejor pequeños problemas que uno grande, es bueno aplicar la tecnica de divide y venceras. ya que es mas facil enlazar dos arrays previamente ordenados que desordenados.




Bibliografia

Recursividad

Hasta ahora todas las clases que hemos tenido son geniales, aprendimos cosas interesantes en cada una y el ingeniero le pone mucho entusiasmo al enseñarnos, la verdad es que hemos asimilado mucho en esa clase. Pero definitivamente de todas esta fue la que mas me gusto.

Es una función que se llama a si misma, pero esta función no es necesaria utilizarla en todos los algoritmos, puede simplemente hacer que el consumo de recursos sea mayor que el algoritmo normal, puede llegar a ser eficiente o no. Ademas puede llegar a crear una función que no llegue a retornar un valor definitivo, este tipo de recursividad hace que se cree un bucle infinito.

A continuación un ejemplo de recursividad fue el primer ejercicio sobre el tema:

Recibimos un número entero, como sabemos tanto el factorial de 0 y 1 es igual a 1, por eso la condición. El factorial de un número es igual al factorial de el número anterior a el por el número base.

n!= (n-1)!*n

Ejemplo: 6!= 5!*6


Explicación grafica del algoritmo recursivo de un factorial















Bibliografia