Sie sind auf Seite 1von 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?
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.
n -1 n -2
0 1 2 3
...
valor
nombre
vector
nombre[3]
celda especfica
ndices ndices
valor valor valor valor valor
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?
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
vector
referencia al vector
ndice
i
3
vector[ i ]
Se modifica a la
celda vector[ 3 ]
3
?
0 1 2
? ? ?
4
8?
0 1 2 3
2 4 3 5 1
vector
ndice
4
i
acumulador
suma
vector[ i ]
Ejemplo de recorrido sobre un vector
de enteros en Java
0
0
1234
269 10 15
5
Qu sucede si se trata de acceder al
valor de una posicin inexistente?
0 1 2 3
2 4 3 5 1
vector
ndice
4
i
vector[ i ]
5
Error!
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
0 1 2 3
4 5 7 15 12
4 5 6 7 8
22 24 30 95 51
9
vector
datos
sumarUnoATodos(datos)
Pila
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.
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.
0 1 2 3
5 6 8 14 13
4 5 6 7 8
21 25 31 96 52
9
vector
datos
sumarUnoATodos(datos)
Pila
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
null
0
1
2
3
1 y
1 x
0 y
0 x
2 y
2 x
puntos
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.
0 1 2 3 4
Visualizacindela ejecucin del
algoritmo de Burbuja
0
recorrido
3 2 5 4 10
vector
i
i
fin
3 > 2, as que
debe haber
intercambio
fin = vector.length()
(recorrido + 1)
32 1
i+1
0213
10 > 4, as que
debe haber
intercambio
5 > 4, as que
debe haber
intercambio
El mayor est
ubicado donde
corresponde
El 2 mayor est
ubicado donde
corresponde
Fin del algoritmo.
El vector est
ordenado.
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.
0 1 2 3
4 5 7 15 12
4 5 6 7 8
22 24 30 95 51
9
vector
inicio medio fin
inicio medio fin
04 9 46 6 78 7
medio = (9 + 0) / 2
= 4
medio = (9 + 4) / 2
= 6
medio = (9 + 6) / 2
= 7
medio = (9 + 7) / 2
= 8
15 < 51
Se mueve inicio
24 < 51
Se mueve inicio
30 < 51
Se mueve inicio
51 = 51
Valor encontrado
Visualizacin de la bsqueda binaria en un
vector. Bsqueda del valor 48.
0 1 2 3
4 5 7 15 12
4 5 6 7 8
22 24 30 95 51
9
vector
inicio medio fin
inicio medio fin
9 8 7
medio = (9 + 7) / 2 =
8
inicio = fin - 1
Valor no encontrado
8
Se siguen los mismos
pasos que para el caso
anterior hasta este punto
51 > 48
Se mueve fin
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
1
2
3
4
One
Two
Three
Four
Uno
Dos
Tres
Cuatro
Un
Deux
Trois
Quatre
0
1
2
3
0
1
2
3
0
1
2
3
0
1
2
3
2
2
2
2
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
0 Melvin 78Kg $100
1 Lucia 56Kg $200
2 Juan 87Kg $150
3 Nuria 60Kg $224
3
1
2
0
2
1
0
3
2
0
3
1
alfabtico
deudas
kilos
Cada instancia en el vector contiene
nombre, peso e informacin de deudas
personas
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
Nombre Apellido Salario Casado Hijos
Juan Prez 200000 Si 8
Mario Vargas 100000 No 0
Rebeca Chaves 500000 No 1
Melvin Luna 600000 No 6
Graciel
a
Sancho 450000 Si 0
Jorge Arias 60000 Si 2
0
1
2
3
4
5
0
1
2
3
4
5
solicitudesDeCredito
0
2
1
2
1
0
seAcepta
0
1
2
No
Si
Condicionado
codigos
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?
0 1 2 3 4
0
1 8 7 15 16
1
6 2 14 17 5
2
9 10 3 18 10
3
12 11 13 4 20
5 columnas
4 filas
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]
fila
.
.
.
n -1
0
1
m
0
-1 0 1 2 3
...
0 1 2 3
...
0 1 2 3
...
m
1
-1
m
n-1
-1
nombre[0][3]
celda
nombre
referencia
a la matriz,
que es un
vector de
referencias
a vectores
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?
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
3 13 88 15 16
0 1 2 3
La celda matriz[2][3] tiene el valor 12.
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
convencin de aqu en adelante.
La instruccin matriz[3][1]=88;
asigna un 88 a la celda de la fila 3
columna 1.
Mediante la manipulacin de los
ndices se puede llevar a cabo cualquier
recorrido sobre las celdas de una
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
en el orden siguiente:
(0,0) (0,1) (0,2)
(1,0) (1,1) (1,2)
(2,0) (2,1) (2,2)
Por lo que se imprime la
salida:
5 12 10
2 8 45
14 21 37
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
Desplazarse ascendentemente en diagonal se logra decrementando la
coordenada de la fila e incrementando la columna en cada iteracin.
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
3 13 14 15 16
0 1 2 3
Si la columna se incrementa
Si la fila se decrementa
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
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.
3
4
2
1
0
0
21
16
11
6
1
20 19 18 17
25 24 23 22
4 3 2 1
5 4 3 2
13
8
14
9 10 7
15 12
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
0
1 2 3
1
4 5 6
2
7 8 9
0 1 2
columna actual
fila actual
+ 1 -1
-1
+ 1
( 1,1 )
( 1, 0)
(1 , -1)
( 0, -1)
(0 , 1)
(-1, 1) ( -1, 0) (-1, -1)
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
0 1 1 1 0 -1 -1 -1
1 -1 0 1 -1 1 0 -1
(1,1) (1,0) (1,-1)
(0,0)
(-1,0)
(0,1)
(-1,1) (-1,-1)
(0,-1)
4 5 6 7 3 2 1 0
BAJAR BAJAR
IZQUIERDA
IZQUIERDA SUBIR
IZQUIERDA
BAJAR
DERECHA
DERECHA SUBIR
DERECHA
SUBIR
sF = Sumar a fila
sC = Sumar a columna
ndices
direcciones
SUBIR
DERECHA

Das könnte Ihnen auch gefallen