You are on page 1of 17

Temario Oposicin a

Tcnicos Auxiliares de Informtica


(BOE 03 NOV 2015)

Considerando los Reyes, de gloriosa memoria, cunto era provechoso e honroso


que a estos sus Reinos se truxiesen libros de otras partes, para que con ellos se
ficiesen los hombres letrados, quisieron e ordenaron: que de los libros non se
pagase alcabala, y porque de pocos das a esta parte, algunos mercaderes
nuestros, naturales y extranjeros, han trahido y cada da trahen libros mucho
buenos, lo cual, por este que redunda en provecho universal de todos, e
ennoblecimiento de nuestros Reinos; por ende, ordenamos e mandamos que,
allende de la dicha franquiza, de aqu en adelante, de todos los libros que se
truxeren a estos nuestros Reinos, as por mar como por tierra, non se pida, nin se
pague, nin lleve almoxarifazgo, nin diezmo, nin portazgo, nin otros derechos algunos
por los nuestros Almoxarifes, nin los Desmeros, nin Portazgueros, nin otras
personas algunas, as como las cibdades e villas e lugares de nuestra Corona Real,
como de Seoros e rdenes e behenias; ms que de todos los dichos derechos o
almoxarifazgos sean libres e francos los dichos libros.
Orden de los Reyes Catlicos

1
TODOS LOS TEXTOS DE ESTOS APUNTES LLEVAN LA
SIGUIENTE LICENCIA, EXCEPTO SI SE INDICA LO CONTRARIO

Edicin: 1 Edicin Julio 2.015

Ttulo: Temario Oposicin a Tcnicos Auxiliares de Informtica

Autor: http://apuntedecaramelo.blogspot.com.es/

2
TEMA 3. TIPOS ABSTRACTOS Y ESTRUCTURAS DE DATOS. ORGANIZACIONES DE FICHEROS.
ALGORITMOS. FORMATOS DE INFORMACIN Y FICHEROS

1. INTRODUCCIN
2. TIPOS ABSTRACTOS Y ESTRUCTURAS DE DATOS
2.1. Estructuras de datos estticas
2.1.1. Arrays y matrices
2.1.2. Registros y uniones
2.2. Estructuras de datos dinmicas
2.2.1. Contenedores secuenciales
2.2.2. rboles
2.2.3. Grafos
2.3. Tipos abstractos
3. ORGANIZACIN DE FICHEROS
3.1. Clasificacin
3.2. Caractersticas
3.3. Organizaciones
3.3.1. Secuencial
3.3.2. Indexada
3.3.3. Aleatoria, relativa o directa
4. ALGORITMOS
4.1. Complejidad
4.2. Algoritmos de Bsqueda
4.2.1. Secuencial
4.2.2. Binaria o Dicotmica
4.3. Algoritmos de Ordenacin
4.3.1. Seleccin
4.3.2. Insercin
4.3.3. Burbuja
5. FORMATOS DE INFORMACIN Y FICHEROS
5.1. Instrucciones
5.2. Caracteres
5.3. Nmeros
5.3.1. Enteros
5.3.2. Reales
5.4. Otros

104
1. INTRODUCCIN
Un lenguaje de programacin es una representacin formal de algoritmos y funciones. Como todo lenguaje
posee un conjunto de smbolos que lo definen. Funcionalmente es similar al lenguaje natural, pero ms
esquemtico. Su caracterstica es ofrecer un sistema normalizado para que distintos programadores puedan
desarrollar aplicaciones portables entre equipos o ser combinadas.
La definicin de la sintaxis hace uso de distintos parmetros. Entre ellos, los datos, variables y constantes,
operadores e instrucciones.
Los datos son definidos por cada lenguaje con distintos tipos, as como su representacin interna, su
estructura. Es el objeto de este tema. Tipos de datos comunes son enteros (int, integer), reales (real) o
lgicos (boolean). En general, al declarar un tipo de datos, el lenguaje lo entiende como una variable. Si se
desea declarar una constante se usar una palabra reservada o similar.

Las operaciones sobre datos, se indican con operadores. Se distinguen los aritmticos, los relacionales,
usados para comparar y los lgicos, que evalan expresiones devolviendo un valor binario.
Los operadores tienen prioridades, esto es, el procesador evaluar primero unas operaciones sobre otras, a
no ser que se modifique la prioridad mediante parntesis.
2. ESTRUCTURAS DE DATOS
Ya se han presentado los conceptos de dato e informacin. Un dato es la representacin simblica de una
entidad. Aporta informacin pero puede no tener significado. Segn la RAE es un antecedente necesario
para llegar al conocimiento.
Las estructuras de datos son formas de organizacin de stos. Se dividen en estticas y dinmicas, en
funcin de si la reserva de memoria se realiza en el momento de la definicin del dato o segn la necesidad
de la estructura y capacidad del equipo.
La organizacin lgica de los datos se refiere a su estructura y representacin en un ordenador. Esta
organizacin debe seguir unos criterios definidos para evitar errores de interpretacin. Los datos se
organizan en colecciones llamadas estructuras.
Las estructuras de datos pueden ser homogneas (si tienen el mismo tipo de datos) o heterogneas (cada
elemento puede ser de tipos distintos).
Para acceder a los datos se utiliza un identificador del dato, que puede ser el nombre del dato, su posicin
en la estructura o una clave que lo identifica unvocamente. Estructuras del primer tipo seran las estructuras
y uniones, del segundo los vectores, matrices, pilas y colas y las terceras los rboles.
2.1. Estructuras de datos estticas
En una estructura esttica se conoce cuntos datos la componen y lo que ocupa cada uno. Por tanto el
tamao de la estructura debe estimarse cuando se disea. Al ejecutarse el programa, se reservar un
espacio en memoria para la estructura, que ser invariable.
Las estructuras estticas poseen la ventaja de ser sencillas de usar y son ms eficientes para el acceso a
datos, ya que es aleatorio en general. Como inconveniente est la rigidez de su definicin, lo que puede
llevar a una gran reserva de memoria poco utilizada, lo que ofrece un bajo rendimiento. Las estructuras
estticas bsicas son arrays, matrices, registros y uniones.

105
2.1.1. Arrays y matrices
Un array o vector es una estructura esttica en la que los datos son todos iguales y se organizan de forma
lineal. Para referenciar un dato se usa un ndice que indica su posicin en el array. La cantidad de datos que
contendr el array, su tamao se define al crearlo. Ejemplo en Pascal: vector1: array [1..10] of integer;
definira un array de 10 posiciones, en la que cada posicin contendr un entero.
El esquema visual de un array es el de la figura. Para acceder a una posicin y
leer o escribir un dato en el array, se utiliza un ndice entero. Siguiendo con el
ejemplo, si se tuviera la instruccin en Pascal vector1[5]:=333; se escribira la
cifra 333 en la quinta posicin del array.
Ampliando el concepto de array a ms dimensiones, se llega a la idea de matriz. En realidad, es la misma
idea: para acceder a un dato, se necesitarn tantos ndices como dimensiones la matriz. Una matriz puede
definirse como nativa o como array de array, en funcin del anlisis realizado.
Ejemplo de definicin de una matriz nativa en Pascal: matriz1: array [1..10][1..15] of integer; Lo que define
una matriz de dimensin 2 con 10 filas y 15 columnas en que cada posicin contiene un entero. La
definicin de una matriz como array de array sera: matriz2: array [1..10] of vector1; Definira una matriz de
10 filas en las que cada fila sera un vector de 10 posiciones (vector1). En realidad, habra que definir
vector1 como un tipo de datos, pero como idea puede servir para el ejemplo. Para definir una matriz de
dimensin mayor a dos, habra que ampliar la definicin de ndices. El acceso a un dato sera por ejemplo
valor=matriz2 [2,15], que asignara a valor, el entero de la fila 2, columna 15.
Debe tenerse en cuenta, que segn el lenguaje de programacin, las posiciones de los arrays pueden
empezar a numerarse desde el cero. Por tanto para acceder a la posicin 5 del array habra que escribir
array[4]. Del mismo modo, si en un array de 10 posiciones se escribe array[222], dar un error.
En general, al tratar con arrays, se recorren operando con los datos que almacenan. Para ello se suelen
introducir las operaciones de RW del array en bucles de diferentes tipos (for, dowhile, etc.). Si se trabaja
con matrices se utilizarn bucles anidados, de manera similar.
Un tipo especfico de array son las cadenas de caracteres o strings. Son estructuras que se comportan
como los arrays, pero que se establecen porque el tratamiento de caracteres es muy habitual y necesario en
programacin. De esta forma, la mayora de lenguajes de programacin cuentan con instrucciones de
manejo de cadenas agrupadas en bibliotecas para facilitar su tratamiento. Operaciones tpicas con strings
son la obtencin de su longitud, concatenacin, comparacin, etc.
El lenguaje C agrupa este tipo de operaciones en la librera <stdlib.h>. Un ejemplo de manejo de string en C
sera: char cadena[7]=hola; que define un string de 7 posiciones de las cuales las 4 primeras tendran el
carcter h, o, l y a, respectivamente. Las 3 restantes contendran el carcter nulo.
2.1.2. Registros y uniones
Un registro es una estructura esttica type TFicha = record
heterognea, es decir, puede contener
Nombre: array[1..10] of char;
datos de distinto tipo.
DNI: integer;
Cada componente de un registro se
denomina campo. Ejemplo de definicin de end;
un registro en Pascal es:
El registro TFicha est compuesto por campo array de caracteres de 10 posiciones y un campo tipo entero
llamado DNI. y una cadena de caracteres de tamao 10. Para asignar valores al registro, hay que hacerlo
por campos. Por ejemplo: paco.Nombre:=Francisco; paco.DNI:=222.222. En este caso, faltara instanciar la
variable paco como de tipo TFicha. Se pueden combinar las estructuras de datos y por ejemplo generar
arrays o matrices de registros.
Otra estructura similar a los registros son las uniones. La diferencia estriba en que en una unin todos los
datos internos ocupan el mismo espacio y es tan grande como el mayor elemento. Si se modifica uno de
esos elementos, todos los dems se modifican. En C se declaran con la palabra union.
2.2. Estructuras de datos dinmicas
Las estructuras de datos dinmicas no tienen un tamao fijo, puede variar en tiempo de ejecucin. Son
ideales cuando no se conoce a priori, ni se puede estimar, el tamao que datos que se manejarn.
Un tipo de dato abstracto o TDA es un conjunto de datos y procedimientos de ese dato, como por ejemplo,
un objeto, dentro de la metodologa de POO, que posee atributos (datos) y mtodos (procedimientos). Un
TDA debe disponer un interfaz para conseguir encapsulamiento y ocultacin, de forma que los detalles de
implementacin del TDA sean transparentes para quien lo use.
106
Las estructuras de datos dinmicas que se implementan como un TDA ofrecen un interfaz completa para
operar la estructura, no permitiendo el acceso directo a su implementacin. Las estructuras dinmicas
podran simularse con estructuras estticas, pero lgicamente se pierde agilidad y rendimiento. Por ejemplo,
una pila podra realizarse con un array de registros, pero se complicaran las operaciones de ordenacin,
insercin y otras. Las estructuras de datos dinmicas son contenedores secuenciales, rboles y grafos.
2.2.1. Contenedores secuenciales
Los contenedores secuenciales o lineales son aquellos que almacenan sus elementos en orden lineal.
Suelen implementarse como un TDA o una clase. Entre los contenedores secuenciales se distinguen los
conjuntos, listas, colas y pilas.
Conjunto (set). Es una estructura de datos cuyo orden o cantidad de repeticiones no es relevante. Poseen
dos operaciones habituales, una para indicar si un elemento est contenido en el conjunto y otra que
compruebe si est vaco. Otras operaciones son la de instanciacin o creacin, insercin y eliminacin de
elementos. Operaciones entre conjuntos seran la unin, interseccin o diferencia.
Lista enlazada. Es una secuencia de nodos compuestos por sus datos y uno o varios punteros o enlaces a
otros nodos. Son tipos de datos autoreferenciados porque contienen punteros a datos del mismo tipo.
Permiten inserciones y eliminacin de nodos en cualquier punto de la lista, pero no de forma aleatoria.
Las variantes de lista enlazada son las listas doblemente enlazadas, circulares y circulares doblemente
enlazadas. La diferencia estriba en su implementacin, en que cada nodo contendr uno o varios punteros a
los nodos anterior y posterior segn corresponda. As si la lista enlazada posee un nico puntero al
siguiente nodo, las listas doblemente enlazadas tendrn un puntero al nodo anterior y otro al posterior. Las
listas circulares no tienen nodo inicial ni final, ya que el ltimo apunta al primero, y las listas circulares
doblemente enlazadas seran como las circulares, con los dos sentidos de enlace.
La lista doblemente enlazada permite conocer el primer elemento y el ltimo y podr recorrerse en dos
sentidos. Una lista puede dotarse de un nodo centinela que apunte al principio o final de la lista y para
simplificar operaciones. El elemento final de una lista se llama NULL.
Con respecto a los arrays, las listas presentan la ventaja de ordenar sus elementos de forma diferente al
almacenamiento en memoria permitiendo recorridos diferentes al secuencial. La insercin y eliminacin de
nodos posee un coste fijo al no ser necesario reordenar el array. Como desventaja, son menos eficientes en
el acceso aleatorio. Para pocos datos, el coste en memoria y complejidad puede aconsejar el uso de arrays.
Para insertar un nodo en la lista es necesario cambiar el puntero al siguiente del anterior apuntando al
nuevo nodo y el puntero al siguiente del nuevo nodo apuntando al nodo siguiente. Si hay un doble enlace,
se realizarn las mismas operaciones en sentido inverso. La eliminacin de un nodo es tan sencilla como
hacer que los punteros de los nodos adyacentes a este se apunten entre s.
Cola. Es una lista con comportamiento FIFO (First-In, First-Out; primero en entrar, primero en salir). Puede
implementarse como una lista con opciones restringidas. En una cola, son tpicas las operaciones de push y
pop (adicin o eliminacin de elementos), con la salvedad que la operacin push aade el elemento al final
y pop elimina siempre el primero de la cola. Es comn encontrar la operacin front, que devuelve el valor del
primer elemento.
Pila. Es una lista con organizacin LIFO (Last-In, First-Out). Pueden implementarse como listas enlazadas.
Tambin suelen definirse las operaciones push y pop y una operacin tipo cima, que devuelva el valor del
elemento superior de la pila. Una lista enlazada simple implementara esta estructura.
2.2.2. rboles
Un rbol es una estructura jerrquica de datos constituida por unidades llamadas nodos. Cada nodo podr
ser un registro o similar y puede tener uno no ms nodos que cuelguen de l, sus nodos hijo. Del mismo
modo, el nodo del que cuelga un nodo hijo, ser el nodo padre. El grado de un nodo es su nmero de hijos.
El nodo origen, que no posee padre, es el nodo raz y es nico. Un
nodo sin hijos se denomina hoja. Un nodo genrico, con padre e
hijos, se denomina nodo rama.
rboles tpicos son los binarios, en los que cada nodo padre tiene
dos nodos hijos. Su implementacin consiste en dotar a cada nodo
de dos punteros, uno a un hijo en la izquierda y otro al hijo de la
derecha, como se muestra en el esquema.
Un rbol genrico posee cualquier nmero de nodos hijo. En este caso, cada nodo contendr sus datos y
tantos punteros como hijos tenga. Otros trminos utilizados son camino, altura, profundidad y nivel.

107
Un camino es el conjunto de nodos que se pueden seguir de un nodo padre a una hoja. La altura es la
longitud del camino ms largo. La profundidad, la longitud del camino a un determinado nodo y el nivel, el
de los nodos que poseen la misma profundidad.
Un rbol que posee sus elementos ordenados, se dice que est equilibrado si tiene una profundidad
homognea en todas las hojas, es decir que no vare ms de una unidad. Por ejemplo, los rboles AVL
(Adelson-Velskii, Landis), son rboles binarios ordenados, de forma que el hijo izquierdo contiene un valor
siempre menor que el padre y el hijo derecho mayor, de forma que consiguen equilibrio de forma automtica
al insertar o eliminar nodos. El equilibrio es til para reducir la complejidad de las bsquedas.
Los rboles, implementados como TDA suelen ofrecer mtodos para su manejo. Los habituales son del tipo
insercin, borrado o bsqueda. El recorrido de un rbol se puede hacer siguiendo criterios como el
preorden, postorden o inorden. El preorden consiste en recorrer el rbol, comenzando por el nodo padre,
hijo izquierdo e hijo derecho hasta llegar a una hoja. El postorden recorre el rbol comenzando por el hijo
izquierdo, hijo derecho y padre. El inorden recorre el primer hijo, el padre y el hijo derecho.
3.3. Grafos
Puede definirse grafo como un rbol no jerrquico. De hecho un rbol no permite referencias cclicas. La
forma general de representar un grafo es usar crculos para los nodos y lneas para las aristas.
Trminos utilizados habitualmente son orden, medida, adyacencia
y grado. El orden es el nmero de nodos del grafo. La medida el
nmero de aristas. Dos nodos son adyacentes si tienen una arista
que los une y su grado es el nmero de aristas que tiene un nodo.
Se distinguen grafos dirigidos o no dirigidos. Los primeros indican
las relaciones entre nodos mediante flechas, los no dirigidos no. Se
dice que un grafo tiene pesos si a cada arista se le asigna un valor
y es regular cuando todos los nodos poseen el mismo grado.
Grafo completo es en el que cada nodo es adyacente al resto. Para implementarlo se puede usar un grafo
genrico y una lista de adyacencia, si el grafo es ms medio. Para grafos complejos, manejar la lista de
adyacencia puede complicarse y ser ms eficiente usar una matriz de adyacencia. sta ordena los nodos y
sus aristas entre ellos en filas y columnas. Las operaciones tpicas en grafos son las de recorrido, insercin
o borrado. En este caso el recorrido ordenado es ms complejo que en un rbol.
2.3. Tipos abstractos
Un tipo abstracto de dato o TDA es una arquitectura de informacin caracterstica de la POO compuesta por
datos y procesos, (funciones o mtodos). Como su nombre indica, la esencia de un TDA es abstraer datos y
procesos para ser usados por un programador.
Otra definicin de TDA: un conjunto formado por la estructura de datos y operaciones asociadas a una
entidad, que permiten modelar su comportamiento.
El comportamiento de un TAD es de caja negra. Se sab qu hace, cmo funciona, pero no cmo.
3. ORGANIZACIN DE FICHEROS
Un fichero es un conjunto de datos organizados en registros sobre un soporte fsico. Su nombre deriva del
de conjunto de fichas. Cada ficha, es un registro y cada dato que compone el registro se denomina campo.
Los ficheros son las estructuras tpicas usadas para contener informacin. El ejemplo clsico de fichero es
el que contiene la informacin de las personas de una organizacin. Esta informacin contendr datos como
el nombre, apellidos o domicilio. La informacin referente a una nica persona (entidad) constituye un
registro. Cada dato particular (atributo), como el domicilio, sera un campo.
Para facilitar las operaciones sobre un fichero se suele usar como referencia algn campo de sus registros.
El campo referencia se denomina campo clave. Pero la clave de acceso al fichero puede estar formada por
ms de un campo. De hecho, se puede usar ms de un campo clave, de forma que una de ellas ser la
clave principal o primaria y el resto claves secundarias o alternativas. En general, la clave primaria es
diferente para cada registro y las claves secundarias pueden tener el mismo valor en registros diferentes.
El tamao de un fichero suele ser demasiado grande para ser cargado por completo en la MP, por tanto, la
carga se realiza por partes. Cada parte de un fichero que se carga en la MP se denomina registro fsico o
bloque. El factor de blocaje es el nmero de registros lgicos que contiene un bloque. A la operacin de
agrupar varios registros en un bloque se le llama bloqueo de registros. Se denomina volumen al soporte
fsico de almacenamiento del fichero. En el diseo de un fichero es importante el diseo de los registros, el
soporte de datos para su almacn y la forma en que se organizan los datos en el soporte. El diseo de un
registro consiste en seleccionar, ordenar y definir las caractersticas de los campos que lo forman.

108
Suelen usarse hojas de diseo para los registros, en las que para cada campo se define su nombre,
posicin, tamao y descripcin y tipo de datos a contener. La definicin del tamao de cada campo es algo
complejo, dado que si es demasiado grande pueden desaprovecharse recursos, y si es pequeo, puede no
ser suficiente para la informacin a contener. Por tanto, debiera utilizarse un tamao intermedio, o segn el
caso, campos de longitud variable, aunque a costa de una mayor complejidad.
Los ficheros, debido a su tamao se almacenan en soportes externos. Normalmente los soportes elegidos
sern discos y se usarn discos duros o cintas para copias de seguridad.
3.1. Clasificacin
La clasificacin de ficheros, puede seguir varios criterios. El esquema muestra los ms habituales.
El criterio de tiempo de vida
(duracin), suele referirse
tambin como uso. Distingue
ficheros permanentes, de
movimientos (transacciones)
y temporales.
Los ficheros permanentes
son de larga duracin y
usados por ms de un
proceso, ya que su
informacin es cuasi
constante.
Dependiendo de la
frecuencia con que se
actualizan sus datos algunos
distinguen tambin entre
ficheros de constantes,
maestros e histricos.
Los ficheros de constantes no suelen actualizarse y su informacin se consulta con frecuencia. Ejemplo, un
fichero de clientes. Los ficheros maestros suelen actualizarse ms y tambin muy consultados. Ejemplo, un
fichero de cuentas bancarias. Los ficheros histricos no se actualizan; contienen informacin pasada.
Los ficheros de movimientos se usan para actualizar ficheros permanentes. Su duracin se limita al periodo
de actualizacin del fichero permanente. Al terminar se destruyen o guardan como histricos.
Los ficheros temporales almacenan resultados provisionales que se usarn posteriormente en el mismo u
otro proceso. Su vida termina al terminar el proceso que lo usa. Ejemplo, un fichero para preparar el listado
de alumnos aprobados.
Los ficheros de control contienen informacin para gestionar la ejecucin de programas. Distinguen los
ficheros de parametrizacin y los de registro (o log). Los primeros poseen informacin para la ejecucin
particular de un programa. Se usan para adaptar programas a necesidades concretas del usuario. Los
ficheros de log almacenan informacin de registro, o auditora referente a la ejecucin de un programa.
Las operaciones de actualizacin de ficheros se efectan en un procesos "por lotes" (modalidad batch), o
"tiempo real". En la modalidad por lotes se espera a tener un determinado nmero de operaciones, que se
guardan en un fichero, para actualizar el fichero objetivo en una vez. En tiempo real se permite actualizar los
datos del fichero en el instante en que se produce la variacin. La forma de organizacin de un fichero
depender del uso que se le d. Factores determinantes son la memoria necesaria y la velocidad de acceso
a los datos.
3.2. Caractersticas
Las caractersticas fundamentales de un fichero son sus datos, soporte fsico y organizacin. El tipo de
datos que guardar el fichero debe definirse en su etapa de diseo. Los datos se seleccionarn y definirn
adecuadamente. Esta parte es la ms importante debido a las complicaciones que generar en etapas
sucesivas si no se realiza bien.
Una vez realizado el diseo, se seleccionar el soporte fsico de almacenamiento y su organizacin.
Depender del tamao del fichero y de las operaciones ms frecuentes a que se vea sometido. Algunos
parmetros a tener en cuenta a la hora de decidir el soporte y la organizacin ms adecuada para un
fichero, son su tamao, actividad y volatilidad.

109
Tamao. Es la cantidad de memoria necesaria para almacenar el fichero, medida en unidades de
informacin, tpicamente Megabytes o similar. Se puede estimar multiplicando el nmero de registros que
tendr por el tamao medio de cada registro.
Es importante tener una idea del tipo de evolucin que tendr el fichero. Si se puede estimar, podra
medirse el aumento del tamao como el nmero medio de registros aadidos en cada tratamiento. Se suele
expresar como una tasa de crecimiento en % sobre el nmero de registros totales. Estos datos sirven para
estimar la capacidad que debiera tener el soporte fsico utilizado para almacenar el fichero.
Actividad. Es el nmero de registros consultados o modificados. Se expresa en % sobre el nmero de
registros totales. Si se refiere a cada tratamiento del fichero, se denomina tasa de consulta o modificacin.
Si se calcula en un perodo de tiempo, se denomina frecuencia de consulta o modificacin. Es un dato que
puede orientar en la decisin de la organizacin del fichero.
Para comparar los tiempos de acceso a registro empleados deben conocerse datos del soporte fsico, tales
como el tiempo medio de acceso a un registro (TMA) y la tasa de transferencia (VLS). De esta forma, el
tiempo de acceso a registros de forma directa sera el nmero de registros consultados por el TMA y el
tiempo de acceso a registros de forma secuencial sera el tamao dividido entre VLS.
En general, se elegir el modo de acceso que emplee menos tiempo en leer los registros. Por tanto, el
menor de los dos tiempos anteriores calculados ser el que oriente la decisin.
Volatilidad. Es el nmero de registros dados de alta o de baja respecto al nmero total de registros del
fichero, en %. El porcentaje calculado por cada tratamiento del fichero, se denomina tasa de renovacin. Si
se calcula en un perodo de tiempo, frecuencia de renovacin. Si la tasa de renovacin es alta se dice que
el fichero es voltil, en caso contrario se dice que es estable.
En cuanto al tratamiento de ficheros, las instrucciones dependen del lenguaje de programacin. Sin
embargo, como operaciones habituales destacan las de abrir (open), que en algunos lenguajes se diferencia
si es para lectura, escritura, lectura y escritura o ampliacin, cierre (close), lectura (r) y escritura (w).
3.3. Organizaciones
El criterio de clasificacin de ficheros en funcin de su organizacin responde a la forma en que se
distribuyen los datos de los registros sobre el soporte fsico. Suelen distinguirse 3 tipos de organizacin:
secuencial, indexada y aleatoria (o relativa o directa).
Lgicamente, la organizacin condiciona la forma o modo de acceso a los datos. El modo de acceso
bsicamente es secuencial o directo. Por tanto, la mayora de veces, se combinan la organizacin del
fichero con su forma de acceso, distinguiendo las siguientes organizaciones.
3.3.1. Secuencial
Esta organizacin distribuye los registros uno a continuacin de otro en el soporte fsico. Est indicada en
ficheros estables de uso elevado. Aprovecha el soporte al mximo, al no generar fragmentacin, pero
obliga, en principio a leer los registros anteriores a uno dado y no permite insertar nuevos registros entre
dos ya grabados. Deben tener en cuenta el soporte de almacenamiento.
Para tratar un fichero el SO usa un puntero que seala al primer registro al abrir el fichero y se va
desplazando en la misma direccin cada vez que se lee o graba un registro. La estructura del fichero se
completa con un registro de cabecera con informacin sobre el fichero y un registro de marca de fin, EOF
(End Of File), o similar, que identifica el ltimo registro. El registro EOF se graba al crear el fichero y se
desplaza al aadir nuevos registros.
Aunque la organizacin sea secuencial, el modo de acceso
puede presentar variantes para mejorar las prestaciones que
pueden ser usadas con soportes direccionables. Las ms
empleadas son:
Organizacin secuencial indexada. Los registros se graban secuencialmente, pero pueden recuperarse con
acceso directo usando un fichero adicional de ndices con informacin de la posicin de cada registro.
Organizacin secuencial encadenada. Permite ordenar los registros lgicamente, de forma diferente al
orden fsico de grabado, usando campos adicionales con punteros.
3.3.2. Indexada
Los ficheros indexados se basan en el uso de ndices para acceder a un registro sin leer los anteriores.
Permiten acceso secuencial y directo. Los registros deben contar con al menos un campo que lo identifique
nivocamente, el campo clave, que sirve de ndice. Una clave es primaria si el campo clave no contiene
valores duplicados. Un campo clave con valores duplicados es una clave alternativa.

110
El modo de acceso en un fichero indexado puede ser secuencial o directo, como se ha dicho. El acceso
secuencial lee los registros en el orden marcado por el campo clave, independientemente al orden de
grabacin. El acceso directo usa el campo clave del registro a acceder, lo que requiere soportes
direccionables, si no, no podra usarse el acceso directo. Un fichero indexado est formado por:
rea de datos. Contiene los registros en un soporte de almacenamiento directo, en secuencia ascendente,
de acuerdo con los valores de la clave y en pginas o bloques de longitud fija.
rea de ndices. La crea el SO al almacenar datos. Contiene una tabla que asocia claves con direcciones
del rea de datos. Cada entrada est formada por el valor ms alto de la clave de cada grupo de registros y
un puntero con la direccin del primer registro del grupo.
rea de desbordamiento (overflow). Zona de grabacin de registros sin cabida en el rea de datos. Los
nuevos registros se insertan y enlazan con punteros conservando el orden lgico que marca la clave. El
tratamiento de ndices y punteros lo realiza el SO, de forma transparente al usuario.
Existen diferentes formas de tratar ndices, segn el SO o lenguaje de programacin. Las organizaciones de
ndices ms usadas en la prctica son ISAM (Indexed Sequential Access Method) y VSAM (Virtual Storage
Access Method). Cuando el fichero de datos tiene muchos registros puede que el fichero de ndices se haga
demasiado grande y las bsquedas se ralenticen. Para evitarlo se puede recurrir a una jerarqua de ndices.
La indexacin permite acceso directo a registros, evitando fragmentacin y trato secuencial. Es muy usada y
sus principal ventaja es permitir la actualizacin sin crear nuevos ficheros (como en el caso secuencial) y
sus inconvenientes ocupar ms espacio que los ficheros secuenciales y presentar un tiempo de acceso
creciente al crecer el nmero de registros.
3.3.3. Aleatoria, relativa o directa
Esta organizacin independiza el orden de alta de un registro. La posicin de grabacin se genera mediante
una transformacin del campo clave. El espacio se divide en celdas que contienen un nico registro y se
numeran correlativamente permitiendo el acceso directo con la direccin de la celda. Slo se da en soportes
direccionables. Requiere menor tiempo de acceso y se usa cuando el acceso se hace empleando siempre
la misma clave y la velocidad de acceso a un registro es un factor determinante.
Para localizar un registro es necesario conocer la clave. Las tcnicas de direccionamiento se usan para
relacionar el valor de la clave C y la direccin de la celda a acceder, D. La eleccin de una tcnica de
direccionamiento concreta debe cumplir al menos, que sea fcil de aplicar, que genere poca fragmentacin
y que las claves de registros diferentes generen direcciones diferentes.
Cuando 2 o ms claves proporcionan la misma direccin se dice que genera sinnimos o colisiones. Si se
produce hay que solucionar la ambigedad. Para ello se emplean algunos mtodos como una zona de
desbordamiento o bsqueda lineal (o direccionamiento abierto). La bsqueda lineal consiste en almacenar
el registro que colisiona en el primer hueco libre a partir de la direccin que le corresponde, ya ocupada. La
zona de desbordamiento consiste en crear un rea especial del fichero en la que grabar los registros que
colisionan; es el sistema ms empleado.
El uso de ficheros relativos requiere identificar los registros lgicos con un nmero relativo de registro, que
el usuario identificar con el valor de un campo. Para transformar la clave en la direccin del registro hay
tcnicas que se clasifican en direccionamiento directo, asociado y calculado (o hashing o aleatorio).
Dir. Directo. La direccin relativa es la propia clave. El caso ptimo es una clave numrica de rango entre 1
y el tamao en registros del fichero. La clave k conducir a la celda buscada (la k-sima).
Dir. Asociado. Asocia una direccin a cada clave en una tabla. Al aadir registros, las claves se aaden al
final de la tabla. Si la tabla est desordenada, se ralentiza, luego suele mantenerse su orden en MP.
Dir. Calculado (hashing). Usa una funcin resumen que relaciona la clave con el nmero de celda. La
funcin transforma la clave en un nmero entre 1 y el nmero de celdas. El problema son las colisiones,
situacin que no se da en las otras tcnicas.
4. ALGORITMOS
Un algoritmo es una secuencia lgica de pasos a seguir en la solucin de un problema. Pueden
implementarse con distintos lenguajes de programacin. Su diseo debe ser metdico: partir de una
situacin inicial, desarrollar un proceso y concluir en uno o varios estados finales. Debe ofrecer los mismos
resultados ante mismas condiciones. Su concepto base es el mismo que el de la programacin.
Un algoritmo presenta las propiedades de preciso (etapas definidas), finito (etapas limitadas), estructurado
(una entrada y una o varias salidas) y eficaz (resuelve un problema). La solucin prctica de un problema
exige un algoritmo (mtodo) y un programa que lo codifique en una mquina. La codificacin se apoya en

111
operandos, operadores, variables e instrucciones. Las instrucciones indican una operacin sobre un dato o
el sistema. Se dividen en declarativas, primitivas y de control.
Las instrucciones declarativas asignan valores a operandos. Las primitivas incluyen instrucciones del
sistema, como las de E/S. Las de control permiten gestionar el desarrollo del proceso. Pueden ser
alternativas o repetitivas. Las alternativas bifurcan el proceso y las repetitivas implementan bucles en
funcin de condiciones.
Por ltimo, se pueden definir subalgoritmos al estilo de subprogramas, subrutinas, mtodos o funciones, que
seran pequeos algoritmos que realizan algn proceso que puede ser identificado funcionalmente y posee
la ventaja de ahorrar cdigo y facilitar la comprensin de la rutina.
Como orientacin en el diseo de algoritmos, pueden utilizarse estrategias como buscar problemas
anlogos al propuesto o generalizaciones del problema, particularizacin a partir de problemas generales,
modificacin (buscar una solucin parecida y adaptarla al problema original), uso de esquemas o la
posibilidad de aadir factores catalizadores que ayuden a encontrar la solucin del problema. Otras
tcnicas tpicas son aplicar superposicin, es decir dividir el problema en partes ms pequeas, fciles de
resolver y encontrar la solucin total como suma de las parciales.
Por su parte, la recursividad aplica el mismo algoritmo sobre s mismo varias veces, de forma que en la
ltima llamada, devuelve una solucin que ser empleada por la penltima llamada, y as, de forma
sucesiva hasta completar la solucin total. En estos casos debe tenerse en cuenta el recorrido del algoritmo.
Existen algoritmos ms sofisticados como los de ensayo y error, evolutivos, voraces o de vuelta atrs. El
diseo final, tambin depender de factores tcitos, como la experiencia del analista o programador.
Las tcnicas descriptivas de algoritmos definen cmo trabaja el algoritmo, detallando pasos y proceso.
Tambin sirven de ayuda en el diseo. Las tcnicas utilizadas habitualmente son seudocdigo y diagramas
de flujo de datos o DFD aplicados a algoritmos, que se llaman ordinogramas o flujogramas. Los
ordinogramas representan algoritmos al detalle. Se estudian en el tema 1 del bloque 3. Una vez definidos y
caracterizados los algoritmos, en relacin a las estructuras de datos, toca clasificarlos.
La clasificacin tpica distingue los tipos de algoritmo de bsqueda y ordenacin. A su vez, los algoritmos de
ordenacin se pueden clasificar en funcin de criterios como el tiempo, lugar y estabilidad. As se
esquematiza en la figura.
Segn el criterio temporal, los algoritmos de ordenacin identifican algoritmos de ordenacin natural, (el
conjunto est ordenado) y no naturales (tardan lo menos posible cuando los datos no estn ordenados).
En funcin del criterio de
estabilidad, los algoritmos de
ordenacin estables mantienen el
orden relativo de los datos con
claves iguales. Los no estables
pueden cambiar el orden de
registros con claves iguales. Los
algoritmos inestables pueden
implementarse para ser estables.
Segn el lugar donde se lleva a
cabo la ordenacin, se distingue
la ordenacin interna o externa,
segn sea en memoria o en
almacenamiento externo. En la
ordenacin interna se distinguen
los algoritmos de seleccin,
insercin y burbuja, segn
algunos textos.
Se ha respetado esta identificacin, aunque estos algoritmos son aplicables a un almacenamiento externo.
4.1. Complejidad
En la prctica hay que tener en cuenta los recursos para que un programa se ejecute eficientemente.
Aunque se consideren otros, los parametros ms crticos son el tiempo y memoria. Para controlarlos se
puede estudiar como una caja negra, y entonces, en funcin del comportamiento ante un problema se
puede acotar los recursos. Es la idea de la complejidad. As, cuando un algoritmo maneja muchos datos o
muchas veces, el coste computacional es un factor crtico de su rendimiento. Para evaluar si el algoritmo es
eficiente, se calcula tericamente el coste del mismo como lmite en el infinito (una cota superior).

112
Luego, la complejidad de un algoritmo no se da en una escala de valores, sino que se da como tendencia.
La idea es no obtener un valor (el 5, por ejemplo), sino una especie de media en que se tienen el mejor
comportamiento, el medio y el peor. En general, referido al tiempo empleado en funcin de un aumento muy
grande de los datos.
Un conjunto de funciones que se comportan asintticamente igual se le denomina rden de complejidad. Se
nota con la letra omega (O) y para cada conjunto se elige una funcin que lo representa, sea f(n). As se
habla del conjunto de funciones "g" del orden de "f(n)", y se notan como g O(f(n)). Esto sirve para agrupar
funciones sin conocer con exactitud su comportamiento. Basta su tendencia expresada como una cota
superior, es decir, una funcin que se comporte peor. Es decir, el tuerto en el pas de los ciegos.
Una definicin matemtica de un conjunto O(f(n)), orden de complejidad, puede definirse como:
O(f(n))= {g: INTEGER REAL+,, k y N0,, para todo N > N0, g(N) <= kf(N)}
Es decir, O(f(n)) es el conjunto de funciones g(n) que crecen menos o igual que f(n). As, todas las g(n)
estn dominadas asintticamente por f(n). Esto implica que n tiende a un nmero grande, N o infinito.
Para dar un orden de complejidad, se escoge la funcin ms sencilla del conjunto. As, se tienen por
ejemplo: O(1) complejidad constante, O(logn) y O(nlog n) logartmica, O(n) lineal, O(n2) cuadrtica, O(na)
polinomial (a > 2), O(an) exponencial (a > 2) o O(n!) factorial.
Lgicamente, si 3 < 5 y 5 < 7, se deriva que 3 < 7 (modus ponendo ponens). Pues si un algoritmo posee
complejidad logartmica, tambin posee complejidad cuadrtica. Pero, para ajustar las ideas, interesa
siempre dar la complejidad ms baja posible.
El problema se plantea as: si un algoritmo se comporta de una manera dada para un nmero de datos n,
cmo se comportar para, por ejemplo, el doble de datos, o el doble de tiempo.
La tabla muestra que para una complejidad logartmica, Complejidad N=100 N=200 T=2h
al duplicar los datos se tardara un cuarto de hora ms.
Pero si se duplica el tiempo, se podran procesar 100 O(log n) 1 hora 1.15 h 10000
veces ms datos. O(n) 1 hora 2h 200
Sin embargo, para una complejidad cuadrtica, el doble O(nlog n) 1 hora 2.30 h 199
de datos dispara el tiempo a 4 horas. En dos horas no
llegara a procesar un 50 % ms de datos. O(n2) 1 hora 4h 141
Esto es lo que pretende medir el concepto de complejidad de un algoritmo. Su clculo se realiza modelando
el comportamiento para el peor caso, por eso no siempre puede ser interesante buscar un algoritmo de baja
complejidad. Si los datos no son voluminosos o algoritmos distintos presentan complejidades similares
podra usarse alguno que, en principio, no fuese el menos complejo, pero tuviese otras propiedades.
Sentencia Pseudocdigo Complejidad
Sentencias sencillas PEDIR datos; LEER datos O(1)
FOR i= 0; i < K; i++ KO(1) = O(1)
HACER O(1)

FOR i= 0; i < N; i++ NO(1) = O(n)


Bucles
HACER O(1)

FOR i= 0; i < N; i++ NNO(1) = O(n2)


FOR j= 0; j < N; j++
HACER O(1)
c=1; 2k >= N => k < log2 N = O(log n)
MIENTRAS (c < N)
HACER O(1); c= 2c;
Procedimientos y FUNCTION Caso constante O(1)
Funciones
SI condicin HACER O(n) Caso peor O(n), mejor O(logn)
SINO HACER O(logn) Media = O(n)+O(logn) / 2 = O(n)

113
Los algoritmos de complejidad O(n) y O(nlog n) son los que muestran un comportamiento ms intuitivo, ya
que a doble de tiempo vienen a procesar el doble de datos.
Los algoritmos de complejidad logartmica son ideales dado que su rendimiento es mejor al incrementar los
datos, no consumiendo el intuitivo doble de tiempo. Los algoritmos de complejidad polinmica tendern a
evitarse. Un algoritmo por encima de complejidad polinmica se dice "intratable" y slo ser aplicable a
problemas muy pequeos. En la tabla anterior se muestran ejemplos de estimacin de complejidad. La
siguiente resume las complejidades de algunos algoritmos que se vern a continuacin.
Algoritmo Mejor Medio Peor Algoritmo Mejor Medio Peor
Secuencial O (n) O (n) O (n) Binaria O (n) O (n) O (n)
2 2 2 2
Seleccin O (n ) O (n ) O (n ) Insercin O (n) O (n ) O (n2)
Burbuja O (n) O (n2) O (n2) Rpida O (nlogn) O (nlogn ) O (nlogn)
Mezcla O (nlogn) O (nlogn) O (nlogn) Montn O (nlogn) O (nlogn) O (nlogn)
4.2. Algoritmos de bsqueda
Un problema de bsqueda consiste en responder a la pregunta de si un elemento existe en un conjunto
dado. En este contexto, el elemento ser un dato y el conjunto una estructura de datos. Los algoritmos de
bsqueda y su eleccin para adaptarse lo mejor posible al problema, tendrn en cuenta la forma en que se
encuentren organizados los datos: si estn ordenados o no, si se puede realizar un acceso aleatorio, etc.
4.2.1. Secuencial
Es el algoritmo de bsqueda ms simple, menos eficiente y con menos precondiciones, ya que no requiere
conocimientos sobre el conjunto de bsqueda ni acceso aleatorio. Compara cada elemento con el valor a
buscar hasta que se encuentra o se termina de leer la estructura. Se pueden considerar dos variantes del
mtodo: con y sin centinela.
El algoritmo de bsqueda sin centinela recorre el array comparando cada elemento con el dato que se est
buscando. La complejidad del algoritmo medida en nmero de iteraciones en el mejor caso ser 1 (el
elemento buscado est en la primera posicin). En el peor caso la complejidad ser el tamao (elemento
buscado en la ltima posicin). El promedio ser la mitad del tamao + 1. El orden de complejidad es lineal
(O (n)). Cada iteracin necesita una suma, dos comparaciones y un AND lgico.
En la bsqueda con centinela, hay que tener la seguridad de que el elemento buscado est en el conjunto,
evitando controlar que se supere el tamao. Para tener esa certeza, se almacena el elemento buscado
(centinela) en la ltima posicin. De esta forma se asegura que se encontrar el elemento buscado,
realizando slo una suma y una nica comparacin (se ahorra una comparacin y un AND).
/* Bsqueda secuencial sin centinela */ /* Bsqueda secuencial con centinela */
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
int main() { int main() {
int basura[100]; int i=0, dato; int basura[101]; int i=0;
printf("Dato a buscar %d\n",dato); printf("Dato a buscar: \n");
scanf(%d,&dato); scanf(%d,&basura[101]);
while ((basura[i]!=dato) && (i<TAM)) { while (basura[i]!=basura[101]){
i++; i++;
if (basura[i]==dato) printf("Dato en %d\n",i); if (basura[i]==basura[101]) printf("Dato %d\n",i);
else printf("Dato no en array"); else printf("Dato no en array");
} /* Fin while */ } /* Fin while */
} /* Fin main */ } /* Fin main */
4.2.2. Binaria o Dicotmica
Es un mtodo eficiente, pero requiere el conjunto de inf=0; sup=vector[n]; encontrado =0;
bsqueda ordenado y disponga de acceso aleatorio.
MIENTRAS dato <= sup:
El algoritmo compara el dato buscado con el elemento

114
central. Segn sea menor o mayor sigue la bsqueda en la
centro = ((sup - inf) / 2) + inf
mitad superior o inferior y repite el proceso. En el caso ms
favorable realiza 1 iteracin. En el ms desfavorable, n/2-1. SI vector[centro] == dato encontrado=1
La complejidad es O(log2 (n)). Para conjuntos de datos
grandes la bsqueda sigue siendo eficiente mientras que la SINO
secuencial se va degradando. SI dato < vec[centro]
En cuanto a algoritmos usados con estructuras dinmicas, sup = centro - 1
para buscar un elemento en un rbol se puede buscar por
profundidad o por niveles. Por profundidad, se recorren los SINO
caminos hasta las hojas. Por niveles, los nodos de cada inf = centro + 1
nivel. Si se posee un rbol binario ordenado, se puede ir
dividiendo la bsqueda a izquierda o derecha. La FIN MIENTRAS
complejidad sera O (log(n)). DEVOLVER encontrado
Los algoritmos de recorrido o bsqueda suelen implementarse con recursividad. Una bsqueda en
profundidad (DFS) permite recorrer los nodos de un grafo o rbol de manera ordenada, no uniforme
siguiendo un camino y expandiendo los nodos de forma recurrente.
La bsqueda en anchura (BFS) recorre el grafo o rbol, comenzando en la raz y explorando los vecinos del
nodo recursivamente hasta recorrer todo el grafo o rbol. Dos algoritmos tpicos muy usados para el clculo
de caminos mnimos son el de Dijkstra y el de Floyd.
El algoritmo Dijkstra explora todos los caminos ms cortos que parten del nodo origen y llevan a todos los
dems nodos. Con los datos de todos los caminos mnimos, el algoritmo se detiene.
El algoritmo de Floyd elige un nodo intermedio de un camino y calcula si la distancia entre origen y destino
es mayor que la distancia entre origen y nodo intermedio ms la distancia entre nodo intermedio y destino.
Si es mayor se asume que la distancia es la suma. Itera n veces siendo n el nmero de nodos y calcula la
distancia mnima, no el camino a seguir.
4.3. Algoritmos de Ordenacin
La ordenacin es el proceso de organizacin de un conjunto de datos segn criterio. Los algoritmos de
ordenacin cambian los datos hasta conseguir su ordenamiento. Para ello usan dos operaciones,
comparacin e intercambio. Entre los numerosos algoritmos de ordenacin, destacan tres, los de seleccin,
insercin y de burbuja.
4.3.1. Seleccin
El algoritmo reserva una zona a la izquierda que comienza vaca y va colocando la estructura ordenada.
La zona derecha est desordenada que al principio contiene la estructura y al final se vaca.
El algoritmo empieza por tomar el menor elemento ALGORITMO SELECCION
de la parte derecha y lo intercambia con el que
PARA i=1 A n HACER
ocupa su posicin en la parte izquierda. En la
primera iteracin se busca el menor elemento y se min=i
intercambia con el que ocupa la posicin 0.
PARA j=i+1 A n HACER
En la segunda, se busca el menor elemento entre la
SI v[ j ] < v[ min ] min = j
posicin 1 y el final y se intercambia con el elemento
en la posicin 1 y as sucesivamente hasta ordenar FIN PARA
toda la estructura.
Intercambiar (v[ i ], v[ min]
En el cuadro se muestra una propuesta de
pseudocdigo. FIN PARA

El nmero de comparaciones que realiza el algoritmo es independiente de la ordenacin inicial. Se realizan


las comparaciones (n-1) la primera vez, (n-2) la segunda y 1 la ltima. El total de comparaciones es (n2-n)/2.
Por tanto el orden de complejidad es cuadrtico, O(n2).
4.3.2. Insercin
El algoritmo, similar al anterior, toma elementos de la parte desordenada para colocarlos en la ordenada.
El primer elemento de la estructura se considera ALGORITMO INSERCION
ordenado y a continuacin se inserta el segundo
PARA i=1 A n HACER
elemento en la posicin correcta (delante o detrs
del primero) dependiendo de si es menor o mayor y aux = v[i]
se repite el proceso n-1 veces. Para colocar el dato

115
en su lugar, se debe encontrar la posicin que le
j = i-1
corresponde en la parte ordenada y hacerle un
hueco para insertarlo. MIENTRAS (v[j] > aux AND j>=0) HACER
Para encontrar la posicin se puede hacer una v[ j+1 ] = v[ j ] ; j = j -1
bsqueda secuencial desde el principio hasta
FIN MIENTRAS
encontrar un elemento mayor que el dado. Para
hacer el hueco hay que desplazar los elementos v[j+1] = aux
pertinentes una posicin a la derecha. A la derecha
se muestra su pseudocdigo. El orden de FIN PARA
complejidad de este algoritmo es O(n2). FIN INSERCION
4.3.3. Burbuja
Se basa en recorrer la estructura comparando pares de ALGORITMO BURBUJA
valores que ocupan posiciones adyacentes. Si ambos datos
PARA i=1 A n HACER
estn desordenados, se intercambian.
PARA j=1 A n HACER
La operacin se repite n-1 veces, siendo n el tamao total.
Su nombre se debe a que el elemento cuyo valor es mayor SI v[ j ] > v[ j+1 ] ENTONCES
sube a la posicin final del array, al igual que las burbujas.
Para ello debe realizar un recorrido paso a paso desde su aux = v[ j ]
posicin inicial hasta la posicin final. La complejidad v[ j ] > v[ j+1]
computacional del algoritmo es O(n2). Su pseudocdigo se
muestra en el cuadro. v [ j+1] = aux

Existe una forma de mejora del algoritmo de la burbuja. Si se FIN SI


tiene en cuenta la posibilidad de que el conjunto est FIN PARA
ordenado en algn paso intermedio. Si el bucle interno no
necesita realizar ningn intercambio en alguna pasada, el FIN PARA
conjunto estar ya ordenado. FIN BURBUJA
En el mejor caso (ya ordenado) realiza tamao-1 comparaciones. En el peor se necesitan las mismas
pasadas que antes y el orden es tamao2. En el caso medio el orden es proporcional a tamao2/2. Su
complejidad en el peor caso es igual al de la burbuja simple, aunque en media es casi 2 veces ms eficiente
(mitad de tiempo para ejecutarse). Estos tres algoritmos son tpicos para estructuras de datos estticas.
El algoritmo Mergesort. Divide de forma recursiva un problema en problemas menores. Su funcionamiento
analiza el caso trivial (2 elementos). Si no es el caso, divide el array en dos que analiza por separado. El
algoritmo se va repitiendo hasta llegar al caso trivial, en que ordena los elementos y va combinando las
ordenaciones parciales hasta obtener el array ordenado. Su complejidad es O(n)=nlog(n).
El algoritmo Quicksort. Es un algoritmo recursivo, pero puede implementarse como iterativo mejorando su
rendimiento. Se considera el algoritmo de ordenacin ms rpido. Trabaja eligiendo un elemento del array,
que har las veces de pivote. El resto de elementos del array se van colocando a un lado u otro del pivote
segn sean mayores o menores que l. Una vez hecho esto, se divide el array en dos partes, el lado
izquierdo y el lado derecho del pivote.
El algoritmo se llama recursivamente pasando como argumentos las dos partes en que se ha dividido el
array hasta llegar a un caso trivial, similar al algoritmo Mergesort. La complejidad del algoritmo en este caso
es O(n)=n log(n). Eligiendo adecuadamente el pivote se optimiza el algoritmo, ya que su eficiencia depende
de la eleccin del pivote; pivotes con valores medios mejoran la eficiencia.
5. FORMATOS DE INFORMACIN Y FICHEROS
Los datos se representan con magnitudes fsicas que codifican un alfabeto numrico. Un alfabeto es un
conjunto de smbolos con los que se representa informacin. Para procesarla un ordenador debe
representar los datos internamente de alguna forma, en un formato.
La representacin interna de los datos que maneja un ordenador no debe coincidir necesariamente con la
representacin de un dato a nivel humano: debe adecuarse a la tecnologa. La traduccin entre alfabetos es
la codificacin y se realiza cuando sea preciso para establecer la comunicacin entre humano y mquina. El
sistema binario usado para representar la informacin, puede seguir distintas codificaciones; estar ms
adaptada al proceso que de los datos. Por ello los formatos de informacin siguen convenios diferentes.
Estos tipos diferentes de codificacin, los formatos, buscan optimizar el proceso de la informacin.
Condicionantes a tener en el formato de la informacin ser la memoria disponible (siempre finita), las
representaciones, en particular numricas y el tamao de buses y registros del sistema.

116
5.1. Instrucciones
Una instruccin es un conjunto de smbolos que el ordenador interpreta para realizar las operaciones de las
que consta un programa. Las instrucciones de un programa en lenguaje de alto nivel o en ensamblador se
dan en forma de texto y el traductor, ya sea un compilador o intrprete, las transformar en instrucciones
mquina, interpretables por el ordenador.
Las instrucciones utilizadas por los ordenadores pueden tener diferentes formatos, pero como se ha
presentado, el formato tpico incluye dos partes, el cdigo de operacin, y el campo de direccin.
El campo CO diferencia las instrucciones entre s. Suele ocupar los bits ms significativos de la instruccin.
Si una instruccin ocupa ms de una palabra, el CO estar en la primera palabra.
El campo de direccin no est presente en todas las instrucciones ya que algunas instrucciones no emplean
datos y en otras se utiliza no para direccionar la memoria, sino que directamente contiene el dato necesario
para operar.
5.2. Caracteres
En la comunicacin mquina hombre, suelen usarse caracteres alfabticos para tratar informacin. A nivel
interno, el ordenador representa el conjunto de caracteres codificando cada uno con un byte, tpicamente.
Las codificaciones ms habituales son:
Cdigo ASCII. (American Standard Code for Information Interchange). Publicado en 1963 por ASA (actual
ANSI), utiliza 8 bits para codificar informacin alfanumrica, de los que utiliza los 7 primeros.
EBCDIC. (Extended Binary Coded Decimal Interchange Code): Usa 8 bits para cada carcter por lo que se
pueden representar 256 caracteres, de los cuales, los 32 primeros son de control. Cada octeto se divide en
2 partes, bits de zona y bits de dgito. Los 128 primeros caracteres son alfanumricos y los 128 restantes
representan caracteres grficos.
UNICODE. Es un estndar internacional del consorcio Unicode. Representa cualquier carcter. SO como
Windows NT y posteriores, Linux, Mac OS X y lenguajes de programacin como Java, Perl y C# lo usan.
5.3. Nmeros
Representar nmeros tiene el problema de ser un conjunto infinito y por tanto, con una memoria limitada, no
se puede representar cualquier nmero, hay que acotar. Utilizando n bits se pueden representar 2n nmeros
distintos. El rango de representacin es el intervalo entre el mayor y el menor nmero representable. La
resolucin de representacin se refiere a la diferencia que existe entre un nmero representable y el
inmediato siguiente.
Para representar nmeros debe tenerse en cuenta el tipo de nmero a representar (enteros, real), el
rango de representacin, la cantidad de nmeros del rango o la memoria necesaria, entre otros.
5.3.1. Enteros
Para representar un nmero entero, se distingue si es positivo o negativo. Si slo se representan enteros
positivos, con n bits se pueden representar de 0 a 2n -1. Para codificar enteros negativos, hay que tener en
cuenta que el intervalo de representacin de enteros positivos debe ser igual al de los negativos y que el
signo y el 0 sean fcilmente detectables y el cdigo resultante permita realizar las operaciones habituales
con una implementacin hw sencillo.
Para ello, se utilizan tres tcnicas: signo y magnitud, complemento A1 (CA1) y complemento A2 (CA2). La
representacin de signo y magnitud consiste en reservar un bit para el signo y el resto para la magnitud.
Tpicamente se usa el 1 para indicar que el nmero es negativo. Presenta el problema de representar el 0
de dos formas y la suma no es tan sencilla. Esta representacin no suele implementarse.
La representacin con CA1 para un nmero positivo usa su CA1 y el complementario del CA1 si el nmero
es negativo. Tambin representa dualmente el 0. La representacin con CA2 con n bits para un nmero
positivo utiliza el CA1 del nmero y para un nmero negativo se usa el CA2, que es el CA1+1. Es ms
costoso de implementar, pero elimina la representacin dual del 0. Es la representacin ms extendida para
los enteros negativos.
Existen tambin otras tcnicas de representacin de enteros, no posicionales, es decir, se crea un nuevo
cdigo para representar cada cifra. Los ms representativos son:
BCD Natural. La codificacin del valor del dgito se expresa con 4 bits. Por tanto desaprovecha 6 smbolos.
Exceso a 3: Cdigo BCD natural que suma 3 a cada dgito.

117
Aiken. Cdigo BCD en que los pesos dentro de
cada grupo de 4 bits son 2, 4, 2, 1 en vez de 8,
4, 2, 1. Es autocomplementario.
Gray. Consiste en diferenciar smbolos
consecutivos en un nico bit de diferencia.
JOHNSON 5 bits. Consiste en incrementar el
nmero de 1s desde la derecha y disminuirlos
paulatinamente por la izquierda segn avanza
la representacin. No es ponderado.
5.3.2. Reales
La representacin de reales puede seguir diversas conveciones. Las ms comunes son punto fijo, donde se
usan una parte de los bits como parte entera y otra parte como decimal; punto flotante, que representa el
nmero en forma exponencial, con mantisa, base y exponente. El exponente usa n bits y la mantisa m; IEEE
754, que es un estndar para representacin en punto flotante de con 32 y 64 bits.
La representacin de 32 bits (simple precisin) usa el primer bit para signo (S), los 8 siguientes representan
el exponente (E) en exceso 127 (C=E+127) y los 23 restantes para la mantisa (M), normalizada como 0,xxx.
La representacin de 64 bits (doble precisin) es similar: usa el primer bit de signo (S), 11 para el exponente
(E) y 52 de mantisa (M):
5.4. Otros
La representacin de otro tipo de datos, como imgenes o sonidos, depender del formato que utilice el
programa que trate la informacin. Formatos ampliamente conocidos de sonido son wav o mp3 y de video,
avi o dvd. En cualquier caso, para el ordenador son bits, que se almacenan en memoria sin ms. La
presentacin de esos datos al usuario requiere un programa que interprete la informacin y la presente en la
forma adecuada.
Destacar, que los bits de informacin que trata el ordenador han debido ser procesados anteriormente, si se
presenta en forma analgica, como es el caso expuesto del sonido y la imagen. Este tratamiento incluye el
muestreo y la cuantificacin. El muestreo consiste en tomar un conjunto amplio de valores finitos de la seal
a digitalizar para poder reconstruirla posteriormente. La cuantificacin es el proceso que asigna valores a
cada muestra. Estos valores se representarn de la manera que imponga la tecnologa de la mquina para
poder ser tratados adecuadamente.

118

You might also like