Define algoritmo como un conjunto ordenado y finito de operaciones que permite
hallar la solucin de un problema. Mtodo y notacin en las distintas frmulas del clculo. El algoritmo constituye un mtodo para resolver un problema mediante una secuencia de pasos a seguir. Dicha secuencia puede ser expresada en forma de diagrama de flujo con el fin de seguirlo de una forma ms sencilla. De acuerdo con el concepto anterior, el algoritmo podra estar incluido en la definicin de programa de ordenador de la Ley de Propiedad Intelectual (TRLPI), al referirse a ste como toda secuencia de instrucciones o indicaciones destinadas a ser utilizadas, directa o indirectamente, en un sistema informtico para realizar una funcin o una tarea o para obtener un resultado determinado, cualquiera que fuere su forma de expresin y fijacin. Un algoritmo es un mtodo para resolver un problema. Aunque la popularizacin del trmino ha Ilegado con el advenimiento de la era informtica, algoritmo proviene de Mohammed al-KhoWirizmi, matemtico persa que vivi durante el siglo IX y alcanz gran reputacin por el enunciado de las reglas paso a paso para sumar, restar, multiplicar y dividir nmeros decimales; la traduccin al latn del apellido en la palabra algorismus deriv posteriormente en algoritmo. Euclides, el gran matemtico griego(del siglo IV a.c.) que invent un mtodo para encontrar el mximo comn divisor de dos nmeros, seconsidera con Al-Khowirizmi el otro gran padre de la algoritmia (ciencia que trata de los algoritmos) Los pasos para la resolucin de un problema son: Diseo del algoritmo que describe la secuencia ordenada de pasos -sin ambigedades- que conducen a la solucin de un problema dado. (Andisis del problema y desarrollo del algoritmo.) Expresar el algoritmo como un programa en un lenguaje de programacin adecuado. (Fase decodificacin.) Ejecucin y validacin del programa por la computadora En cada problema el algoritmo se puede expresar en un lenguaje diferente de programacin y ejecutarse en una computadora distinta; sin embargo, el algoritmo ser siempre el mismo Las caractersticas fundamentales que debe cumplir todo algoritmo son:
Un algoritmo debe ser preciso e indicar el orden de realizacin de cada paso. Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo Un algoritmo debe ser finito. Si se sigue un algoritmo, se debe terminar en algn momento; o sea, debe tener un nmero finito de pasos La definicin de un algoritmo debe describir tres partes: Entrada, Proceso y Salida. En el algoritmo de receta de cocina citado anteriormente se tendr: Entrada: ingredientes y utensilios empleados. Proceso: elaboracin de la receta en la cocina. Salida: terminacin del plato (por ejemplo, cordero). DEFINICION ESTRUCTURA DE DATOS: En programacin, una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulacin. Un dato elemental es la mnima informacin que se tiene en un sistema. Una estructura de datos define la organizacin e interrelacin de stos y un conjunto de operaciones que se pueden realizar sobre ellos. Las operaciones bsicas son: Alta, adicionar un nuevo valor a la estructura. Baja, borrar un valor de la estructura. Bsqueda, encontrar un determinado valor en la estructura para realizar una operacin con este valor, en forma SECUENCIAL o BINARIO (siempre y cuando los datos estn ordenados)... Otras operaciones que se pueden realizar son: Ordenamiento, de los elementos pertenecientes a la estructura. Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas. Cada estructura ofrece ventajas y desventajas en relacin a la simplicidad y eficiencia para la realizacin de cada operacin. De esta forma, la eleccin de la
estructura de datos apropiada para cada problema depende de factores como la frecuencia y el orden en que se realiza cada operacin sobre los datos. Tipos de datos elementales: Binarios Bit Byte Numricos Entero Real Coma fija Coma flotante Alfanumricos Carcter Cadena Booleanos
Datos estructurados: Estructura de Datos es una coleccin de datos que se caracterizan por su organizacin y las operaciones que se definen en ella. Los datos de tipo estndar pueden ser organizados en diferentes estructuras de datos: estticas y dinmicas.
Estructura de Datos estticas: Son aquellas en las que el espacio ocupado en memoria se define en tiempo de compilacin y no puede ser modificado durante la ejecucin del programa. Corresponden a este tipo los arrays y registros
Estructuras de Datos Dinmicas: Son aquellas en las que el espacio ocupado en memoria puede ser modificado en tiempo de ejecucin. Corresponden a este tipo las listas, rboles y grafos. Estas estructuras no son soportadas en todos los lenguajes. La eleccin de la estructura de datos idnea depender de la naturaleza del problema a resolver y, en menor medida, del lenguaje. Las estructuras de datos tienen en comn que un identificador, nombre, puede representar a mltiples datos individuales.
Arrays: Un arreglo (array) es una coleccin de datos del mismo tipo, que se almacenan en posiciones consecutivas de memoria y reciben un nombre comn. Para referirse a un determinado elemento de un array se deber utilizar un ndice, que especifique su posicin relativa en el array. Un arreglo es una coleccin finita, homognea y ordenada de elementos. Finita: Todo arreglo tiene un lmite; es decir, debe determinarse cul ser el nmero mximo de elementos que podrn formar parte del arreglo. Homognea: Todos los elementos del arreglo deben ser del mismo tipo. Ordenada: Se puede determinar cul es el primer elemento, el segundo, el tercero,.... y el n-simo element. Las estructuras de datos y los algoritmos repercuten de forma directa en el almacenamiento y tratamiento de la informacin, tanto desde el punto de vista fsico cmo funcional. Por tanto, el amplsimo mbito de la programacin se construye sbrelos cimientos de dichos algoritmos y estructuras de datos, de ah la sobresaliente importancia de su conocimiento previo. Definicin de variables de estructuras AI igual que a los tipos de datos enumerados, a una estructura se accede utilizando una variable o variables que se deben definir despus de la declaracin de la estructura. Del mismo modo que sucede en otras situaciones, en C existen dos conceptos similares a considerar, declaracin y dejnicin. La diferencia tcnica es la siguiente, una declaracin especifica simplemente el nombre y el formato de la estructura de datos, pero no reserva almacenamiento en memoria; la declaracin especifica un nuevo tipo de dato: struct <nombre-estructura>. Por consiguiente, cada definicin de variable para una estructura dada crea un rea en memoria en donde los datos se almacenan de acuerdo al formato estructurado declarado. Las variables de estructuras se pueden definir de dos formas: 1) listndolas inmediatamente despus de la llave de cierre de la declaracin de la estructura, o 2) listando el tipo de la estructura creado seguida por las variables correspondientes en cualquier lugar del programa antes de utilizarlas. La definicin y declaracin de la estructura colecciones-CD se puede hacer por cualquiera de los dos mtodos
Ejemplo de estructuras anidadas Se desea disear una estructura que contenga informacin de operaciones financieras. Esta estructura debe constar de un nmero de cuenta, una cantidad de dinero, el tipo de operacin (depsito=O, retirada de fondos=l, puesta al da=2 o estado de la cuenta=3) y la fecha y hora en que la operacin se ha realizado. A fin de realizar el acceso correcto a los campos da, mes y ao, as como el tiempo (la hora y minutos) en que se efectu la operacin, se define una estructura fecha y una estructura tiempo. La estructura registro-operacin tiene como miembros una variable (un campo) de tipo fecha, otra variable del tipo tiempo y otras variables para representar los otros campos. La representacin del tipo de operacin se hace con una variable entera, aunque el tipo apropiado es un tipo enumerado (descrito en siguientes apartados). A continuacin se declara estos tipos, se escribe una funcin que lee una operacin financiera y devuelve la operacin leda. La fecha y hora es captada del sistema. #include <stdio.h> #include <dos.h> struct registro-operation entrada(); struct fecha { I; struct tiempo { 1; struct registro-operacion unsigned int mes, dia, anyo; unsigned int horas, minutos; I long numero-cuenta; float cantidad;
int tipo-operacion; struct fecha f; struct tiempo t; 1; int main() { struct registro-operacion w; Estructuras y uniones 305 w = entrada() ; printf ("\n\n OperaciCn realizada\n ") ; print f ( 'I \ t % 1 d\ n" , w . numero-cuen t a ) ; printf("\t%d-%d-%d\n",w.f.dia,w.f.mes,w.f.anyo) ; printf ( "\ t%d: %d\n", w. t. horas, w. t. minutos ) ; return O; 1 struct registro-operacion entrada0 I struct time t; struct date d; struct registro-operacion una; printf ("\nNmero de cuenta: ") ; scanf ("%ld", &una.numero-cuenta) ; puts ("\n\tTipo de operacin") ; puts("Deposito(0)") ; puts ("Retirada de fondos (1) ") ;
puts('Puesta al dia(2)"); puts ("Estado de la cuenta (3 ) I' ) ; scanf ( "%d" , &una. t ipo-operacion) ; /* Fecha y tiempo del sistema */ gettime (&t) ; una.t.horas = t.ti-hour; una.t.minutos = t.timin; getdate (&d) ; una.f.anyo = d.dajear; una.f.mes = d.darnon; una.f.dia = d.da-day; return una;
Estructura de datos es una forma de organizar un conjunto de datos elementales (un dato elemental es la mnima informacin que se tiene en el sistema) con el objetivo de facilitar la manipulacin de estos datos como un todo o individualmente. Una estructura de datos define la organizacin e interrelacionamiento de estos, y un conjunto de operaciones que se pueden realizar sobre l. Las operaciones bsicas son: adicionar un nuevo valor a la estructura. borrar un valor de la estructura. Bsqueda, encontrar un determinado valor en la estructura para realizar una operacin con este valor, en forma SECUENCIAL o BINARIO (siempre y cuando los datos estn ordenados).
CLASIFICACIN DE ESTRUCTURAS DE DATOS ESTRUCTURAS LGICAS DE DATOS Las estructuras de datos son muy importantes en sistemas computacionales. En un programa, cada variable pertenece a alguna estructura de datos explcita o implcitamente definida, la cual determina el conjunto de operaciones vlidas para ella. Cada estructura de datos lgica puede tener varias representaciones fsicas diferentes para sus almacenamientos posibles. ESTRUCTURAS PRIMITIVAS Y SIMPLES (TIPOS DE DATOS PRIMITIVOS) Las estructura de datos primitivas, son las que no estn compuestas por otras estructuras de datos. Ejemplo: los tipos de datos: enteros, booleanos y caracteres. Otras estructuras de datos se pueden construir de una o ms primitivas cmo son las estructuras de datos simples que se construyen a partir de estructuras primitivas y son: cadenas, arreglos y registros. A estas estructuras de datos la respaldan muchos lenguajes de programacin. Tipos de datos simples: Es uno de los conceptos fundamentales de cualquier lenguaje de programacin. Estos definen los mtodos de almacenamiento (cadenas, arreglos y registros) disponibles para representar informacin, junto con la manera en que dicha informacin ha de ser interpretada. Para crear una variable (de un tipo simple primivito) en memoria debe declararse indicando su tipo de variable y su identificador que la identificar de forma nica. TIPOS DE DATOS PRIMITIVAS En todos los lenguajes de programacin se manejan datos primitivas. Los tipos de datos primitivas son los siguientes: *ENTEROS Es un miembro del siguiente conjunto de nmeros: N+1, -n,-2,-1,0,1,2,N+1 Las operaciones fundamentales sobre enteros, son muy conocidas: suma, resta, multiplicacin, divisin, exponenciacin y otras. Todas estas operaciones trabajan sobre un par de nmeros, considerados como operadores binarios. Un operador
unario tiene slo un operando. La negacin, que cambia el signo de un nmero, es un ejemplo de un operador unario.
*BOOLEANO Tambin se le llama lgico. Es un elemento que puede tener uno de dos valores: verdadero o falso. El conjunto de operaciones definidas sobre este tipo de estructuras de datos es diferente del conjunto de operaciones para los enteros. Los tres operadores bolanos bsicos son not, and y or (negacin, conjuncin y disyuncin, respectivamente). La siguiente tabla muestra el resultado de aplicar cada uno de estos operadores para cada valor booleano. Valor del primer operando Valor del segundo operando Operador and or not verdadero verdadero V V F verdadero falso F V F falso verdadero F V V falso falso F F V AND, el resultado es verdadero si los dos son verdadero. Si uno es falso el resultado es falso. OR, el resultado es verdadero si uno de los dos son verdaderos, si los dos son falsos el resultado es falso. NOT, el resultado es verdadero cuando el primero es falso y el segundo verdadero. Si el primero es verdadero y el segundo es falso el resultado es falso. *CARACTERES El carcter es una tercera primitiva, es un elemento tomado de un conjunto de smbolos. Ejemplo {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E.,X,Y,Z,,$%?,..*,+,/,,-} Se incluyen dgitos, caracteres del alfabeto y caracteres especiales. *CADENA Es la que se construye de datos primitivas:
Es una secuencia finita de smbolos tomados de un conjunto de caracteres. El conjunto de caracteres que se emplea para generar cadenas se llama alfabeto. El conjunto de cadenas que se puede derivar del alfabeto A={C,D,1} incluye los siguientes: CD1, CD, DDC, 1D111, y as sucesivamente, incluyendo la cadena nula o vaca. Por lo general, el inicio y final de una cadena lo delimitamos con comillas. Las cadenas son un tipo importante de dato y se usan ampliamente. En primera instancia, las cadenas son el medio bsico para escribir programas y transmitirlos a la computadora. Segundo, son el medio principal de intercambio de informacin con los usuarios. Tercero, las cadenas se usan para almacenas informacin en archivos. Cuarto se usan en lenguajes de programacin para nombres de variables, etiquetas y procedimientos. Y en un contexto ms general, son una va de comunicacin entre los seres humanos. Definamos de manera ms formal a S como cadena: S:=a,b,c Cada cadena tiene un atributo llamado longitud, el cual es el nmero de caracteres en la cadena. ESTRUCTURAS DE ARREGLO Los arreglos son bloques bsicos para la construccin de estructuras de datos ms complejas. Casi todas las estructuras complejas se pueden representar indirectamente mediante arreglos. Un arreglo es un conjunto finito ordenado de elementos homogneos, porque todos son del mismo tipo de dato. Un arreglo puede ser un conjunto de tipo cadena en tanto que otro puede ser de tipo entero. A los arreglo se les llama por lo general tabla. Arreglo Estructura de datos en la que a cada elemento se le asigna un ndice nico. Su representacin matemtica es una matriz. Un array (ms correctamente denominado vector), es un conjunto de variables o registros del mismo tipo que puede estar almacenados en memoria principal o en memoria auxiliar. Los array de 1 dimensin se denominan vectores, los de 2 o ms dimensiones se denominan matrices. La forma de acceder a los elementos del array es directo, es decir que el elemento deseado es obtenido a partir de su ndice. Arreglos unidimensionales
Son conocidos como vector. Un arreglo unidimensional llamado VICTOR, el cual consiste de N elementos se puede representar VICTOR(1) VICTOR (2) VICTOR(I) .. VICTOR (N) Subndices Los subndices o ndices de un elemento designan su posicin en el arreglo; en la notacin que se emplea aqu, un elemento en particular se define con el nombre del arreglo, seguido por el subndice del elemento entre parntesis, es decir, VICTOR(I). Otras posibilidades para designar al elemento del arreglo VICTOR con subndice son: VICTO[I], VICTORI, VICTORI. Arreglo multidimensional Un arreglo de dos dimensiones, es un arreglo en el cual cada elemento es otro arreglo. Un arreglo llamado B, el cual consiste de M elementos, cada uno de los cuales es un arreglo de N elementos se puede representar como una tabla de M por N, como se muestra a continuacin: Ejemplo de un arreglo M por N 1 2 .. .. .. N 2 .. M Es necesario especificar dos subndices para identificar un elemento individual en un arreglo bidimensional. Por convencin, el primer subndice hace referencia al rengln. Elemento B(I,J) en un arreglo 1 2 .. J .. N 2
I B(I,J)
M Un arreglo se puede definir como un arreglo tridimensional, cuadrimensional, N- dimensional. Los conceptos de subndices, rango y nmero de elementos se pueden extender directamente de una y dos dimensiones a arreglos de orden mayor. En general un arreglo N-dimensional requiere que los valores de los N subndices se especifiquen para identificar un elemento en particular del arreglo.
En programacin, un vector, array, arreglo o alineacin es un conjunto o agrupacin de variables del mismo tipo cuyo acceso se realiza por ndices. Los vectores o arrays de dos o ms dimensiones se denominan matrices, que pueden tener tantas dimensiones como se desee; aunque lo correcto es llamarlo arreglo (de memoria) ya que una variable de ms de dos dimensiones, no cumple con las caractersticas matemticas de una matriz numrica. ESTRUCTURAS DE REGISTRO Los registros son los componentes bsicos de los archivos y de las bases de datos. Un registro es una coleccin finita y ordenada de elementos, posiblemente heterogneos, que se tratan como una unidad. Un registro se distingue de un arreglo en el hecho de que todos los elementos de un arreglo deben tener la misma estructura, a diferencia de los elementos componentes del registro que pueden tener diferentes estructuras de datos. Un registro se menciona algunas veces slo como una estructura. Los elementos de un registro son comnmente llamados campos. Un campo es un rea especfica de un registro utilizada para una clase particular de informacin. Formacin de registro Una unidad de informacin deriva, por lo menos, algo de su significado; a partir de sus relaciones con otra informacin. La estructura de datos registro permite que un conjunto de elementos de informacin, lgicamente relacionados, se pueda agrupar explcitamente. Por ejemplo, el campo de tipo cadena llamado TITULO- DE-TAREA, con valor ANALISTA, no proporciona mucha informacin por s mismo. Sin embargo, se proporciona ms informacin cuando el campo TITULO- DE-TAREA se acopla con otros campos lgicamente relacionados, como NUM- EMPLEADO, de tipo cadena con valor 123456789 y TARIFA-PAGO, de tipo decimal con valor 15.93. Estos elementos heterogneos no pueden constituir un
arreglo porque son diferentes estructuras de datos. Sin embargo, se pueden agrupar para constituir un registro de informacin del empleado como se muestra a continuacin: TITULO-DE-TAREA NM-EMPLEADO TARIFA-PAGO ANALISTA 123456789 15.93
Llaves de identificacin Un registro, por lo general, contiene un campo que lo identifica. Un empleado se identifica por ejemplo con su nmero de empleado. El campo que identifica el registro se llama campo llave. La llave de un registro puede ser un elemento bsico o bien uno grupal. Por ejemplo un registro de la clase particular CURSO puede identificarse por el valor de sus campos DEPARTAMENTO, NUMERO Y SECCIN. Archivos Se llama archivo a una coleccin de ocurrencias de registros lgicamente relacionados que se tratan como una unidad. BSQUEDA La bsqueda es el proceso de localizar un registro con valor de llave particular. Una llave puede estar compuesta por uno o ms campos. El valor de la llave puede ser el nico identificador del registro, aunque tambin se pueden permitir valores duplicados. La bsqueda de un elemento dentro de un array es una de las operaciones ms importantes en el procesamiento de la informacin, y permite la recuperacin de datos previamente almacenados. El tipo de bsqueda se puede clasificar como interna o externa, segn el lugar en el que est almacenada la informacin (en memoria o en dispositivos externos). Todos los algoritmos de bsqueda tienen dos finalidades: - Determinar si el elemento buscado se encuentra en el conjunto en el que se busca. - Si el elemento est en el conjunto, hallar la posicin en la que se encuentra.
Bsqueda Secuencial o lineal Un algoritmo de bsqueda es una tcnica para encontrar un registro que tenga algn valor de llave en especial. Llamaremos al valor de la llave, digamos k, el argumento de la bsqueda. La bsqueda termina exitosamente cuando se localiza el registro que contenga la llave k, o termina sin xito, cuando se determina que no aparece ningn registro con la llave k.
Existen muchos algoritmos de bsqueda; la bsqueda secuencial tambin es conocida como bsqueda lineal. Las bsquedas lineales adems de ser ms simples proporcionan una buena forma de empezar la investigacin de bsqueda y ordenamiento. Avanzar al siguiente registro Se encontr el valor. Fin. Lista inicialmente vaca? Comenzar con primer registro El registro solicitado no est en la lista. Fin El valor de la llave del registro es igual al valor Es el fin de la lista?
Bsqueda Binaria La tcnica de bsqueda binaria puede ser aplicada tanto a datos en listas lineales como en rboles binarios de bsqueda. Los prerrequisitos principales para la bsqueda binaria son: la lista debe estar ordenada en un orden especfico de acuerdo al valor de la llave y debe conocerse el nmero de registros. La tcnica de bsqueda binaria slo podr aplicarse si son satisfechos estos dos prerrequisitos. En el desarrollo de programas, existe una fase previa a la escritura del programa, esta es el diseo del algoritmo que conducir a la solucin del problema, en esta fase tambin deber considerarse la estructura de datos que se va a utilizar. El trmino estructura de datos se refiere a la forma en que la informacin esta organizada dentro de un programa. La correcta organizacin de datos puede conducir a algoritmos ms simples y ms eficientes. Estructura de datos: Conjunto de variables agrupadas y organizadas de cierta forma para representar un comportamiento Las estructuras de datos segn su tamao en memoria, se clasifican en: Estructuras de datos estticas: Son aquellas cuyo tamao en memoria es fijo, por ejemplo, los arreglos. Estructuras de datos dinmicas: Son las estructuras que permiten variar su tamao en memoria de acuerdo a las necesidades del ambiente, por ejemplo, listas enlazadas. Estructuras dato mas conocidas Pilas.-En las pilas (tambin conocidas como stacks o FILO first in, last out) lo que queremos es procesar los datos en orden inverso, esto es, primero procesamos los ltimos datos que aadimos y hasta llegar a los iniciales. Una forma fcil de visualizarlo es mediante tortillas: al irlas calentando, se van apilando por lo que las primeras que se calentaron quedan abajo y son las ltimas en ser comidas. La importancia de las pilas es que se utilizan implcitamente en cualquier programa recursivo Colas.- En las colas (tambin conocidas como queues, buffers o FIFO first in, first out) los primeros elementos que entran son los primeros en ser procesados. Esto lo podemos ver en las filas en los bancos: los primeros que se forman son los primeros en ser atendidos
Listas enlazadas.- Una lista es simplemente un arreglo en el cual vamos agregando y sacando datos. En su forma ms sencilla, una lista puede ser un arreglo. Uno de los problemas con los arreglos es que si queremos agregar un dato en medio, tenemos que recorrer todas las casillas que se encuentran a partir de esa posicin un lugar. Esto se soluciona mediante listas enlazadas, en las cuales por cada casilla tenemos dos datos: el valor de la casilla y la posicin de la siguiente casilla. Para agregar o quitar datos, solo tenemos que cambiar cual es la siguiente casilla. Si tenemos adems del siguiente elemento tambin sabemos la posicin del anterior, obtenemos una lista doblemente enlazada. Si hacemos que el ltimo elemento este enlazado con el primero, obtenemos una lista circular.