fbpx
Wikipedia

Vector (informática)

En programación, se le denomina vector, formación, matriz (en inglés array, del cual surge la mala traducción arreglo),[1]​ a una zona de almacenamiento contiguo que contiene una serie de elementos del mismo tipo, los elementos de la matriz.[2]​ 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).

Matriz unidimensional con 10 elementos. Nótese que empieza a contar desde 0.

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 las de una, dos y tres dimensiones.

Estas estructuras de datos son adecuadas para situaciones en las que el acceso a los datos se realice de forma aleatoria e impredecible. Por el contrario, si los elementos pueden estar ordenados y se va a utilizar acceso secuencial sería más adecuado utilizar una lista, ya que esta estructura puede cambiar de tamaño fácilmente durante la ejecución de un programa, siendo esta última una estructura dinámica (al no tener un tamaño definido).

Índices

Todo vector se compone de un determinado número de elementos, lo cual lo hace que sea una estructura estática. Cada elemento es referenciado por la posición que ocupa dentro del vector. Dichas posiciones son llamadas índice y siempre son correlativos. Existen tres formas de indexar los elementos de una matriz:

  • Indexación base-cero (0): en este modo el primer elemento del vector será la componente cero ('0') del mismo, es decir, tendrá el índice '0'. En consecuencia, si el vector tiene 'n' componentes, el último elemento tendrá como índice el valor 'n-1'. El lenguaje C y el lenguaje Java son un ejemplo típico que utiliza este modo de indexación, ya que en aritmética de punteros el valor 0 corresponde a un desplazamiento nulo del puntero. De este modo, al sumar el valor del puntero y del desplazamiento 0 se consigue apuntar al primer elemento del vector.
  • Indexación base-uno (1): en esta forma de indexación, el primer elemento de la matriz tiene el índice '1' y el último tiene el índice 'n' (para una matriz de 'n' componentes). Lua es un ejemplo de lenguaje que usa este tipo de indexación.
  • Indexación base-n (n): este es un modo versátil de indexación en la que el índice del primer elemento puede ser elegido libremente, en algunos lenguajes de programación se permite que los índices puedan ser negativos e incluso de cualquier tipo escalar (también cadenas de caracteres).

Notación

La representación de un elemento en un vector se suele hacer mediante el identificador del vector seguido del índice entre corchetes, paréntesis o llaves:

Notación Ejemplos
vector[índice_1,índice_2...,índice_N] Lua, Perl, etc.
vector[índice_0][índice_1]...[índice_N-1] C, C++, PHP, Java, etc.
vector(índice_1,índice_2...,índice_N) Basic, MATLAB

Aunque muchas veces en pseudocódigo y en libros de matemática se representan como letras acompañadas de un subíndice numérico que indica la posición a la que se quiere acceder. Por ejemplo, para un vector "A":

  (vector unidimensional)

Forma de acceso

La forma de acceder a los elementos de la matriz es directa; esto significa que el elemento deseado es obtenido a partir de su índice y no hay que ir buscándolo elemento por elemento (en contraposición, en el caso de una lista, para llegar, por ejemplo, al tercer elemento hay que acceder a los dos anteriores o almacenar un apuntador o puntero que permita acceder de manera rápida a ese elemento).

Para trabajar con vectores muchas veces es preciso recorrerlos. Esto se realiza por medio de bucles. La siguiente fuente escrita en el lenguaje C muestra un algoritmo típico para recorrer un vector ' ' y aplicar una función ' ' a cada una de las componentes del vector:

int i = 0; int longitud = 99; // longitud del vector Ej. 99  int V[longitud]; while(i < longitud) //Ej. con While { //Se realiza alguna operación con el vector en la i-ésima posición f( V[i] ); //Se aumenta el índice para la siguiente etapa i= i+1; // También podría escribirse como i++; o i+= 1; } 

Vectores dinámicos y estáticos

Lo habitual es que un vector tenga una cantidad fija de memoria asignada, aunque dependiendo del tipo de vector y del lenguaje de programación un vector podría tener una cantidad variable de datos. En este caso, se les denomina vectores dinámicos, en oposición, a los vectores con una cantidad fija de memoria asignada se los denomina vectores estáticos.[3]

El uso de vectores dinámicos requiere realizar una apropiada gestión de memoria dinámica. Un uso incorrecto de los vectores dinámicos, o mejor dicho, una mala gestión de la memoria dinámica, puede conducir a una fuga de memoria. Al utilizar vectores dinámicos siempre habrá que liberar la memoria utilizada cuando esta ya no se vaya a seguir utilizando.

Lenguajes más modernos y de más alto nivel, cuentan con un mecanismo denominado recolector de basura (como es el caso de Java) que permiten que el programa decida si debe liberar el espacio basándose en si se va a utilizar en el futuro o no un determinado objeto.

Ejemplos en C

  • Declaración en C/C++ de un vector estático.
int main(void) { int i, v[5]; // v[5] es un vector de 5 componentes (Indexación base-cero) for(i=0; i<5; i++) { v[i] = 0; // Asignamos un valor printf("%d\n", v[i]); printf("\n"); // Crea una nueva línea } return 0; } 
  • Declaración en C/C++ de un vector estático utilizando aritmética de punteros.

Siendo el identificador del vector, un puntero constante que contiene la dirección del comienzo del vector (vector[0], primer elemento)

int main(void) { int i, v[5]; // v[5] es un vector de 5 componentes (Indexación base-cero) for(i=0; i<5; i++) { *(v + i) = 0; // Asignamos un valor en la dirección (vector + ((índice * sizeof (int) cantidad de bytes de desplazamiento desde la base.) printf("%d\n", *(v + i)); printf("\n"); // Crea una nueva línea } return 0; } 
  • Declaración en C++ de un vector de STL:
#include <vector> vector<int> v; // Si no se especifica el tamaño inicial es 0 for(int i=0 ;i<5 ;i++) { v.push_back(2*i); // inserta un elemento al final del vector } 

El ejemplo anterior está hecho para el lenguaje C++. En C, para crear vectores dinámicos se tendrían que utilizar las instrucciones malloc y realloc para reservar memoria de forma dinámica (ver biblioteca stdlib.h), y la función free para liberar la memoria utilizada.

Resultado:

0 1 2 3 4
0 2 4 6 8

El resultado de los dos ejemplos es el mismo vector.

Vectores multidimensionales

En Basic, Java y otros lenguajes es posible declarar matrices multidimensionales, entendiéndolas como un vector de x dimensión. En dichos casos el número de elementos del vector es el producto resultante de cada dimensión.

Por ejemplo el vector v(4,1) tiene 10 elementos se calcula del siguiente modo: (0-4) * (0-1). Los elementos de la primera dimensión del vector contiene 5 elementos que van del '0' al '4' y la 2º dimensión tiene 2 elementos que van desde '0' a '1'. Los elementos serían accedidos del siguiente modo:

elemento 1: (0,0)
elemento 2: (0,1)
elemento 3: (1,0)
...
elemento 8: (3,1)
elemento 9: (4,0)
elemento 10: (4,1)

Véase también

Referencias

  1. Antonio Vaquero, el pionero que tradujo la informática: "Me da igual que digan 'computer', pero no que digan ordenador", eldiario.es, 27 de noviembre de 2015.
  2. Douglas Bell, Java para estudiantes (2003). Mike Parr (3 edición). Pearson education. p. 162. ISBN 0-13-032377-2.
  3. Eck, David J (2010). Introducción a la programación usando Java. p. 340. 
  •   Datos: Q186152
  •   Multimedia: Array data structure

vector, informática, este, artículo, sección, necesita, referencias, aparezcan, publicación, acreditada, este, aviso, puesto, octubre, 2013, programación, denomina, vector, formación, matriz, inglés, array, cual, surge, mala, traducción, arreglo, zona, almacen. Este articulo o seccion necesita referencias que aparezcan en una publicacion acreditada Este aviso fue puesto el 18 de octubre de 2013 En programacion se le denomina vector formacion matriz en ingles array del cual surge la mala traduccion arreglo 1 a una zona de almacenamiento contiguo que contiene una serie de elementos del mismo tipo los elementos de la matriz 2 Desde el punto de vista logico una matriz se puede ver como un conjunto de elementos ordenados en fila o filas y columnas si tuviera dos dimensiones Matriz unidimensional con 10 elementos Notese que empieza a contar desde 0 En principio se puede considerar que todas las matrices son de una dimension la dimension 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 mas faciles de imaginar son las de una dos y tres dimensiones Estas estructuras de datos son adecuadas para situaciones en las que el acceso a los datos se realice de forma aleatoria e impredecible Por el contrario si los elementos pueden estar ordenados y se va a utilizar acceso secuencial seria mas adecuado utilizar una lista ya que esta estructura puede cambiar de tamano facilmente durante la ejecucion de un programa siendo esta ultima una estructura dinamica al no tener un tamano definido Indice 1 Indices 2 Notacion 3 Forma de acceso 4 Vectores dinamicos y estaticos 4 1 Ejemplos en C 5 Vectores multidimensionales 6 Vease tambien 7 ReferenciasIndices EditarTodo vector se compone de un determinado numero de elementos lo cual lo hace que sea una estructura estatica Cada elemento es referenciado por la posicion que ocupa dentro del vector Dichas posiciones son llamadas indice y siempre son correlativos Existen tres formas de indexar los elementos de una matriz Indexacion base cero 0 en este modo el primer elemento del vector sera la componente cero 0 del mismo es decir tendra el indice 0 En consecuencia si el vector tiene n componentes el ultimo elemento tendra como indice el valor n 1 El lenguaje C y el lenguaje Java son un ejemplo tipico que utiliza este modo de indexacion ya que en aritmetica de punteros el valor 0 corresponde a un desplazamiento nulo del puntero De este modo al sumar el valor del puntero y del desplazamiento 0 se consigue apuntar al primer elemento del vector Indexacion base uno 1 en esta forma de indexacion el primer elemento de la matriz tiene el indice 1 y el ultimo tiene el indice n para una matriz de n componentes Lua es un ejemplo de lenguaje que usa este tipo de indexacion Indexacion base n n este es un modo versatil de indexacion en la que el indice del primer elemento puede ser elegido libremente en algunos lenguajes de programacion se permite que los indices puedan ser negativos e incluso de cualquier tipo escalar tambien cadenas de caracteres Notacion EditarLa representacion de un elemento en un vector se suele hacer mediante el identificador del vector seguido del indice entre corchetes parentesis o llaves Notacion Ejemplosvector indice 1 indice 2 indice N Lua Perl etc vector indice 0 indice 1 indice N 1 C C PHP Java etc vector indice 1 indice 2 indice N Basic MATLABAunque muchas veces en pseudocodigo y en libros de matematica se representan como letras acompanadas de un subindice numerico que indica la posicion a la que se quiere acceder Por ejemplo para un vector A A 0 A 1 A 2 displaystyle A 0 A 1 A 2 vector unidimensional Forma de acceso EditarLa forma de acceder a los elementos de la matriz es directa esto significa que el elemento deseado es obtenido a partir de su indice y no hay que ir buscandolo elemento por elemento en contraposicion en el caso de una lista para llegar por ejemplo al tercer elemento hay que acceder a los dos anteriores o almacenar un apuntador o puntero que permita acceder de manera rapida a ese elemento Para trabajar con vectores muchas veces es preciso recorrerlos Esto se realiza por medio de bucles La siguiente fuente escrita en el lenguaje C muestra un algoritmo tipico para recorrer un vector V displaystyle V y aplicar una funcion f displaystyle f a cada una de las componentes del vector int i 0 int longitud 99 longitud del vector Ej 99 int V longitud while i lt longitud Ej con While Se realiza alguna operacion con el vector en la i esima posicion f V i Se aumenta el indice para la siguiente etapa i i 1 Tambien podria escribirse como i o i 1 Vectores dinamicos y estaticos EditarLo habitual es que un vector tenga una cantidad fija de memoria asignada aunque dependiendo del tipo de vector y del lenguaje de programacion un vector podria tener una cantidad variable de datos En este caso se les denomina vectores dinamicos en oposicion a los vectores con una cantidad fija de memoria asignada se los denomina vectores estaticos 3 El uso de vectores dinamicos requiere realizar una apropiada gestion de memoria dinamica Un uso incorrecto de los vectores dinamicos o mejor dicho una mala gestion de la memoria dinamica puede conducir a una fuga de memoria Al utilizar vectores dinamicos siempre habra que liberar la memoria utilizada cuando esta ya no se vaya a seguir utilizando Lenguajes mas modernos y de mas alto nivel cuentan con un mecanismo denominado recolector de basura como es el caso de Java que permiten que el programa decida si debe liberar el espacio basandose en si se va a utilizar en el futuro o no un determinado objeto Ejemplos en C Editar Declaracion en C C de un vector estatico int main void int i v 5 v 5 es un vector de 5 componentes Indexacion base cero for i 0 i lt 5 i v i 0 Asignamos un valor printf d n v i printf n Crea una nueva linea return 0 Declaracion en C C de un vector estatico utilizando aritmetica de punteros Siendo el identificador del vector un puntero constante que contiene la direccion del comienzo del vector vector 0 primer elemento int main void int i v 5 v 5 es un vector de 5 componentes Indexacion base cero for i 0 i lt 5 i v i 0 Asignamos un valor en la direccion vector indice sizeof int cantidad de bytes de desplazamiento desde la base printf d n v i printf n Crea una nueva linea return 0 Declaracion en C de un vector de STL include lt vector gt vector lt int gt v Si no se especifica el tamano inicial es 0 for int i 0 i lt 5 i v push back 2 i inserta un elemento al final del vector El ejemplo anterior esta hecho para el lenguaje C En C para crear vectores dinamicos se tendrian que utilizar las instrucciones malloc y realloc para reservar memoria de forma dinamica ver biblioteca stdlib h y la funcion free para liberar la memoria utilizada Resultado 0 1 2 3 40 2 4 6 8El resultado de los dos ejemplos es el mismo vector Vectores multidimensionales EditarEn Basic Java y otros lenguajes es posible declarar matrices multidimensionales entendiendolas como un vector de x dimension En dichos casos el numero de elementos del vector es el producto resultante de cada dimension Por ejemplo el vector v 4 1 tiene 10 elementos se calcula del siguiente modo 0 4 0 1 Los elementos de la primera dimension del vector contiene 5 elementos que van del 0 al 4 y la 2º dimension tiene 2 elementos que van desde 0 a 1 Los elementos serian accedidos del siguiente modo elemento 1 0 0 elemento 2 0 1 elemento 3 1 0 elemento 8 3 1 elemento 9 4 0 elemento 10 4 1 Vease tambien EditarEstructura de datos Registro estructura de datos Programacion orientada a objetos Grafico vectorial TuplaReferencias Editar Antonio Vaquero el pionero que tradujo la informatica Me da igual que digan computer pero no que digan ordenador eldiario es 27 de noviembre de 2015 Douglas Bell Java para estudiantes 2003 Mike Parr 3 edicion Pearson education p 162 ISBN 0 13 032377 2 Eck David J 2010 Introduccion a la programacion usando Java p 340 Datos Q186152 Multimedia Array data structureObtenido de https es wikipedia org w index php title Vector informatica amp oldid 136540726, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos