Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Son estructuras de datos construidas de una o más primitivas. Las estructuras de datos
simples a considerar se construyen a partir de estructuras primitivas y son: cadenas,
arreglos y registros.
Cadenas
S= ‘a 1 , a2 , … , an '
1
Comparación: la comparación de cadena (igualdad y desigualdad) es una operación muy
importante, sobre todo en la clasificación de datos tipo carácter.
Los criterios de comparación se basan en el orden numérico del código de caracteres que admite
la computadora o el propio lenguaje de programación.
Arreglos
2
La forma más simple de un arreglo es el arreglo unidimensional, conocido como vector.
Propiedad de Ordenación
Mapeo
Subíndice
El valor mínimo permisible para el subíndice del arreglo se llama límite inferior y el valor
máximo permisible se llama límite superior.
Clasificación de arreglos
3
Arreglos Bidimensionales
Arreglos Multidimensionales
Rango de un arreglo
Operaciones en Arreglos
Lectura: consiste en leer y asignar un valor a cada uno de sus componentes. Suponiendo
que se desea leer un arreglo unidimensional V. El proceso seria el siguiente:
Escritura: esta operación es similar a la lectura. Se debe escribir el valor de cada uno de
los componentes. Supongamos que se desea escribir los primeros N componentes del
arreglo unidimensional V en forma consecutiva. Los pasos a seguir son:
4
Al variar el valor de I se escribe el elemento del arreglo unidimensional V, correspondiente
5
hasta que el valor se encuentre –éxito- o hasta que se haya superado el tamaño del
arreglo –fracaso-.
Arreglos desordenados: considerando un arreglo unidimensional V de 100 elementos. En
cual los primeros N componentes tienen asignado un valor.
6
Luego de la eliminación, el arreglo unidimensional V queda:
7
Luego de la modificación, el arreglo unidimensional V queda:
Los primeros N componentes del mismo tienen asignado un valor. En este caso se trabaja
con un arreglo ordenado de manera creciente, es decir:
V[1]≤V[2]≤V[3]≤…≤V[N]
Cuando se trabaja con arreglos ordenados se debe evitar alterar el orden al insertar
nuevos elementos o al modificar los existentes.
Inserción: para insertar un elemento X en un arreglo unidimensional V ordenado, primero
se debe verificar que exista espacio. Luego se encontrará la posición en la que debería
8
estar el nuevo valor para no alterar el orden del arreglo. Cuando se detecte la posición, se
procederá a recorrer todos los elementos desde ahí hasta la N-ésima posición, un lugar a
la derecha. Finalmente se asignará el valor de X en la posición encontrada.
Antes de llevar a cabo la inserción en un arreglo ordenado, se debe realizar la búsqueda
secuencial.
Búsqueda Secuencial Ordenado
9
Luego de la inserción, el arreglo queda:
10
Luego de la eliminación, el arreglo queda:
Modificación: consiste en reemplazar un componente del arreglo con otro valor. Para ello,
primero se buscara el elemento en el arreglo. Si se encuentra, antes de realizar el cambio
se debe verificar que el orden del arreglo no se altere. Si esto llegara a suceder, entonces
es necesario realizar dos operaciones; primero se debe eliminar el elemento que se quiere
modificar y luego insertar en la posición correspondiente el nuevo valor.
11
Representación de arreglo bidimensional:
Los arreglos bidimensionales se usan para representar datos que pueden verse como una
tabla con filas y columnas. La primera dimensión del arreglo representa las columnas,
cada elemento contiene un valor y cada dimensión representa una relación
La representación en memoria se realiza de dos formas: almacenamiento por columnas o
por renglones.
12
Representación de arreglos multidimensionales: está compuesto por n dimensiones. Para
hacer referencia a cada componente del arreglo es necesario utilizar n índices, uno para
cada dimensión.
Para determinar el número de elementos en este tipo de arreglos se usan las siguientes
fórmulas:
RANGO (Ri) = lsi - (lii + 1)
No. TOTAL DE ELEMENTOS = R1 * R2* R3 * ...* Rn
Donde:
i = 1 ... n
n = No. total de dimensiones
Para determinar la dirección de memoria se usa la siguiente formula:
LOC A[i1,i2,i3,...,in] = base(A) + [(i1-li1)*R3*R4*Rn + (i2-li2)*R3*R2*... (in - lin)*Rn]*w
Matriz Esparcida
Traspuesta
14
Por definición:
B(I,J)= BT (J , I)
Matriz tridiagonal
Se dice que una matriz es tridiagonal si los elementos distintos de cero se encuentran
localizados en la diagonal principal y en las diagonales por encima y por debajo de ésta.
Por tanto, el valor absoluto del índice i menos el índice j será menor o igual que 1.
15
elementos correspondientes a los (i-1) renglones anteriores. Se calcula como la suma de
los elementos de la primera fila (2), más tres elementos por (i-2) renglones.
Por tanto, el segundo término de la fórmula es:
2+3*(i-2)
Por último, y una vez en el renglón i deseado, se deben contabilizar los elementos
correspondientes a las columnas. Con este fin se sigue el siguiente criterio.
i>j no se tiene que contabilizar ningún elemento
i=j se debe contabilizar un elemento
i<j se tienen que contabilizar dos elementos
Con lo cual se obtiene la siguiente expresión:
(j-i+1) tercer término de la formula
Observe que esta expresión contempla los tres casos enunciados. Si:
i>j, a lo sumo lo será en una unidad; por lo tanto, la expresión da cero elementos.
i=j, los mismos se anulan, quedando un elemento.
i<j. a lo sumo lo será en una unidad; por tanto, la expresión da dos elementos.
Nuevamente la suma de los tres términos da la localización del elemento i,j de la matriz
tridiagonal en un arreglo unidimensional. Por tanto:
LOC(A[i,j])=POSINI+(2+3*(i-2))+(j-i+1)
Operando queda:
LOC(A[i,j])=POSINI+2i+j-3
Así, por ejemplo, si se desea localizar la posición del elemento A[3,3], del arreglo
presentado en la matriz, en un arreglo unidimensional se hace:
LOC(A[3,3])=1+2*3+3-3=7
16
Donde a n ≠ 0 el grado de A es n.
Podemos representar A(x) como una lista ordenada de coeficientes, usando un arreglo
unidimensional de largo n+2.
A=(n,a n , a n−1 , … , a1 , a0 ¿
Si todos los coeficientes distintos de A son distintos de 0, luego m=n+1, e i−i y b i=ai para
0≤i≤n.
El primer elemento es el número de términos distintos de cero. Luego cada término tiene
dos elementos representando el par (exponente, coeficiente).
Registros
17
Los elementos de un registro son comúnmente llamados campos. Los campos de un
registro pueden ser todos de diferentes tipos de datos, por lo tanto también podrán ser
registros o arreglos. Cada campo se identifica con un nombre único, el identificador de
campo. Otra diferencia importante con los arreglos que no es necesario establecer un
orden entre los campos.
Llaves de Identificación
Un registro, por lo general, contiene un campo que lo identifica. El campo que identifica
un registro se llama campo llave.
La llave de un registro puede ser un elemento básico o bien uno grupal. Por ejemplo, un
registro de la clase particular CURSO puede identificarse por el valor de sus campos
DEPARTAMENTO, NUMERO Y SECCION.
Archivos
18
Las operaciones legales sobre registros son aquellas que se definen a partir del contenido
de los campos, basadas en sus estructuras de datos.
Los registros se almacenan casi siempre en forma lineal. La memoria se reserva para cada
uno de los elementos básicos en el registro, ordenados en forma contigua, tal y como
aparecen en la declaración.
Esta técnica de almacenamiento lineal con frecuencia ocasiona que los elementos de
datos se empiecen fuera de los límites de la palabra. En algunas máquinas, cierto tipo de
límites: de media palabra, de palabra completa o de doble palabra. Para asegurarse del
alineamiento correcto en estos casos puede ser necesario que el programador inserte
espacios sin información significativa entre los elementos de datos. Este espacio de
relleno es llamado bytes inactivos o relleno.
Los archivos de acceso aleatorio son más versátiles, permiten acceder a cualquier parte del
registro en cualquier momento, como si fueran arrays en memoria. Las operaciones de
lectura y/o escritura pueden hacerse en cualquier punto del archivo.
Los archivos de acceso secuencial se basan en el hecho de que, para acceder a una
determinada posición de los mismos, hemos de recorrer desde el principio todas las
posiciones hasta llegar a la deseada. Las impresoras son un claro ejemplo de acceso
secuencial, así como las cintas magnéticas.
Organizaciones de Archivos
19
Primero la organización determina la secuenciación de los registros del archivo, la cual es
la ordenación física de los registros almacenados.
Segundo, la organización del archivo determina el conjunto de operaciones necesarias
para encontrar registros en particular. Los registros individuales son identificados
normalmente mediante valores particulares en los campos de la llave de búsqueda. Este
campo de datos puede o no tener valores duplicados en el archivo y el campo puede ser
un elemento básico o de grupo.
La organización más apropiada para un archivo en particular está determinada por las
características operacionales del medio de almacenamiento utilizado y por la naturaleza
de las operaciones a ejecutar sobre los datos. La característica más importante de un
dispositivo de almacenamiento, que influye en la elección de la técnica de organización de
archivo es, si el archivo permite acceso directo a los registros en particular sin tener que
accesar todos los registros anteriores almacenados en el dispositivo, o si permite
únicamente acceso secuencial a los registros.
Recursividad
20
éste llegamos cuando encontramos la solución del problema o cuando decidimos que ya
no vamos a seguir, porque no están dadas las condiciones para hacerlo.
El paso segundo, por otra parte, propicia la recursividad. Se pueden presentar uno o varios
nuevamente dependiendo del problema a resolver.
Cuando se analiza la solución de recursiva de un problema es importante determina con
precisión cuáles serás los pasos básico y recursivo.
En general, una abstracción es un cálculo (asociado a un nombre) que puede ser utilizado
en distintas partes de un programa.
Se llama abstracción porque el programador puede usarla abstrayéndose de cómo se lleva a
cabo el cálculo, y centrándose en qué efectos tiene.
Ventajas de las abstracciones:
Mejorar la legibilidad: permite programas más cortos, más simples.
Mejorar la facilidad de escritura: permite trasladar más fácilmente los diseños a
código.
Permitir o facilitar la reusabilidad.
Particionar los programas, disminuyendo la cohesión.
Facilitar el trabajo en equipo.
Las abstracciones se pueden clasificar en base al tipo de cálculo asociado, aquí veremos
estos dos tipos:
Abstracciones procedurales (procedimientos): el cálculo es la ejecución de una
determinada sentencia. Constituyen abstracciones sobre sentencias.
Abstracciones funcionales (funciones): el cálculo es la evaluación de una
determinada expresión. Constituyen abstracciones sobre expresiones.
Pasaje de Parámetros
21
Un módulo, generalmente, realizará alguna tarea empleando datos que le son provistos.
Hay distintas maneras de proveerle los datos que el módulo necesita durante su ejecución.
Una de las formas más usuales es a través del uso de parámetros. Estos parámetros son
declarados en la definición del módulo, en donde se dice cuántos y de qué tipo son los datos
que el módulo espera cuando el mismo sea invocado, así como con qué nombres se puede
referenciar esos datos dentro del módulo. Estamos hablando de variables que tomarán un
valor cuando el módulo sea invocado. Estas variables se conocen como parámetros
formales.
Al invocarse un módulo, habrá que darle o pasarle los valores reales con los que este
trabajará: uno por cada parámetro declarado en la definición del mismo. Estos valores los
tomarán los parámetros formales. En la invocación del módulo estos valores se conocen
como parámetros reales o actuales. Se habla así de pasarle, al módulo, los parámetros
reales, es decir los datos concretos que el módulo deberá procesar
Búsqueda y Ordenamiento
La búsqueda es una operación que se utiliza básicamente para recuperar datos que se habían
almacenado con anticipación. El resultado puede ser de éxito si se encuentra la información
deseada, o de fracaso, en caso contrario.
Esta operación se puede llevar a cabo sobre elementos ordenados o desordenados. Cabe
destacar que la búsqueda es más fácil y ocupa menos tiempo cuando los datos se
encuentran ordenados.
Los métodos de búsqueda se pueden clasificar en internos y externos, según la ubicación
de los datos sobre los cuales se realizará la búsqueda. Se denomina búsqueda interna
cuando todos los elementos se encuentran en la memoria principal de la computadora; por
ejemplo, almacenados en arreglos, listas ligadas o árboles. Es búsqueda externa si los
elementos están en memoria secundaria; es decir, si hubiera archivos en dispositivos como
cintas o discos.
La búsqueda interna trabaja con elementos que se encuentran almacenados en la memoria
principal de la máquina. Éstos pueden estar en estructuras estáticas –arreglos- o dinámicas
–listas ligadas y árboles-. Los métodos de búsqueda interna más importantes son:
Secuencial o lineal
Binaria
Por transformación de claves
Árboles de búsqueda
22
Ordenar significa reagrupar o reorganizar un conjunto de datos u objetos en una
secuencia específica.
Formalmente se define ordenación de la siguiente manera:
Sea A una lista de N elementos:
A1 , A 2, A3 ,…, A N
Ordenar significa permutar estos elementos de tal forma que queden de acuerdo con una
distribución preestablecida.
Ascendente: A1≤ A2 ≤ A 3 ≤ …≤ A N
Descendente: A1≥ A2 ≥ A 3 ≥ …≥ A N
Argumentos
Resultados
Búsqueda Secuencial
23
Son dos los posibles resultados que se pueden obtener al aplicar este algoritmo: la
posición en la que encontró el elemento, o un mensaje de fracaso si el elemento no se
halla en el arreglo. Si hubiera dos o más ocurrencias del mismo valor, se encuentra la
primera de ellas.
La búsqueda secuencial en arreglos ordenados es similar al caso anterior. Sin embargo, el
orden entre los elementos del arreglo permite incluir una nueva condición que hace más
eficiente al proceso.
Búsqueda Secuencial en Arreglos Ordenados
24
Como el arreglo está ordenado, se establece una nueva condición: el elemento buscado
tiene que ser mayor que el del arreglo. Cuando el ciclo se interrumpe, se evalúa cuál de las
condiciones es falsa. Si (I>N) o si se comparó el elemento con un valor mayor a sí mismo
(X<V[I]), se está ante un caso de fracaso: el elemento no está en el arreglo. Si X=V[I]
entonces se encontró al elemento en el arreglo.
El número de comparaciones es uno de los factores más importantes que se utilizan para
determinar la complejidad de los métodos de búsqueda. Para analizar la complejidad de la
búsqueda secuencial, se deben establecer los casos más favorable o desfavorable que se
presenten.
Al buscar, por ejemplo, un elemento en un arreglo unidimensional desordenado de N
componentes, puede suceder que ese valor no se encuentre; por lo tanto se harán N
comparaciones al recorrer todo el arreglo. Por otra parte, si elemento se encuentra en el
arreglo, éste puede estar en la primera posición, en la última, se harán N comparaciones;
y si se encuentran en la posición i(1<i<N), entonces se realizarán i comparaciones.
El número de comparaciones que se llevan a cabo si trabajamos con arreglos ordenados
será el mismo que para desordenados, siempre y cuando el elemento se encuentre en el
arreglo. Si este no fuera el caso, entonces el número de comparaciones disminuiría
25
sensiblemente en arreglos ordenados, siempre que el valor buscado esté comprendido
entre el primero y el último elemento del arreglo.
Por otra parte, el número de comparaciones en la búsqueda secuencial en listas
simplemente ligadas es el mismo que para arreglos.
Los números mínimo, mediano y máximo de comparaciones que se ejecutan cuando se
trabaja con la búsqueda secuencial son:
Búsqueda Binaria
26
Ordenamiento Interno y Ordenamiento Externo
27
Los métodos de ordenación externa que podemos destacar son: intercalación de archivos,
ordenación de archivos, ordenación por mezcla directa y ordenación por el método de
mezcla equilibrada.
La totalidad de la lista de llaves no ordenadas, debe estar disponible, para que nosotros
podamos seleccionar la llave con valor mínimo en esa lista.
Por ejemplo, considere la siguiente lista de llaves no ordenadas:
El primer paso de selección identifica el 2 como el valor mínimo, lo saca de dicha lista y lo
agrega como primer elemento en una nueva lista ordenada.
28
En el i-ésimo pase, se habrán hecho n-i comparaciones de llaves.
El método anterior requiere dos veces más espacio del necesario. Una modificación al
método directo de ordenación por selección es el ordenamiento por selección con
intercambio, en el cual es valor de la llave seleccionada es movido a su posición final por
intercambio con la llave que inicialmente ocupaba esa posición. Considerando otra vez la
lista no clasificada:
29
Ordenamiento por Inserción
La idea básica de ordenar por inserción es tomar la siguiente llave de una lista no
clasificada e insertarla en su posición relativa correspondiente a una lista creciente de
datos clasificados.
La lista completa de las llaves ordenadas deberá estar disponible, a lo largo del proceso,
para poder insertar una llave en su posición relativa apropiada. La lista puede alimentarse
durante el proceso.
Considerando el ejemplo anterior:
30
Comparando los métodos podemos deducir que el ordenamiento por selección con
intercambio tiene esencialmente los mismos requerimientos de comparación que el
ordenamiento por selección directa.
Comparando al método de inserción con el método por selección podemos deducir que
ambas técnicas poseen la misma cantidad de comparaciones al momento de realizar la
ordenación.
La ventaja de emplear estos métodos es que son relativamente fáciles de comprender y
programar, pero son técnicas relativamente pobres y que emplean muchas
comparaciones para llevar a cabo el ordenamiento.
Este método puede trabajar de dos maneras diferentes: llevando los elementos más
pequeños hacia la parte izquierda del arreglo o trasladando los elementos más grandes
hacia su parte derecha. La idea básica de este algoritmo consiste en comparar pares de
elementos adyacentes e intercambiarlos entre si hasta que todos se encuentren
ordenados. Se realizan (n-1) pasadas transportando en cada una de ellas el menor o
mayor de los elementos –según sea el caso- a su posición ideal. Al final de las (n-1)
pasadas los elementos del arreglo estarán ordenados.
Supongamos que se desea ordenar las siguientes claves del arreglo unidimensional A
transportando en cada pasada el menor elemento hacia la parte izquierda del arreglo.
A: 15 67 08 16 44 27 12 35
Las comparaciones que se realizan son:
31
A: 08 15 67 12 16 44 27 35
Se puede observar que el elemento más pequeño, en este caso 08, fue situado en la parte
izquierda del arreglo.
Burbuja Menor
32
Ordenación por el método quicksort
33
En la primera se almacenara el extremo izquierdo y en la otra se almacenara el extremo
derecho de los conjuntos de datos que falta tratar.
Los índices del primer conjunto quedaron almacenados en la primera posición de
PILAMENOR y PILAMAYOR, respectivamente. La posición del extremo izquierdo del primer
conjunto (1) en PILAMENOR y la del extremo derecho del mismo conjunto (2) en
PILAMAYOR. Las posiciones de los extremos izquierdos y derecho del segundo conjunto (4
y 8) fueron almacenados en la cima de PILAMEJOR y PILAMAYOR respectivamente.
34
Objetivos, comparaciones y rendimiento
35
Si se considera a cada uno de los componentes de la sumatoria como un término y el
número de términos de la sumatoria es igual a m, entonces se tiene que:
Sin embargo, encontrar el elemento que ocupe la posición central del conjunto de datos
que se van a analizar es una tarea difícil, ya que existen 1/n posibilidades de lograrlo.
Además, el rendimiento medio del método es aproximadamente (2*ln2) inferior al caso
optimo, por lo que Hoare, el autor del método, propone como solución que el elemento X
se seleccione arbitrariamente o bien entre una muestra relativamente pequeña de
elementos del arreglo.
El peor caso ocurre cuando los elementos del arreglo ya que se encuentran ordenados o
bien cuando se encuentran en orden inverno.
36