Sunteți pe pagina 1din 55

Fundamentos de vectores y

matrices

Vectores
Qu es un vector?

Un vector de datos es un conjunto de


variables adyacentes de un tipo
determinado.
Los vectores facilitan la administracin de
conjuntos de datos relacionados, ya que no
se tienen que manipular individualmente.
Cul es la estructura bsica de un
vector?

nombre valor valor valor valor ... valor valor

vector
0 1 2 3 n -2 n -1

nombre[3]
ndices celda especfica ndices
Un vector se compone de variables o celdas consecutivas que
pueden almacenar valores de un tipo especfico. Cada celda
puede almacenar un valor y a cada una se le asocia un entero
conocido como ndice que es la posicin que ocupa dentro
del vector. Todos los valores almacenados en el vector son del
mismo tipo.
Cmo se declaran e inicializan los
vectores?

Al igual que una variable simple un vector


debe declararse primero y luego inicializarse.
Posteriormente se pueden guardar y
recuperar valores en celdas independientes
accediendo a ellas mediante el ndice
correspondiente.
Tambin se puede recorrer el vector
incrementando o decrementando el valor de
una variable entera utilizada como ndice.
Cmo se codifica un vector en Java?

La declaracin de un vector se puede hacer de la siguiente


manera:
tipo v []; // se declara v que es una referencia a un vector
v = new tipo [cantidadDeCeldas]; // se inicializa el vector

Tambin se puede realizar con una sola instruccin:


tipo v [] = new tipo [cantidadDeCeldas];

El tamao de un vector puede ser un valor literal o una


variable entera:
int c[] = new int [variable];
int c[] = new int [5];
Cmo se inicializan los vectores en
Java?

Un vector puede ser declarado e inicializado


en la misma instruccin:
int c[] = {20, 45, 32, 5, 1};

Luego de inicializar el vector, su tamao


queda almacenado dentro del vector en una
variable pblica llamada length. Ejemplo:
Si c = new int [5]; entonces c.length vale 5.
Cmo se pueden guardar y recuperar
valores en celdas de un vector?

Para asignar un valor x a la posicin i del


vector indicando el ndice de la celda
deseada. Ejemplo:
v[i] = x;

Para asignar a x el valor almacenado en la


posicin i del vector se hace lo mismo.
Ejemplo:
x = v[i]; //Denominado como campo v sub i.
// i se conoce como ndice.
Cmo se puede recorrer un vector?

Un vector puede ser fcilmente recorrido por


medio de un ciclo for.
Se entiende por recorrido a una secuencia
de accesos consecutivos a las celdas del
vector.
El recorrido se logra variando el valor del
ndice de acceso a las celdas del vector.
Qu sucede en la memoria al utilizar
un vector de enteros en Java?

vector ? ? ? ?
8 ?
0 1 2 3 4
referencia al vector
Se modifica a la
vector[ i ] celda vector[ 3 ]

i 3
ndice

int vector []; // El vector es una referencia a un vector


vector = new int[5]; // Se crea el vector de 5 celdas (0-4)
int i = 3; // i se usar para indicar el ndice
vector[i] = 8; // Se asigna a la celda 3 el valor 8
Ejemplo de recorrido sobre un vector
de enteros en Java

2 4 3 1 5
vector
0 1 2 3 4

vector[ i ]

suma 15
10
0
9
6
2 i 0
4
3
2
1
5

acumulador ndice
Qu sucede si se trata de acceder al
valor de una posicin inexistente?

2 4 3 1 5 Error!
vector
0 1 2 3 4

vector[ i ]

i 5
ndice
Qu sucede si se trata de acceder al valor de
una posicin inexistente? (continuacin)

Si se trata de acceder a una posicin no


existente se producir una excepcin con el
mensaje: ArrayIndexOutOfBoundsException
Significa que se est tratando de acceder a
algo que est fuera de los lmites
establecidos para el vector.
Para que un programa no se caiga debido a
esto es conveniente utilizar manejo de
excepciones (try { } catch(){ }).
Cmo pasar un vector como parmetro en
un mtodo utilizando Java ?

El nombre de un vector es una referencia que contiene la


direccin inicial donde se ubican los datos asociados al mismo.
Los cambios efectuados a un vector dentro de un mtodo que
lo recibe como parmetro se mantienen an despus de
finalizado el mtodo.
Al pasar un vector como parmetro a un mtodo solo se copia
la direccin del vector hacia la referencia que existen dentro
del mtodo (no se genera una copia de los datos almacenados
en las celdas del vector). A partir de este punto tanto la
referencia utilizada para ejecutar el llamado (externa al
mtodo) y el parmetro que recibe la referencia, apuntan al
inicio del mismo grupo de datos en memoria.
Visualizacin del pase de un vector
como parmetro utilizando Java

Note que al invocar un mtodo se pasa el


valor de datos (que est en el montculo o
Heap) hacia vector (que est en la PILA) y
no se copian los valores del vector hacia la
pila.

sumarUnoATodos(datos)
datos
vector

Pila

4 5 7 12 15 22 24 30 51 95
0 1 2 3 4 5 6 7 8 9
Visualizacin del pase de un vector como
parmetro utilizando Java (continuacin)

Despus de la invocacin al mtodo, la


referencia vector es eliminada de la pila al
terminar el mtodo, pero el vector datos
qued modificado.

sumarUnoATodos(datos)
datos
vector

Pila

5 6 8 13 14 21 25 31 52 96
0 1 2 3 4 5 6 7 8 9
Cmo crear un vector de objetos en
Java?

Cada celda de un vector es equivalente a


una variable por lo que se puede declarar un
vector de referencias a objetos.
En Java las referencias a objetos van a ser
automticamente inicializadas a null al crear
el vector.
Posteriormente hay que crear cada objeto
independientemente y asignarlo a la celda
deseada.
Visualizacin de un vector de objetos
en Java

x 0
y 0
puntos

x 1
0 y 1
1
x 2
2
y 2
3 null
Para qu sirven los vectores en el
ciclo de resolucin de problemas?

Los vectores son de las estructuras ms


importantes en la mayora de los lenguajes.
Normalmente sirven para almacenar,
procesar, buscar y recuperar valores
especficos dentro de un grupo de datos.
Cules son los principales usos que
se le dan a los vectores?

Entre los usos comunes que se les pueden dar son:


Calcular valores nuevos a partir de secuencias de
valores ledos sin perder el detalle de los mismos.
Para ordenar una serie de valores entre s.
Para buscar si un valor especfico pertenece a un
grupo de valores previamente almacenados.
Para indexar informacin.
Para asociar valores entre s.
Para clasificar informacin.
Cules son los clculos ms
comunes usando vectores?

Calcular la suma de los valores


almacenados.
Calcular el promedio.
Encontrar el mayor valor dentro del vector.
Encontrar el menor valor dentro del vector.
Cmo calcular la suma?

El ejemplo del recorrido visto previamente


muestra como, mediante el uso de una
variable acumuladora, se puede ir sumando
cada elemento del vector para finalmente
acceder al valor acumulado.
Este tipo de procedimiento es tpico y puede
utilizarse para diferentes clculos incluyendo
el del promedio de un grupo de valores.
Cmo se calcula el promedio de los
valores de un vector?

Para calcular un promedio simplemente bastara con acumular


la suma y dividir entre el total de elementos que fueron
sumados.
Si el promedio incluye a todos los elementos del vector basta
con dividir entre el tamao del mismo.
En caso contrario hace falta disponer de un contador para
incrementarlo en uno cada vez que se suma un valor a la suma
total y al final dividir entre dicho valor.
En caso tpico es promediar solamente los valores mayores
que cero dentro de un vector o que cumplen con algn criterio
de seleccin especfico.
Cmo se pueden encontrar el
mximo y el mnimo en un vector?

Otro ejemplo tpico de recorrido en vectores incluye el


encontrar la posicin del elemento mayor o menor.
Normalmente se puede asumir que el valor ms alto o ms
bajo se encuentra en la primera posicin del vector, a partir de
ah se puede llevar a cabo un recorrido buscando otro
elemento que sea ms pequeo que el menor o ms grande
que el mayor.
Un error comn es definir una variable para guardar el valor del
menor o el mayor inicializando en 0 la misma. Por ejemplo: Si
todos los nmeros son negativos { -12, -6, -10} va a salir que el
mayor es 0 aunque el mayor es -6. Aunque son clculos
simples siempre hay que tener cuidado con esto.
Cules son los algoritmos ms comunes
para ordenar los elementos de un vector?

Los algoritmos de ordenamiento son de los ms


estudiados en el campo de la computacin.
Los algoritmos ms comunes y simples de
ordenamiento son: burbuja y seleccin.
Existen otros ms eficientes y complejos tales como
el ordenamiento rpido o quicksort cuyo estudio se
lleva a cabo en cursos de Estructuras de Datos y
Anlisis de Algoritmos.
En qu consiste el algoritmo de
Burbuja?

El algoritmo de burbuja se basa en llevar a cabo recorridos por


el vector comparando el elemento de cada celda con el de la
siguiente celda.
En cada momento se intercambian los elementos o se dejan tal
y como estn para asegurar que el valor ms alto encontrado
suba o se desplace hacia la derecha.
El efecto de esto es lograr que el valor ms alto o bajo
(dependiendo de la forma en que se programe) suba hasta la
ltima posicin del vector a modo de burbuja.
Si este proceso se repite tantas veces como elementos tiene el
vector, todos los elementos subieron hasta la posicin ms alta
que podan encontrar, asegurando que que el vector ha
quedado ordenado.
Visualizacin de la ejecucin del
algoritmo de Burbuja

5 >>4,
3
10 2,4,as
asque
que
debe haber 3 2 5 10 4
intercambio
0 1 2 3 4

El 2
mayor
mayor
est
est
vector
ubicado donde
corresponde i i+1 fin

Fin del algoritmo. fin = vector.length()


El vector est 3
1
2
0 132
0
(recorrido + 1)
ordenado.
recorrido i
Cuales son los algoritmos de
bsqueda ms comunes en vectores?

Dependiendo del hecho de que un vector est ordenado o no,


as se puede utilizar alguno de los siguientes tipos de
bsqueda:
Bsqueda secuencial: consiste en llevar a cabo un recorrido a
lo largo de todos los elementos del vector. Esto hay que
hacerlo si los elementos del vector no estn ordenados.
Bsqueda binaria: consiste en descartar con cada comparacin
la mitad de los elementos restantes en el vector. Aplica solo si
el vector est ordenado y puede reducir el tiempo de bsqueda
llevando a cabo solo unas cuantas comparaciones.
Cmo se puede buscar dentro de un vector
ordenado con bsqueda binaria?

La bsqueda binaria consiste en ubicar la posicin


de un elemento ubicado dentro de un rango de
elementos.
El rango se define mediante la posicin del elemento
inicial y la posicin del elemento final.
La idea central detrs del algoritmo de bsqueda
binaria es que con una sola comparacin se logre
reducir a la mitad el rango de bsqueda dentro del
vector. Se elimina la mitad del rango donde se sabe
que el elemento no est.
Cmo se puede buscar dentro de un vector
ordenado con bsqueda binaria? (cont.)

Lo anterior se logra al comparar siempre el valor buscado con


el que se encuentra en la posicin ubicada en la mitad del
camino entre la primera y ltima posicin del rango de valores
dentro de los que se est buscando.
Si el valor es igual al encontrado se devuelve esa posicin.
Si es menor se busca en el nuevo rango definido desde el inicio
hasta la mitad 1. Si el valor es mayor se busca en el rango
comprendido entre la mitad + 1 y el final.
Si el inicio y el final llegan al mismo punto sin encontrar el
elemento se devuelve una posicin invlida indicando que el
elemento no se encuentra en el vector.
Note que el proceso es naturalmente recursivo.
Visualizacin de la bsqueda binaria en un
vector. Bsqueda del valor 51.

4 5 7 12 15 22 24 30 51 95
0 1 2 3 4 5 6 7 8 9

vector
inicio medio fin

medio = (9 + 7)
0) / 2
4)
6) 4
0
6
7 6
4
8
7 9
=8
4
6
7
inicio medio fin
51 =
15
24
30 < 51
Se mueve
Valor inicio
encontrado
Visualizacin de la bsqueda binaria en un
vector. Bsqueda del valor 48.

4 5 7 12 15 22 24 30 51 95
0 1 2 3 4 5 6 7 8 9

Se siguen los mismos


vector pasos que para el caso
anterior hasta este punto inicio medio fin

medio = (9 + 7) / 2 = 7 8 9
8
8
inicio medio fin
51 > 48
inicio = fin - 1
Se mueve
Valor fin
no encontrado
Cmo se pueden asociar, indexar y
clasificar datos con vectores?

Adems de permitir almacenar mltiples datos a la


vez, la capacidad de utilizar ndices para ubicar o
desreferenciar el valor de una celda especfica le
da una versatilidad importante y muy til a los
vectores.
Mtodos como utilizar un mismo ndice para acceder
a varios vectores a la vez, o utilizar el valor de un
vector como ndice en otro vector (uso de ndices de
forma anidada o indirecta) permiten codificar de
forma inmediata operaciones comunes en las
aplicaciones modernas.
Cmo se pueden asociar valores
entre s mediante el uso de vectores?

Existen varias formas de asociar vectores, la


ms comn es asumiendo que cada celda
en una posicin dada de un vector tiene
relacin con los valores de las celdas de
otros vectores que se ubican en una posicin
con el mismo valor .
Esto permite recorrer varios vectores en un
solo ciclo relacionando los valores de las
celdas con posiciones comunes entre s.
Visualizacin de la relacin entre celdas de
vectores diferentes usando ndices

0 Uno
0 Un
1 Dos
1 Deux
2 Tres
2
2 Trois
2
3 Cuatro 0 One
0 1 3 Quatre
1 Two
1 2 2 Three
2
2 3
2 3 Four
3 4
Cmo se puede indexar informacin
mediante el uso de vectores?

Cuando se tiene una estructura o vector con datos


pertenecientes a objetos compuestos cuya informacin no se
quiere duplicar, se pueden crear otros vectores que contengan
las posiciones o ndices del vector de datos.
Cada vector con ndices tendr el orden en que se desean
recorrer los datos del vector principal .
Si se quieren los datos en el orden especificado en un vector
de indexacin se recorre tomando los valores de cada celda y
se utiliza cada uno como el ndice para ubicar posiciones en el
vector que contiene los datos.
La siguiente figura muestra el uso de tres ndices de
ordenamiento diferentes para un mismo vector de objetos.
Visualizacin del uso de tres vectores
como ndices

alfabtico
2
0 Melvin 78Kg
personas$100
1 deudas
1 Lucia 56Kg $200
0
2 Juan 87Kg $150 3
3
3 Nuria 60Kg $224 1
kilos
2 2
0 0
Cada instancia en el vector contiene
3
nombre, peso e informacin de deudas
1
Cmo se puede clasificar informacin
utilizando vectores?

Otro caso tpico es tener un vector que se


asocia mediante el ndice a un vector y su
contenido se utiliza como ndice de un tercer
vector.
La combinaciones que se den van a
depender del problema que se quiere
resolver y de la forma en que se visualice la
informacin que se quiere representar.
Visualizacin del uso de vectores para
clasificar informacin
seAcepta solicitudesDeCredito

0 0 0
Nombre Apellido Salario Casado Hijos
1 2 1
Juan Prez 200000 Si 8
2 1
2 Mario Vargas 100000 No 0
3 2 3
Rebeca Chaves 500000 No 1
4 1 4
codigos Melvin Luna 600000 No 6
0 5
5 Graciel Sancho 450000 Si 0
a
0 No
Jorge Arias 60000 Si 2
1 Si
2 Condicionado
Fundamentos de vectores y
matrices

Matrices
Qu es una Matriz?

Una matriz es tpicamente una estructura bi-


dimensional compuesta de celdas.
Cada celda es identificada por las
coordenadas asociadas a cada una de las
dos dimensiones que la componen.
La matriz puede ser vista como una tabla
compuesta por filas y columnas.
Cmo se puede representar
grficamente una matriz?

5 columnas
0 1 2 3 4

0
1 8 7 15 16
1
4 filas
6 2 14 17 5
2
9 10 3 18 10
3
12 11 13 4 20
Cmo se implementa una matriz en
Java?

En java una matriz se implementa mediante


un vector de vectores.
Se puede declarar e inicializar primero un
vector de filas, y luego declarar e inicializar
cada una de las filas individualmente.
Visualizacin en memoria de una
matriz en Java

nombre[0] nombre[0][3]
fila celda
nombre
referencia 0 ...
a la matriz,
que es un 0 1 2 3 m0 -1
vector de 1
referencias
a vectores . ...
. m1 -1
0 1 2 3
.
n -1 ...
0 1 2 3 mn-1 -1
Cmo se puede tener acceso a las
celdas de una matriz?

Para tener acceso a las celdas de una matriz se


debe desreferenciar la celda deseada indicando
los ndices o coordenadas de la misma dentro de la
matriz.
Aunque los ndices no corresponde a filas o
columnas es til tener consistencia en la
interpretacin que se le da a cada coordenada. Por
ejemplo asumir que la primera coordenada siempre
representa filas y la segunda las columnas.
En la mayora de los lenguajes se utilizan parntesis
cuadrados para indicar las coordenadas.
Cmo se puede tener acceso a las
celdas de una matriz en Java?

La celda matriz[2][3] tiene el valor 12. 0 1 2 3 4


Nota: Lo anterior si se interpreta que la primera
coordenada corresponde a las filas y la segunda a
las columnas. Por comodidad se utilizar esta 1 5 6 7 8
convencin de aqu en adelante.

La instruccin matriz[3][1]=88;
2 9 10 11 12
asigna un 88 a la celda de la fila 3
columna 1.
3 13 88 15 16
Mediante la manipulacin de los
ndices se puede llevar a cabo cualquier
recorrido sobre las celdas de una 0 1 2 3
matriz.
Qu se entiende por recorrido de
matrices?

Dependiendo del problema se puede requerir llevar a cabo


secuencias de acceso a las celdas en forma consecutiva.
Por ejemplo:
sumar todos los valores de una fila especfica, o de una columna.
imprimir los valores de las celdas que se encuentran alrededor de
una celda especfica.
A estas secuencias de accesos consecutivos se les llama
recorridos.
Para recorrer eficientemente una matriz es conveniente
comprender como variar los ndices para manipular el orden en
que se visitan las celdas.
Visualizacin de un recorrido en una
matriz

En esta matriz de 2 filas y 3


columnas se visitan las celdas 5 12 10
en el orden siguiente:
(0,0) (0,1) (0,2) 2 8 45
(1,0) (1,1) (1,2)
(2,0) (2,1) (2,2) 14 21 37
Por lo que se imprime la
salida:
5 12 10
2 8 45
14 21 37
Cmo se puede recorrer la matriz en
una direccin especfica?

Para calcular la posicin de una celda con respecto


a otra con el fin de recorrer la matriz en una
direccin especfica basta con obtener nuevas
coordenadas.
Las nuevas coordenadas se obtienen a partir de
las originales dependiendo de la direccin
deseada.
Se debe modificar cada ndice de fila y columna ya
sea sumando 1, restando 1 o dejando el valor igual.
Visualizacin del recorrido de celdas
en una direccin especfica

0 1 2 3 4
1 5 6 7 8
Si la fila se decrementa 2 9 10 11 12
3 13 14 15 16
0 1 2 3
Si la columna se incrementa

Desplazarse ascendentemente en diagonal se logra decrementando la


coordenada de la fila e incrementando la columna en cada iteracin.
Cmo se pueden recorrer las celdas
vecinas de una celda en una matriz?

Una forma de desplazarse alrededor de una celda con


coordenadas (fActual,cActual) de manera automtica es
obteniendo todas las posibles combinaciones de -1, 0 y 1 para
obtener las coordenadas de las celdas restringidas a las filas y
columnas anteriore y siguiente con respecto a la actual.
En otras palabras solo las celdas con valores entre fActual-1 y
fActual+1 y entre cActual-1 y cActual+1 se deben tomar en
cuenta. Sin embargo as no se puede controlar el orden de
visita, sin que solo se puede asegurar que todas las celdas
vecinas son visitadas.
Visualizacin del recorrido de las
celdas vecinas

0 1 2 3 4 5

1 6 7 8 9 10

2 11 12 13 14 15

3 16 17 18 19 20

4 21 22 23 24 25

0 1 2 3 4
Las celdas alrededor de la celda actual (1 , 2) son aquellas con valores entre las
columnas 0 y 2 y las filas 1 y 3.
Los valores del rango se obtienen sumando y restando 1 a la fila y columna actual.
Cmo se puede generalizar el
movimiento hacia una direccin dada?

El clculo de las nuevas coordenadas al moverse en


una direccin dada siempre se puede llevar a cabo
con una simple suma.
Para subir, a la fila se le suma -1, para bajar se le
suma 1
Para ir a la izquierda, a la columna se le suma -1,
para ir a la derecha se le suma 1
El siguiente diagrama muestra los valores que hay
que sumar a las coordenadas actuales para
desplazarse en la direccin indicada.
Visualizacin de valores necesarios para
desplazarse en una direccin dada

(-1, -1) ( -1, 0) (-1, 1)


0
1 2 3
-1
( 0, -1) 1 (0 , 1)
fila actual 4 5 6
2
+1 7 8 9
0 1 2
(1 , -1) ( 1,1 )
( 1, 0)

-1 +1
columna actual
Cmo utilizar vectores para controlar
un recorrido?

Una posible forma de generalizar el concepto de direccin es


almacenando los valores de desplazamiento en vectores de
dos vectores utilizados para el clculo de ndices. Uno para
filas y otro para columnas.
El ndice de cada uno de los dos vectores representa la
direccin deseada y el contenido de cada celda es el valor que
hay que sumarle a la posicin actual para moverse en la
direccin asociada al indice.
De esta forma se puede controlar el orden de visita a las celdas
y pueden visitarse una misma celda varias veces en un
recorrido.
Visualizacin de un recorrido
controlado con vectores

(-1,-1) (-1,0) (-1,1)

(0,-1) (0,0) (0,1)

SUBIR
(1,-1) (1,0) (1,1)
DERECHA

sF = Sumar a fila -1 -1 -1 0 0 1 1 1
sC = Sumar a columna -1 0 1 -1 1 -1 0 1
direcciones
SUBIR SUBIR DERECHA BAJAR BAJAR BAJAR IZQUIERDA SUBIR
DERECHA DERECHA IZQUIERDA IZQUIERDA

0 1 2 3 4 5 6 7
ndices

S-ar putea să vă placă și