Arreglos Programacion
Arreglos Programacion
6.1Definición de arreglo
El arreglo es un tipo estructurado de dato, el cual es capaz de almacenar una colección
de datos del mismo tipo.
Un arreglo es un conjunto de datos o una estructura de datos homogéneos que se
encuentran ubicados en forma consecutiva en la memoria RAM (sirve para almacenar
datos en forma temporal).
Un arreglo puede definirse como un grupo o una colección finita, homogénea y ordenada
de elementos. Los arreglos pueden ser de los siguientes tipos:
6.1.1Arreglos unidimensionales
• Es un tipo de datos estructurado que está formado de una colección finita y
ordenada de datos del mismo tipo.
6.1.2Arreglos multidimensionales
• Es un tipo de dato estructurado, que está compuesto por dimensiones. Para
hacer referencia a cada componente del arreglo es necesario utilizar n índice,
uno para cada dimensión.
6.1.3Arreglos con múltiple subíndices
• Es la representación de tablas de valores, consistiendo de información arreglada
en renglones y columnas. Para identificar un elemento particular de la tabla,
deberemos de especificar dos subíndices; el primero identifica el renglón del
elemento y el segundo identifica la columna del elemento.
6.2. Estructura, Elementos y Riesgo de Arreglo
6.2.1. Estructura
El arreglo es una estructura multidimensional, en una dimensión puede ser visto como
un vector, necesita de un índice (la posición) para recorrer sus elementos, un arreglo de
dos dimensiones puede representarse como una matriz, necesita de dos índices (fila y
columna) para acceder a uno de sus elementos.
Un arreglo (popularmente en inglés: array) es una estructura de datos con una
capacidad pre-definida en la cual se pueden almacenar datos del mismo tipo. Estos
datos son almacenados en forma secuencial en la memoria y ocupan una determinada
cantidad de bytes según cual sea el tipo de dato. La capacidad de un arreglo se declara
desde el primer momento cuando este es construido, y no puede cambiar en tiempo de
ejecución. Cada dato almacenado es considerado un elemento al cual se accede por un
índice de posición (un número entero no negativo).
6.2.2. Elementos
En C la cantidad de elementos que podrá contener un vector es fijo, y en principio se
define cuando se declara el vector. Los vectores se pueden declarar de la siguiente
forma:
tipo_elemento nombre[largo];
Esto declara la variable nombre como un vector de tipo_elementos que podrá
contener largo cantidad de elementos, y cada uno de estos elemento podrá contener
un valor de tipo tipo_elemento.
Por ejemplo:
double valores[128];
En este ejemplo declaramos un vector de 128 elementos del tipo double, los índices de
los elementos irían entre 0 (para el primer elemento y 127 para el último).
De la misma forma que con las otras declaraciones de variables que hemos visto se le
puede asignar un valor iniciar a los elementos.
O también se pueden declarar:
tipo_elemento nombre[largo]={valor_0, valor_1, valor_2};
6.2.3.Recorrido
Un vector en C++ es como un arreglo mejorado, es algo así como una lista o arraylist
de Java.
Los vectores tienen muchos métodos que hacen que sean dinámicos, y no estáticos
como los arreglos.
Hoy vamos a ver algunas maneras de recorrer o iterar vectores en C++.
Vector en C++
Voy a mostrar algunas maneras de iterar un vector en C++, pero antes daré una
introducción.
Primero hay que incluir el encabezado de:
include <vector>
Después, declarar un vector:
std::vector<tipo> nombre;
Para declarar uno de enteros sería así:
std::vector<int> numeros;
Y puede declararse un vector de cualquier tipo.
6.3. Arreglo unidimensional
Un arreglo unidimensional es un tipo de datos estructurado que está formado por una
colección finita y ordenada de datos del mismo tipo. Es la estructura natural para
modelar listas de elementos iguales. Los datos que se guarden en los arreglos todos
deben ser del mismo tipo.
El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir,
podemos acceder a cualquier elemento del arreglo sin tener que consultar a elementos
anteriores o posteriores, esto mediante el uso de un índice para cada elemento del
arreglo que nos da su posición relativa.
Para implementar arreglos unidimensionales se debe reservar espacio en memoria.
Los arreglos nos permitrhacer un conjunto de operaciones para manipular los datos
guardados en ellos, están operaciones son: ordenar, buscar, insertar, eliminar, modificar
entre otras.
Un arreglo unidimensional tiene una sola dimensión. La dimensión se maneja por medio
de un par de corchetes, los arreglos de una dimensión también se les llama listas.
Declaración.-Consiste en establecer las características del arreglo y sus elementos, por
medio de la siguiente sintaxis:
<tipo>[ ] < identificador > ; Es el nombre del arreglo
Representa la dimensión del arreglo y encierra un número entero
que corresponde al número de elementos del arreglo.
Indica el tipo correspondiente a los elementos del arreglo
intercambia(arreglo[min],arreglo[i])
i <- i +1
b)Ordenación por Burbuja
Es el método de ordenación más utilizado por su fácil comprensión y programación, pero
es importante señalar que es el más ineficiente de todos los métodos .
Este método consiste en llevar los elementos menores a la izquierda del arreglo ó los
mayores a la derecha del mismo. La idea básica del algoritmo es comparar pares de
elementos adyacentes e intercambiarlos entre sí hasta que todos se encuentren
ordenados.
i <- 1
mientras i < N haz
j <- N
mientras j > i haz
si arreglo[j] < arreglo[j-1] entonces
intercambia(arreglo[j],arreglo[j-1])
j<j-1
i <- i +1
6.4.2. Búsqueda
Encontrar información en un arreglo desordenado requiere una búsqueda secuencial
comenzando en el primer elemento y parando cuando se encuentra el elemento
buscando o cuando se alcanza el final del arreglo. Este método es el que se tiene que
utilizar con datos desordenados aunque también se puede aplicar a datos ordenados ya
han sido ordenados, es mas aconsejable utilizar el algoritmo de búsqueda binaria, que
incrementa ampliamente la velocidad de búsqueda.
La búsqueda secuencial es fácil de codificar. El siguiente algoritmo busca el valor X en
el arreglo a de n elementos, retornando la ubicación del elemento busca o -1 si el
elemneto no existe en el arreglo.
BuscaSec (a, n, x)
{
for(i=0; i<n; i++)
if (x==a[i] return(i);
return(-1);
}
6.5.Arreglos bidimensionales
Los arreglos bidimensionales son tablas de valores. Cada elemento de un arreglo
bidimensional está simultáneamente en una fila y en una columna.
En matemáticas, a los arreglos bidimensionales se les llama matrices, y son muy
utilizados en problemas de Ingeniería.
En un arreglo bidimensional, cada elemento tiene una posición que se identifica
mediante dos índices: el de su fila y el de su columna.
Crear arreglos bidimensionales
Los arreglos bidimensionales también son provistos por NumPy, por lo que debemos
comenzar importando las funciones de este módulo:
from numpy import *
Al igual que los arreglos de una dimensión, los arreglos bidimensionales también
pueden ser creados usando la función array, pero pasando como argumentos una lista
con las filas de la matriz:
a = array([[5.1, 7.4, 3.2, 9.9],
[1.9, 6.8, 4.1, 2.3],
[2.9, 6.4, 4.3, 1.4]])
Todas las filas deben ser del mismo largo, o si no ocurre un error de valor:
>>> array([[1], [2, 3]])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: setting an array element with a sequence.
6.6. Aplicaciones en álgebra y cálculo
En la solución de ciertos problemas de redes que tienen que ver con caminos, la matriz
de conexión generalizada juega un papel central. Si los problemas se plantean
adecuadamente, algunos algoritmos clásicos como los de Jacobi y Gauss–Seidel para
resolver sistemas lineales de ecuaciones por iteración, pueden utilizarse para resolver
una variedad muy grande de problemas de caminos en redes. Los algoritmos resultantes
son fáciles de automatizar en lenguajes que manejan arreglos.
6.6.1. La matriz de conexión y su generalización
Sea G una gráfica orientada con n nodos, cada par (i, j) de los cuales están conectados
en un sentido por, a lo más, una sola rama, a la cual se le da un peso cij. Se admiten
conexiones entre un nodo y sí mismo. (Los pesos son números reales que se pueden
interpretar como longitudes, capacidades, confiabilidades, etcétera). Se define la matriz
de conexión C (también llamada matriz asociada con la gráfica o matriz de
adyacencia) como la matriz n×n que tiene como componentes cij, i = 1, 2,... ,n.
(Bellman et al., 1970 y Mayeda, 1972). Cuando no existe conexión entre un par de nodos
(o de un nodo con sí mismo) se pone un peso de cero. (Estamos pensando en pesos
interpretados como capacidades; en caso de que fueran longitudes, se pondrían infinitos
que como veremos más adelante juegan un papel similar al cero para las operaciones
que se utilizarán al generalizar el concepto de matriz de conexión.)
Por ejemplo, para la gráfica de la figura 1 con los pesos indicados junto a las ramas se
tendría la matriz C que se muestra en la figura 1.