Clase de Estructura de Datos y Algoritmos -INF156-01- con el Prof. Jose Guillen, Director de la Carrera de Ingeniería en Sistemas. Los Jueves de 4 a 6 p.m. y Viernes de 6 a 8 p.m.
domingo, 11 de diciembre de 2011
Asignacion Implicita
jueves, 8 de diciembre de 2011
Árbol Heap
basicamente, un heap es un arbol binario casi completo. Se le considera casi completo ya que se lleno en todos sus niveles,exepto, problamente, el ultimo que se va completando izquierda a derecha. la diferencia entre el arbol binario y heap es que en el segundo cada nodo tiene un valor menor o igual(o bien mayor o igual) que el valot asociado cada io de us hijos, lo que se conoce como condicio del heap.
¿Como diseñar el TDA que corresponde al arbol heap?
en el diseño del TDA para un heap se debe considerar que los elemntos que se almacenaron deben poseer la propiedad de ordenamiento, es decir, tener una relacion de mayor que y menor que.
Elemento: los elementos de un arbol heap son nodos. cada uno contiene un datos(simple o estructura tipoinfo) unico en el arbol.
Estructura: un arbol heap posee una estructura jerarquica(a expecion del arbol vacio). cada nodo contine un elemento de un conjunto ordenado valores; los nodos forman un arbol binario completo, de tal formaque cada padre contiene un elemento de mayor prioridad que sus dos hijos(la prioridad se establece con relacion a los valores almacenado, es decir, a menor valor, mayor prioridad, o a mayor, menor prioridad). La relacion de la prioridad se puede establecer como mayor o mayor-igual.
En un montículo de prioridad, el mayor elemento (o el menor, dependiendo de la relación de orden escogida) está siempre en el nodo raíz. Por esta razón, los montículos son útiles para implementar colas de prioridad. Una ventaja que poseen los montículos es que, por ser árboles completos, se pueden implementar usando arreglos, lo cual simplifica su codificación y libera al programador del uso de punteros.
¿Como genera un arbol heap a partir de un arreglo de elemento?
¿Como se utilza una estructura Heap en una cola priorizada?
Si se considera que cada uno de los elementos en un heao tiene asociada una prioridad que depende de su valor(a menor valor, mayor prioridad), entoeces el elemento de mayor prioridad siempre estará en la raíz del árbol y los elementos que le siguen en estas caracteristicas estarán cerca de el.
Cuando se desee insertar un nuevo elemento en la cola priorizada, lo mas sencillo sera agregarlo como la ultima hoja del árbol, es decir, en la primera posición es libre del ultimo nivel.
miércoles, 7 de diciembre de 2011
Apuntadores y Memoria Dinámica
Un apuntadora se define como un tipo de dato capaz de almacenar una dirección de memoria. se considera como referencia indirecta a un elemento.
Los apuntadores pueden ser un tipo de dato especial dentro del lenguaje de programación en cuyo caso, guardaran direcciones de memoria real; o bine, el programador puede simular el funcionamiento de un apuntador, por ejemplo, cuando una variable de tipo entero guarda la posición (subindice) de un dato en un arreglo.
Que es la memoria Dinámica?
Muchos lenguajes de programación permiten manejar dos tipos de almacenamiento de datos en la memoria principal: el almacenamiento estático (automático) y el almacenamiento dinámico.
La memoria estática es la que se maneja tradicionalmente. Sus principales características son:
- Se define explicitamente al declrar una variable, ya sea global o local.
- El compilador genera automáticamente el espacio de memoeria.
- Se mantiene fija durante toda la vida de la variable (independientemente de que se utilice o no).
La memoria dinámica permite crear y destruir espacios de memoria, según indicaciones explicitas del programador durante la ejecución del programa. Sus principales características son:
- Utiliza una parte de la memoria principal denominada heap.
- Apoya el uso eficiente de la memoria durante la ejecución.
- Requiere apuntadores que almacenan direcciones de memoria real, dado que estas se asignan dinamicamente.
Representación de un estructura de Datos
Basiamente, puede entenderse como el punto de conexion entre la especificacion logica de un TDA (Tipo de Dato Abstracto) y su implementacion en un lenguaje de programacion particular. Dentro del proceso de abstraccion de datos, la representacion de un estructura corresponde al inciio del segundo nivel de abstraccion, es decir, el nivel fisico. Esta etapa construye un esquema de como se almacenaran los elementos de la estructura de datos en la memoria, de tal forma que se logre su optimo aprovechamiento.
Que tipos de representaciones existen para una estructura de datos?
Independientemente de las facilidades de implementacion que ofrezcan los lenguajes de programación, una estructura de datos (TDA) puede representarse de dos formas.
por posiciones (almacenamiento contiguo).
por ligas (almacenamiento disperso)
Como funciona la representación de una estructura de datos por posiciones?
En este tipo de representación, el lugar físico donde se almacena un elemento, determina automáticamente su posición relativa en la estructura de datos. Básicamente, se puede pensar en ella como un espacio de almacenamiento contiguo donde cada lugar sirve para almacenar un elemento, de tal forma que si un elemento esta almacenado en el lugar K, tendra la k-esima posición dentro de la estructura y, obviamente, el elemento K + 1 estará ubicado exactamente después del K y se almacenara en el lugar K + 1 del espacio de almacenamiento. esta representación en el próximo gráfico.
Como funciona la representación de una estructura de datos por ligas?
En este tipo de representación la ubicación fisica de un elemento no determina la posición relativa que tiene dentro de la estructura de datos. El almacenamiento en este tipo de representación se realiza en forma dispersa, es decir, dos elementos contiguos en la estructura de datos no necesariamente deben estar almacenados físicamente en posiciones contiguas dentro del espacio de almacenamiento, como se muestra en la siguiente figura.
el conjunto es una estructura fundamental en las matemáticas que se emplea para agrupar conjuntos. Los objetos de un conjunto se denominan elemento o miembro del conjunto. Estos elementos se toman de un conjunto universal U, que contiene todos los posibles elementos del conjunto. El numero de elementos contenidos en un conjunto S se conoce como el cardinal de S, denotado por |1|. Por ejemplo, el conjunto de números primos positivos menores que 20 puede expresarse como
S={2, 3, 5, 7, 11, 13, 17 ,19}
Otra forma de representar un conjunto es utilizar notación de constructor de conjunto, tiene la forma
S={x|x es un numero primo positivo<20}
Usamos esta notación, un elemento se dice que es miembro del conjunto S si tiene una de las propiedades asociadas con x. De este modo, otra forma de representar el conjunto de números primos positivos menores que es 20.
La pertenencia a conjunto se denota por a ∈ A que establece que a es miembro del conjunto A. El cojunto espcial que no tiene elemento se le denomina conjunto vacio y se denota ∅. se dice que es un subconjunto de B, escrito como A ⊆ B, que nos dice que cada elemento de A es elemento de B. si Ay B son conjuntos, entonces la union de ellos, se denota A∪B, es aquellos elementos que esta A o en B, o en ambos. L interseccion de A y B, se denota por A∩B, es el conjunto que contiene aquellos elementos que estan en A y en B. la diferencia A y B, denota por A~B, es el conjunto que contiene aquellos que estan en A pero no en B,
si nos referimos a a una coleccion de n elementos de esta forma como una n-tuppla ordenada.Contretamente, uno n-tupla ordenadas. las 2-tuplas se conoce como pares ordenados.
El producto cartesiano de dos conjuntos A y B, denotado por A*B, es el conjunto de todos los pares ordenado (a,b) tales a∈A y b ∈B
Numeración
Las siguientes reglas básicas de numeración subyacen toda la combinatoria:
REGLA DE LA SUMA. el numero de formas de escoger único elemento de dos conjunto disjuntos viene dado por la suma por la suma de los cardinales de los conjuntos.
REGLA DEL PRODUCTO. el numero de forma de escoger un elemento de un conjunto y segundo elemento de otros conjuntos viene dado por el producto de los cardinales de los conjuntos
GRAFOS
martes, 6 de diciembre de 2011
Arboles de Busqueda
¿Qué es un árbol balanceado?
Busqueda de Informacion
viernes, 2 de diciembre de 2011
Programación Orientada a Objetos
miércoles, 30 de noviembre de 2011
ESTRUCTURA DE DATOS LINEALES PARA BUSQUEDA DE INFORMACION
- Los algoritmos de búsqueda lineal y binaria son 2 de los algoritmos más usados para encontrar elementos en una estructura de datos.La búsqueda lineal probablemente es sencilla de implementar e intuitiva. Básicamente consiste en buscar de manera secuencial un elemento, es decir, preguntar si el elemento buscado es igual al primero, segundo, tercero y así sucesivamente hasta encontrar el deseado. Entonces este algoritmo tiene una complejidad de O(n).
- Si la tabla de números está ordenada, por ejemplo, en orden creciente, es posible utilizar para la búsqueda un algoritmo más eficiente que se basa en un concepto muy utilizado en la programación: dividir para vencer.Si está ordenada la tabla y miramos el número situado en la mitad para ver si es mayor o menor que el número buscado (o con suerte igual), sabremos si la búsqueda ha de proceder en la subtabla con la mitad de tamaño que está antes o después de la mitad. Si se repite recursivamente el algoritmo al final o bien encontraremos el número sobre una tabla de un sólo elemento o estaremos seguros de que no se encuentra allí.
STRINGS
Las palabras string hace referencia a una cadena de caracteres. Su estudio cobra importancia cuando se toma en consideración que la mayor parte de la información que se maneja actualmente en casi cualquier área del conocimiento, puede verse como una secuencia de caracteres. El nombre de una persona, el contenido de un libro, la información presentada en un texto puede ser vistas como una cadena de caracteres o string. Esto nos lleva a pensar que un string debe definirse como una estructura de datos y por ello es conveniente que se diseñe inicialmente un TDA.
¿ De que firma concptualizar un string como un TDA?
Se puede diseñar muchas TDA que definan un string considerando que operaciones se tomaran como basicas para el funcionamiento de dicha estructura y cual sera el conjunto de caracteres que se acepptaran como parte de el.
Una posible definición para el TDA de un sting seria la siguiente:
- ESTRUCTURA; dado como un string se considera una cadena se puede pensar que se establece una ralacion lineal entre elementos, suponiendo que los string pueden almacenar entre 0 y 80 elementos, entonces su dominio sera el conjunto de todas las cadenas que se puede forma con combinaciones de los elementos y que cumplen con la regla de longitud.
viernes, 28 de octubre de 2011
¿Como viajan los datos por el Bus?

El bus, por lo general supervisado por el microprocesador, se especializa en el transporte de diferentes tipos de información.
En el bus se encuentran dos pistas separadas, el bus de datos y el bus de direcciones. La CPU escribe la dirección de la posición deseada de la memoria en el bus de direcciones accediendo a la memoria, teniendo cada una de las líneas carácter binario.
Es decir solo pueden representar 0 o 1 y de esta manera forman conjuntamente el número de la posición dentro de la memoria (es decir: la dirección).
Cuanto más líneas haya disponibles, mayor es la dirección máxima y mayor es la memoria a la cual puede dirigirse de esta forma. En el bus de direcciones original habían ya 20 direcciones, ya que con 20 bits se puede dirigir a una memoria de 1 MB y esto era exactamente lo que correspondía a la CPU.
Esto que en le teoría parece tan fácil es bastante mas complicado en la práctica, ya que aparte de los bus de datos y de direcciones existen también casi dos docenas más de líneas de señal en la comunicación entre la CPU y la memoria, a las cuales también se acude.
Todas las tarjetas del bus escuchan, y se tendrá que encontrar en primer lugar una tarjeta que mediante el envío de una señal adecuada indique a la CPU que es responsable de la dirección que se ha introducido. Las demás tarjetas se despreocupan del resto de la comunicación y quedan a la espera del próximo ciclo de transporte de datos que quizás les incumba a ellas.
PROCESADOR | Bus de direcciones | Bus de datos |
8086 | 20 | 16 |
8088 | 20 | 8 |
80186 | 20 | 16 |
80188 | 20 | 8 |
80286 | 24 | 16 |
80386 SX | 32 | 16 |
80386 DX | 32 | 32 |
80486 DX | 32 | 32 |
80486 SX | 32 | 32 |
PENTIUM | 32 | 64 |
PENTIUM PRO | 32 | 64 |
Este mismo concepto es también la razón por la cual al utilizar tarjetas de ampliación en un PC surgen problemas una y otra vez, si hay dos tarjetas que reclaman para ellas el mismo campo de dirección o campos de dirección que se solapan entre ellos.
Los datos en si no se mandan al bus de direcciones sino al bus de datos. El bus XT tenía solo 8 bits con lo cual sólo podía transportar 1 byte a la vez. Si la CPU quería depositar el contenido de un registro de 16 bits o por valor de 16 bits, tenía que desdoblarlos en dos bytes y efectuar la transferencia de datos uno detrás de otro.
De todas maneras para los fabricantes de tarjetas de ampliación, cuyos productos deben atenderse a este protocolo, es de una importancia básica la regulación del tiempo de las señales del bus, para poder trabajar de forma inmejorable con el PC.

Pero precisamente este protocolo no ha sido nunca publicado por lBM con lo que se obliga a los fabricantes a medir las señales con la ayuda de tarjetas ya existentes e imitarlas. Por lo tanto no es de extrañar que se pusieran en juego tolerancias que dejaron algunas tarjetas totalmente eliminada.




