Buscar este blog

martes, 18 de enero de 2011

5.Vectores y Matrices

5.1 Introducción


El componente básico de una estructura de datos es la celda. Se puede representar una celda como una caja capaz de almacenar un valor tomado de algún tipo de datos básicos o compuestos. Las estructuras de datos se crean dando nombres a agregados de celdas e interpretando los valores de algunas celdas como representantes de conexiones entre celdas.

 5.2 Vectores

En programación, un arreglo (una matriz o vector) (llamados en inglés arrays) es una zona de almacenamiento contiguo, que contiene una serie de elementos del mismo tipo, los elementos de la matriz. Desde el punto de vista lógico una matriz se puede ver como un conjunto de elementos ordenados en fila (o filas y columnas si tuviera dos dimensiones). En principio, se puede considerar que todas las matrices son de una dimensión, la dimensión principal, pero los elementos de dicha fila pueden ser a su vez matrices (un proceso que puede ser recursivo), lo que nos permite hablar de la existencia de matrices multidimensionales, aunque las más fáciles de imaginar son los de una, dos y tres dimensiones.
5.3 Producto escalar de vectores


Producto de dos Vectores (matrices).

La regla para multiplicar dos matrices es bastante más complicada que para sumar dos matrices de las mismas dimensiones. En general, se pueden multiplicar dos matrices de dimensiones m x n y n x q, dando como resultado una matriz de dimensiones m x q. En este apartado nos circunscribiremos exclusivamente a matrices cuadradas de dimensión n.
 


Los elementos cij se obtienen multiplicando los elementos aik de la fila i por los elementos akj de la columna j, y sumando los resultados.

 
La codificación se realiza empleando un tripe bucle for, guardando en los elementos de la la matriz local resultado la suma de los productos de la fórmula anterior.


5.4 Copia de vectores

Copia de una matriz dada

Cuando calculamos la matriz inversa de una dada, pasamos una matriz en el único parámetro de la función estática denominada inversa. En el cuerpo de dicha función se realizan operaciones con los elementos de dicha matriz. Dado que en Java se pasan por valor las referencias a objetos, la matriz original resulta modificada en el curso de la llamada a la función inversa.
Si queremos mantener la matriz original, hacemos una copia de dicha matriz en el cuerpo de la función y realizamos las operaciones con la matriz copia dejando la original sin modificar.
Para realizar una copia hemos de implementar el interface Cloneable, y redefinir la función miembro clone de la clase base Object, de la cual derivan todas las clases en Java. El primer paso es la llamada a la función clone de la clase base Object.



5.5 Vectores paralelos


El vector es el mecanismo básico para almacenar una colección de entidades del mismo tipo. Un vector es un array unidimensional de números. Se define la clase Vector con dos miembros dato, el número de datos que guarda y el array unidimensional que guarda dichos datos.
Este concepto se da cuando hay una relación entre las componentes de igual subíndice (misma posición) de un vector y otro.

Si tenemos dos vectores de 5 elementos cada uno. En uno se almacenan los nombres de personas en el otro las edades de dichas personas.
Decimos que el vector nombres es paralelo al vector edades si en la componente 0 de cada vector se almacena información relacionada a una persona (Juan – 12 años) Es decir hay una relación entre cada componente de los dos vectores.

5.6 Matrices


Es un array bidimensional de números. En general, decimos que una matriz tiene una dimensión m x n, cuando los números están dispuestos en m filas y n columnas.
Se denominan matrices cuadradas a aquellas que tienen el mismo número de filas que de columnas.

5.7 Productos de matrices


La regla para multiplicar dos matrices es bastante más complicada que para sumar dos matrices de las mismas dimensiones. En general, se pueden multiplicar dos matrices de dimensiones m x n y n x q, dando como resultado una matriz de dimensiones m x q.



5.8 Ejemplos





 

4. Árboles


4.1 Introducción

En este capítulo se definirán estructuras lineales como arreglos, listas enlazadas, pilas y colas. Además de las estructuras no lineales como árboles y grafos.

4.2 Árboles generales

4.2.1 Definiciones
Un árbol es una estructura de datos no lineal y homogénea en el que cada elemento puede tener varios elementos posteriores denominados nodos, pero tan sólo puede tener un elemento anterior.


Árbol


4.2.2 Orden de los nodos
4.3 Árboles binarios
Un Árbol Binario es aquel donde cada nodo tiene como máximo dos nodos. Como se muestra en la figura.


Árbol binario


4.4 Recorridos de árboles: orden previo (postorder), orden simétrico (inorder) y orden posterior (postorder)

Recorrer un árbol binario consiste en acceder una sola vez a todos sus nodos. Esta operación es básica en el tratamiento de árboles ya que nos permite por ejemplo imprimir o eliminar toda la información almacenada en el árbol.

  • Recorrido preorden
- Procesar el nodo raíz R
- Recorrer el Subárbol izquierdo de R en Preorden.
- Recorrer el Subárbol derecho de R en Preorden.
  • Recorrido inorden
- Recorrer el Subárbol izquierdo de R en Inorden.
- Procesar el nodo raíz R
- Recorrer el Subárbol derecho de R en Inorden.



  • Recorrido postorden
- Recorrer el Subárbol izquierdo de R en Postorden.
- Recorrer el Subárbol derecho de R en Postorden.
- Procesar el nodo raíz R.


4.5 Recorrido por niveles

Recorridos en amplitud (o por niveles)

En este caso el recorrido se realiza en orden por los distintos niveles del árbol. Así, se comenzaría tratando el nivel 1, que sólo contiene el nodo raíz, seguidamente el nivel 2, el 3 y así sucesivamente. En el árbol de la figura el recorrido en amplitud sería: 2, 7, 5, 2, 6, 9, 5, 11 y 4.

Al contrario que en los métodos de recorrido en profundidad, el recorrido por niveles no es de naturaleza recursiva. Por ello, se debe utilizar una cola para recordar los subárboles izquierdos y derecho de cada nodo.
El esquema algoritmo para implementar un recorrido por niveles es exactamente el mismo que el utilizado en la versión iterativa del recorrido en preorden pero cambiando la estructura de datos que almacena los nodos por una cola.

Representacion en ‘c’


4.6 Longitud de camino; Algoritmo de Huffman



Árbol de Huffman generado para las frecuencias de apariciones exactas del texto "Esto es un ejemplo de árbol de Huffman". Las frecuencias y códigos de cada carácter se muestran abajo. Codificar esta frase usando este código requiere 156 bits, sin contar con el espacio para el árbol.


4. 7 Ejemplos

Aquí les dejo un video, esta super recreativo por si no le entienden.