Mia Computacionii

Embed Size (px)

Citation preview

  • 8/12/2019 Mia Computacionii

    1/70

    ASIGNATURA: COMPUTACIN IICdigo: 324U.C.: 4

    CARRERA: Ingeniera de SistemasCdigo: 236

    SEMESTRE: III

    AUTOR: Lic. Mara Eugenia Mazzei (Especialista decontenido)

    ASESORES: Ing. Judit Carvallo (Coordinadora de la carrera)Lic. Antonio Alfonzo MSC. (Diseador deInstruccin)

    Caracas, Junio 2004

    UNIVERSIDAD NACIONAL ABIERTAVICERRECTORADO ACADMICO

    AREA: INGENIERA / CARRERA: INGENIERA DE SISTEMAS

    MATERIAL INSTRUCCIONAL DE APOYO

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    2/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    2

    Tabla de Contenido

    PginaII. Introduccin 4III. Objetivo delcurso ..

    5

    IV. Contenido . 6

    Mdulo I: Tipos Abstractos de Datos t estructuras lineales dedatos ...

    6

    Objetivo 6Estructura 6Unidad 1 . 7Objetivo . 7

    Contenido . 7Recomendaciones para el estudio del contenido de la Unidad .. 7Ejemplos .. 8Ejercicios y actividades propuestas . 10

    Unidad 2 . 12Objetivo . 12Contenido . 12Recomendaciones para el estudio del contenido de la Unidad .. 12

    Listas . 13Ejemplo . .. 13Ejercicios y actividades propuestas . 16Pilas .. 16Ejemplo . 16Ejercicios y actividades propuestas 19Colas . 20Ejemplo . 20Ejercicios y actividades propuestas . 23

    Mdulo II: Estructuras No lineales de datos . 24

    Objetivo 24Estructura 24Unidad 3 . 25

    Objetivo 25Contenido 25Recomendaciones para el estudio del contenido de la Unidad .. 25Recursividad 26Ejemplo . 26Ejercicios y actividades propuestas . 28Ejercicios de autoevaluacin 28

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    3/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    3

    Respuestas a ejercicios d e autoevaluacin 30rboles .. 31Ejemplo . 33Ejercicios y actividades propuestas . 34Ejercicios de Autoevaluacin 35Respuestas a Ejercicios de Autoevaluacin .. 36

    Unidad 4 .. 39Objetivo . 39Contenido . 39Recomendaciones para el estudio del contenido de la Unidad . 39Grafos 40Ejemplos ... 40Ejercicios y actividades propuestas . 47

    Mdulo III: Mtodos de Ordenacin y Bsqueda . 49

    Objetivo 49Estructura 49Unidad 5 . 50

    Objetivo . 50Contenido . 50Recomendaciones para el estudio del contenido de la Unidad .. 50Mtodos de

    ordenacin ..51

    Ejemplo . 51

    Ejercicios de autoevaluacin 53Respuestas a Ejercicios de autoevaluacin . 55Ejercicios y actividades propuestas . 59

    Unidad 6 . 60Objetivo . 60Contenido . 60Recomendaciones para el estudio del contenido de la Unidad

    .....60

    Mtodos de Bsqueda ... 60Ejemplo . .. 61Ejercicios y actividades propuestas . 65

    Ejercicios de autoevaluacin 65Respuestas a Ejercicios de autoevaluacin 65

    IV. Bibliografa ... 68

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    4/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    4

    II. Introduccin

    El presente material tiene como propsito orientar al estudiante en la utilizacindel libro texto, especficamente en el manejo de los conceptos claves para laasimilacin de los contenidos y en su aplicacin prctica, que es fundamentalpara el logro del objetivo del curso. A travs de l se har nfasis en aquellosaspectos que se consideran significativos para la comprensin y la buena

    utilizacin de las estructuras de datos, bajo el enfoque de tipos abstractos dedatos , as como de los algoritmos que operan sobre ellos, de acuerdo a laspautas establecidas para este curso y tomando como base el uso del libro textoseleccionado. Como se especifica en el Plan de Curso el libro textorecomendado es: Estructuras de Datos: Algoritmos, abstraccin y objetos , deJoyanes L. y Zahonero I., Editorial Mc. Graw Hill. Como texto alternativo serecomienda el siguiente libro:Estructuras de Datos y Algoritmos , de Aho A. V.,Hopcroft J. E. y de Ullman J. D., Addison Wesley Longman.

    El contenido est organizado siguiendo la estructura del curso: Mdulo I (Estructuras Lineales de Datos), Mdulo II (Estructuras No Lineales de Datos) yMdulo III (Mtodos de Ordenacin y de Bsqueda). Cada mdulo comprendedos unidades y en cada unidad se intercalan secciones referentes a losconceptos estudiados, ejemplos que describen situaciones especficas,ejercicios en donde se incluyen interrogantes, llamadas a reflexin,observaciones o aclaraciones que tengan lugar y al final de cada unidad segnse requiera se incluyen algunas referencias a pginas Web .Para el buen uso de este material se recomienda tener a la mano el Plan deCurso de la asignatura y el texto seleccionado; estos dos instrumentosconjuntamente con el Material Instruccional de Apoyo integran esencialmente elpaquete instruccional concebido para facilitar el logro de los objetivos.

    Iconos empleados en el material instruccional

    A lo largo de la lectura de este material encontrar diversos conos, cuyosignificado se explica a continuacin:

    Ampl iacin de conocimientos: Est dirigido al estudiante que deseaprofundizar ms en sus conocimientos en determinado tema.

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    5/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    5

    Atencin: Se prese nta cuando se quiere hacer una aclaratoria, unaadvertencia o una reflexin sobre algn aspecto del contenido.

    " Consul ta en la Web: Indica referencias a pginas Web

    Consulta en otros libros: Se refiere a un llamado a consulta enlibros que no figuran como textos de carcter obligatorio para el curso.

    Ejercicios y actividades propuestas: son ejercicios o actividadessugeridas a manera de prctica sobre algn tema de la unidad.

    Ejercicios de autoevaluacin: Ejercicios que debe realizar elestudiante y posteriormente verificar contra los resultados aqupresentados.

    Ejemplo: Es la exposicin de un caso alusivo al tema en cuestin y suresolucin.

    Recordatorio: Indica algn aspecto a enfatizar, relacionado con losconocimientos adquiridos previamente por el estudiante.

    Los trminos resaltados en letra negrilla, internamente en los prrafos, indicancaractersticas, tipos, operaciones, procedimientos o funciones que son de granimportancia en el mbito tratado. Las porciones de texto que contienencodificaciones en lenguaje de programacin se presentan con sombreado, eneste caso las palabras en negrilla son palabras reservadas del lenguaje. En lascodificaciones se incluyen llamadas cuando se intenta destacar el significado delparmetro, variable o instruccin.

    III. Objetivo del Curso

    Codificar algoritmos con sentido lgico y coherente, utilizando las estructuras dedatos apropiadas, as como los mtodos de clasificacin y bsqueda, aplicados ala resolucin de problemas especficos.

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    6/70

  • 8/12/2019 Mia Computacionii

    7/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    7

    UNIDAD 1

    Tipos Abstractos de Datos Asociados a Estructuras Lineales de Datos .

    Para afianzar lo estudiado en el libro texto, presentaremos algunasrecomendaciones que incluyen un conjunto de actividades cuya realizacin serecomienda hacer antes de proseguir a analizar los ejemplos aqu presentados.

    Objetivo de la Unidad 1

    Elaborar un TAD (Tipo Abstracto de Datos) para representar un dato particular

    Contenido de la Unidad 1: La abstraccin. Modularidad. Tipos abstractos dedatos. Uso de tipos de datos y estructuras de datos fundamentales: cadenas,arreglos simples y multidimensionales, registros y conjuntos, punteros oapuntadores. Orientacin a objetos: conceptos.

    Recomendaciones para el estudio del contenido de la unidad

    Leer los principios fundamentales de la Ingeniera de Software . Losmismos estn dirigidos fundamentalmente hacia la resolucin deproblemas por medio del uso del computador, las herramientas para laresolucin de problemas y el buen diseo de programas.

    Estudiar el concepto de modularidad en el mbito del diseo deprogramas. Una vez ledo el contenido citado, responda lo siguiente:Cules son las ventajas que proporciona la modularidad? Qufacilidades provee el PASCAL en este sentido?

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    8/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    8

    Repasar los tipos de datos del Lenguaje de Programacin PASCAL:integer (nmero entero), char (carcter), real(nmero real), string (cadena de caracteres), array(arreglo unidimensional ymultidimensional), record (registro) y punteros o apuntadores. Determinecmo se especifican cada uno de ellos en PASCAL y cul es sualcance.

    Repasar las definiciones de tipo de dato enumerado y tipo subrango enPASCAL.

    Estudiar los captulos del libro I Abstraccin de datos y objetos yEstructuras de datos dinmicas . Si utiliza el libro II, estudie la seccin

    sobre los tipos abstractos de datos.

    Estudiar las abstracciones, las abstracciones procedimentales y lasabstracciones de los datos. Responda a las siguientes preguntas:Qu son tipos abstractos de datos? Para qu sirven?

    Estudiar los conceptos relativos a la Metodologa Orientada a Objetos.

    A continuacin se presentan algunos ejemplos que permiten ilustrar losconceptos aprendidos.

    Ejemplo 1.1 (tipo de datos)

    Se tienen cadenas de caracteres que se refieren a los nombres de asignaturascuya longitud no excede los 35 caracteres. Qu tipo de dato podemosasociarle para representarlas?

    Podemos declarar estas cadenas en PASCAL, empleando el tipo de datostring, de la siguiente manera:

    TypeNombreAsign = string[35];

    Con las cadenas de caracteres se pueden realizar muchas operaciones comopor ejemplo:

    Concatenar cadenas( pegar cadenas). . Eliminar alguna subcadena de una cadena dada Determinar la longitud de una cadena

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    9/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    9

    Para el ejemplo descrito, dado el caso que la variable M contiene el valor:Introduccion a la Ingenieria de Sistemas , se quiere extraer una subcadena(substring ) de diez caracteres a partir de la posicin 19. En PASCAL se hacede la siguiente manera:

    var M : NombreAsign;begin

    M :=copy(M,19,10) { M = Ingenieria }end .

    La funcin copy, permite extraer la subcadena Ingenieria de la variable tipostring, M.

    Ejemplo 1.2 (tipos abstractos de datos)

    Suponga que se tiene una matriz cuadrada, de nmeros reales. Elabore unTAD para este tipo de dato.

    Consideremos el tipo de dato matriz bidimensional (arreglo bidimensional),sobre la cual podemos definir varias operaciones, como se representa en elsiguiente grfico:

    Figura 1.1

    A continuacin describimos las operaciones sealadas:

    La operacin Suma , acta sobre dos matrices cuadradas y permite obtenerla matriz suma de los elementos de ambas matrices.

    La operacin Producto acta sobre dos matrices cuadradas y permiteobtener la matriz producto de ambas matrices. Al respecto es importante

    Suma

    ProductoProducto porun escalar

    Matriz

    Identidad

    Diagonal de

    la matriz

    Matriz

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    10/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    10

    considerar tambin el caso del producto de matrices que no sean cuadradas,respetando el orden que deben tener las matrices para que sea posibleobtener el producto de ellas.

    La operacin Diagonal de una Matriz, extrae la diagonal de una matrizcuadrada y la coloca en un arreglo.

    La operacin Matriz Identidad, genera una matriz identidad cuadrada (poseeceros en todas las entradas excepto en la diagonal en donde hay unos).

    La operacin Producto por un Escalar l , obtiene la matriz resultante demultiplicar cada elemento de una matriz cuadrada por el valorl .

    AtencinPara un TAD con un comportamiento determinado pueden existirdiferentes implementaciones

    Definiremos el tipo de datos en PASCAL de la siguiente manera:

    constN = 30;

    typematriz = array[1..N,1..N]of real;

    Ahora definiremos la operacinproducto de dos matrices

    procedure Producto(A,B : matriz; var C : matriz);var

    VAL :real;I,J,K :integer ;

    begin

    for I := 1 to Ndo for J := 1 to Ndo begin

    VAL := 0;for K := 1to N do

    VAL := VAL + A[I,K] * B[K,J];C[I,J] := VAL

    end ;end ; { Producto }

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    11/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    11

    Igualmente podemos codificar las dems operaciones, algunas de las cualesactan sobre dos matrices y otras sobre una matriz.

    RecordatorioRecuerde que la clave en la abstraccin de los datos es incluir en

    u nico paquete los datos y el cdigo.

    Ejercicio s y actividades propuestas

    Investigue qu funciones provee el PASCAL para facilitar laimplementacin de las operaciones mencionadas.

    Indique cmo se expresan en PASCAL las variables tipo apuntador. Determine las ventajas de emplear estructuras dinmicas en un

    programa. Precise cules operaciones pueden hacerse con este tipo de

    variables y cmo se implementan en PASCAL. Implemente las operaciones de Suma, Diagonal de una Matriz,

    Matriz Identidad y Producto de una Matriz por un escalar. Puede apreciar la importancia de la modularidad en este ejemplo? Piense en otras operaciones de matrices que podra implementar. Investigue qu son las unidades en PASCAL (units ) Cules son

    las ventajas que proporcionan? Cmo se implementan?

    Ampl iacin de conocimientosInvestigue sobre los lenguajes de programacin Orientados a objetos.Igualmente investigue sobre los lenguajes imperativos y los mixtos.

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    12/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    12

    UNIDAD 2

    Estructuras lineales de datos Para la asimilacin del contenido de esta unidad se sugiere seguir paso a pasolas recomendaciones generales que se exhiben en esta seccin. Es importanterecordar que la realizacin de ejercicios y su implementacin en el lenguaje deprogramacin son de suma importancia para la asimilacin de los contenidos.

    Los temas a estudiar en esta unidad resultan muy intuitivos. Es fcil observar enla vida real, series de objetos enlazados, la formacin de colas: de personas,de trabajos y de objetos en general. Igualmente es frecuente acumular pilas depapeles o documentos, en donde el elemento que est en la cima de lasmismas es el de ms reciente colocacin. Piense en agrupaciones de este tipoy cmo operarlas.

    Objetivo de la Unidad 2

    Codificar en lenguaje de programacin un algoritmo, empleando el TAD ListaEnlazada, Pila o Cola para la resolucin de un problema que requiera elempleo de estructuras lineales de datos.

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    13/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    13

    Contenido: Especificacin formal del TAD Lista. Implementacin del TAD Listacon estructuras dinmicas. Operaciones. Aplicaciones. Listas doblementeenlazadas. Listas circulares.Especificacin formal del TAD Pila. Implementacinde Pilas con Arreglos. Implementacin de Pilas con variables dinmicas.Aplicaciones. Especificacin formal del TAD Cola y Dipolo o Bicola.Implementacin del TAD Cola o Dipolo con estructuras estticas y/o dinmicas.Operaciones. Aplicaciones.

    Recomendaciones para el estudio del contenido de la unidad

    Estudiar en el captulo del libro I: Estructuras de Datos Dinmicas:punteros . Si utiliza el texto II, lea la seccin sobre apuntadores y

    cursores. Realizar los ejercicios que estn en el libro. Cmo se definenestos tipos de datos en PASCAL?

    Estudiar en el libro I, los captulos: Listas enlazadas y Listasdoblemente enlazadas , la estructura LISTA o en el libro II, lassecciones sobre El tipo de datos abstracto LISTA y Realizacin delistas . Si utiliza el texto II, lea las secciones sobre LISTAS yRealizacin de LISTAS. Determine las operaciones que puedendefinirse sobre ellos.

    Estudiar el captulo del libro I titulado: Pilas , la estructura PILA o enel libro II, las secciones relacionadas con PILAS. Determine lasoperaciones que pueden definirse sobre ella.

    Estudiar en el captulo del libro titulado: Colas y colas de prioridades:el TAD COLA , o el libro II, las secciones relacionadas con COLAS,el tipo abstracto de datos Colas, colas de prioridades y dipolos.

    Realizar los ejercicios propuestos en el libro.

    Implementar las soluciones de los problemas resueltos en PASCAL y

    emplear el computador para realizar las pruebas. Es muy importanteemplear el estilo de programacin modular en el desarrollo deprogramas. Elabore sus procedimientos y funciones con parmetrosapropiados, esto facilitar la reusabilidad de los mismos.

    A continuacin se presentan algunos ejemplos que permiten ilustrar losconceptos aprendidos.

    Listas Las listas enlazadas son estructuras dinmicas de datos. Son ejemplos de listas

    lineales enlazadas, conjuntos de elementos que tienen alguna relacin por

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    14/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    14

    ejemplo de distancia, de posicin o una clave con respecto a la cual semantiene un orden determinado.

    Ejemplo 2.1 (listas enlazadas)

    Un vendedor debe visitar a sus clientes, empleando rutas previamentetrazadas por la empresa a la cual pertenece. Existen N rutas. Cada ruta constade un cierto nmero de ciudades. Suponga que cada ruta se almacena en unalista lineal enlazada, de manera que cada nodo tiene un nmero asociado a unaciudad y la distancia en Kilmetros hasta la ciudad siguiente (prximo nodo).Sobre la base de esta informacin, realice lo siguiente:

    Dada una ruta, y una ciudad que est en esa ruta, se desea hallar la distanciaa otra ciudad de la misma ruta, para ello elabore un procedimiento en PASCAL,que reciba como parmetro la direccin de un nodo de la lista (este nodocorresponde a la ciudad en donde est el vendedor) y el cdigo de la ciudad adonde se dirige y determine la distancia en Km. a la ciudad destino. Utilicemanejo dinmico de memoria. Describa la estructura de datos tipo lista msadecuada, considerando que el cdigo de la ciudad es numrico.

    La representacin grfica del tipo de lista enlazada que se adapta a la situacindel agente viajero podra ser la siguiente:

    La naturaleza del problema nos lleva a concebir la estructura de datos aemplear como una lista enlazada circular, lo cual significa que el ltimoelemento est enlazado al primero y el recorrido puede hacerse de maneracircular.Primero que todo representaremos el TAD lista lineal enlazada, como semuestra en el siguiente grfico:

    ck ck-1 c3 c2 c1 . . .45 15 60 20 10

    Figura 2.1

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    15/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    15

    Figura 2.2

    Los procedimientos indicados en la Figura 2.2 son los siguientes:

    Insercin: Consiste en agregar un nuevo nodo a la lista. La insercin normal sehace al final de la lista. Cuando se trata de una insercin ordenada hay que recorrerla y comparar contra la informacin de la clave de

    cada elemento para determinar dnde insertar.Vaca : Es una funcin que determina si la lista est vaca o no.

    Inicio: Inicia una lista, por ejemplo asignndole valores nulos a losapuntadores.

    Eliminacin: Consiste en eliminar un nodo especfico de la lista.

    Bsqueda : Busca informacin en una lista.

    Tanto la insercin como la bsqueda en una lista lineal enlazada implicanque debe recorrerse dicha lista Existen otros procedimientos o funciones que sepodran implementar como Avanza , el cual permitira avanzar al nodo siguientede la lista. Otra funcin que es importante implementar es aquella quedetermina si un elemento est a la cabeza de la lista o es interno y en algunoscasos si se trata del ltimo elemento.

    Definiremos el tipo de datos en PASCAL de la manera siguiente:

    Type tipo_cod = integer;

    Lista LinealEnlazada

    Bsqueda Insercin

    Eliminacin Vaca

    Inicio

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    16/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    16

    tipo_dist = real;

    apunt_nodo = nodo_lista;nodo_lista = record

    codigo : tipo_cod;distancia : tipo_dist;prox_nodo: apunt_nodoend

    Atencin

    Observe la importancia de la correcta seleccin del tipo de dato, en elcaso de la distancia es un nmero real, ya que las cantidades referentesa kilometraje deben expresarse empleando nmeros reales.

    Para hallar la solucin al problema planteado uno de los procedimientos quedebemos implementar es el de bsqueda con clculo de la distancia, cuyocdigo en PASCAL presentamos a continuacin:

    procedure Calcular_Distancia(APREF:apunt_nodo; x: tipo_cod);var

    acum : tipo_dist;YA : boolean;APTAUX : apunt_nodo;

    beginacum := 0;APTAUX := APREF;YA := false;repeat

    acum := acum + APTAUX ^.distancia;APTAUX := APTAUX^.prox_nodo;if (APTAUX ^.codigo = x)then YA := true;

    until(YA)or (APTAUX = APREF);

    if YA then writeln( 'La distancia es ', acum)else writeln( '**No se encontro una ciudad destino con ese codigo*** ')

    end ;

    Ejercicios y actividades propuestas

    Cdi o de la ciudad

    Distancia entre ciudades

    Apuntador al nodo correspondientea la ciudad en donde se encuentrael vendedor

    Acumula la distancia

    Hasta hallar el cdigo dela ciudad

    A untador al rximo nodo

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    17/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    17

    Implemente los procedimientos mencionados para el tipo lista. Compare la operacin en listas lineales enlazadas con respecto a las

    implementadas en estructuras contiguas.

    Pilas

    Ejemplo 2.2 (pilas)

    Se quiere determinar si una cadena de caracteres es PALNDROME. Utilizarpara ello el TAD pila de caracteres.Una palabra es palndromo si se escribe igual al derecho y al revs. Ejemplo lapalabra: ORO es palndromo.

    Antes de resolver el problema planteado, analizaremos el TAD pila.La pila es una estructura de datos que se mantiene y opera bajo la disciplinaLIFO (el primero que entra es el ltimo que sale). Son ejemplos de ellas: unapila de documentos y una pila de platos, en los cuales se agregan y se quitanelementos en la cima de la misma. Las expresiones aritmticas se evalanempleando una pila.En la siguiente figura se representa grficamente una pila:

    Figura 2.3

    Bsicamente se puede asociar a un TAD pila las siguientes operaciones:

    El elemento que segua alque estaba en la cima es lanueva cima de la pila.

    Si eliminamos elelemento que est enla cima.

    Cabeza ocima de lapila

    Nueva cimade la pila

    Pila

    Creacin

    Copiar Pila

    Es_Vaca

    Sacar de laPila Est_Llena

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    18/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    18

    Figura 2.4

    El procedimiento de Creacin generalmente crea una pila vaca, sea que elapuntador a la cima de ella es nulo. La operacin Es Vaca permite determinar si

    la pila est vaca o no. La operacin Est Llena se emplea para determinar si unapila est o no llena, esta funcin es til cuando se tienen pilas limitadas. Laoperacin Meter en la Pila (Push en ingls), inserta un elemento en la pila. Laoperacin Sacar de la Pila (Pop en ingls), extrae el elemento de la cima de lapila. Finalmente la operacinCopiar Pila, reproduce o copia una pila en otra pila.

    Para el ejemplo en cuestin los elementos sern caracteres, as el nodo oelemento de la pila se describe en PASCAL de la siguiente manera:

    Typetipo_palabra = string[20];apunt_nodo_pila = nodo_pila;nodo_pila = record

    CARACTER : char;PROX_NODO : apunt_nodo_pila;

    end;

    A continuacin presentamos el procedimiento que permite meter un elemento enla pila:

    Procedure Meter_En_Pila(var Cima:apunt_nodo_pila; x : char) ;var

    P : apunt_nodo_pila;begin

    P := CrearNodo(x);P^.PROX_NODO := Cima;Cima := P;

    end ;

    Funcin ue asi na una direccin de memoria al nodo

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    19/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    19

    El siguiente procedimiento permite sacar el elemento de la cima de la pila:

    Procedure Sacar_De_La_Pila(var Cima:apunt_nodo_pila;var x : char) ;varTope : apunt_nodo_pila;

    beginx := Cima^.CARACTER;Tope := Cima;Cima :=Tope^.PROX_NODO;dispose( Tope);

    end ;

    Una manera de determinar si una palabra es palndromo, es descomponerla encaracteres, meter cada carcter en la pila y luego vaciar la pila y formar una

    nueva palabra, si ambas son iguales la palabra es palndromo.El procedimiento de descomposicin emplea el descrito previamente para meterelementos en la pila, un ejemplo de l es el siguiente:

    Procedure Descomponer(cadena :tipo_palabra; var A:apunt_nodo_pila );var

    i,L : integer;ch : char;begin

    L := length(cadena);for i := 1 to L dobegin

    ch :=cadena[i];Meter_En_Pila(A,ch)

    end;end ; { Descomponer}

    El procedimiento para determinar si la palabra es palndrome o no es el siguiente:

    Procedure Palindrome(p : tipo_palabra);var

    cadena : tipo_palabra;x : char;begincadena := '';repeat

    Sacar_De_La_Pila(A, x);

    cadena := Concat(cadena,x);

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    20/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    20

    untilPila_Vacia(A);if cadena = palabra then writeln( palabra, ' y ', cadena, ' SON

    PALINDROMES')else writeln( palabra, ' y ', cadena, ' NO SON PALINDROMES');

    end ; {Palindrome}

    Atencin

    Est claro que en el ejemplo presentado se sugiere emplear una pila para queel estudiante se familiarice con las operaciones de una pila. Pudo hacerse slocon operaciones de datos tipo string .

    Ejercicios y actividades propuestas

    Halle otro tipo de solucin al problema planteado, por ejemplo utilice una pilapara copiar la pila original y otra para vaciar la pila original. Al compararelemento a elemento, realizando operaciones de extraccin en ambas pilas, sepuede determinar si una palabra es palndrome.

    Colas

    Las colas son estructuras que se forman y operan bajo la disciplina FIFO (elprimer elemento que entra es el primero que sale). Son ejemplos de colas laslneas de espera en los bancos, supermercados, taquillas de pagos, de boletera,los autolavados, etc.Una abstraccin de la cola es la siguiente:

    Figura 2.5

    Cabeza de la cola Fin de la cola

    Elemento2

    Elemento3

    Elemento4

    Elemento1

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    21/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    21

    Las inserciones se realizan al fin de la cola y las eliminaciones a la cabeza de lacola, por lo tanto se debe mantener dos apuntadores, uno a la cabeza y otro al finde la cola. El siguiente ejemplo ilustra una situacin comn de estructura de colas.

    Ejemplo 2.3 (colas)

    Se requiere manejar una estructura de colas de documentos, con la siguientecaracterstica: se pueden insertar documentos por

    la izquierda o por la derecha. Pero slo se puede retirar documentos por laizquierda, como se muestra en la Figura 2.3.Sobre la base de esta situacin, elabore un procedimiento en PASCAL,

    denominado Insercion_Especial que permita manejar el proceso de insercin eneste tipo de cola, empleando manejo dinmico de memoria. Describa lasestructuras de datos en PASCAL, considerando que de cada documento seregistran los siguientes datos:

    Nombre del Documento Fecha (dd/mm/aa )

    El procedimiento de insercin recibe como parmetros los datos del documento,adems si es de carcter normal o urgente. Segn sea el carcter del documentose realizar la insercin apropiada.

    Al analizar este problema podemos observar que se tratar de una bicola o dipolorestringido a que slo pueden hacerse eliminaciones por un extremo o cabeza dela cola. Hay dos tipos de inserciones: normales al final de la cola y urgentes en la

    cabeza de la cola.

    Retiro por la izquierda

    Insercin por la izquierda(URGENTE)

    Insercin por la derecha(NORMAL)

    Figura 2.6

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    22/70

  • 8/12/2019 Mia Computacionii

    23/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    23

    var apunt : apunt_nodo_cola;

    begin {Insercion_Especial}

    apunt := CrearNodo;if car = 'N' then Insertar_A_La_Derecha(apunt,C,F)else if car = 'U' then insertar_A_La_Izquierda(apunt,C,F)

    else writeln('****Error en caracter del documento****');

    end; {Insercin_Especial}

    Ahora presentaremos el procedimiento de Insercin a la Izquierda:

    procedure Insertar_A_La_Izquierda( var apunt, C, F :apunt_nodo_cola);beginif Cola_Vacia then begin

    C := apunt;F := apunt

    endelsebegin

    apunt^.prox_doc := C;C := apunt;

    end;end; {Insertar_A_La_Izquierda}

    Ejercicios y actividades propuestas

    Implemente los procedimientos mencionados para el tipo bicola o dipolo,

    considerando el ejemplo presentado. Resuelva el problema 2.2 sobre la determinacin de palabraspalndromos empleando una pila y una cola para almacenar loscomponentes de la palabra. Como la operacin de eliminacin en la colatradicional es inversa con respecto a la eliminacin en la pila, al extraerlos caracteres en ambas estructuras se puede comprobar que unapalabra es o no palndrome.

    " Consulta en la red

    Inserta el elemento en la cola vaca

    Inserta en la cola y actualiza elapuntador indicativo de la cabezade la cola

    Funcin que asigna una direccin de memoria al nodo

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    24/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    24

    Para reforzar lo aprendido en la unidad en relacin con los tipos abstractosde datos y estructuras lineales de d atos consulte la siguiente direccinelectrnica:

    http://rinconprog.metropoliglobal.com

    Para repasar las instrucciones de l lenguaje Pascal, consulte lasdirecciones:

    http://rinconprog.metropoliglobal.com http://www.cgrsoftware.com

    MDULO II

    Estructuras no lineales de datos

    En el mdulo anterior se presentaron los tipos abstractos de datos y lasestructuras lineales de datos , y se enfatiz en la importancia de laimplementacin de las listas enlazadas, debido a la flexibilidad de manejo encomparacin con las listas implementadas en estructuras contiguas. Al referirnosa la estructuras tipo lista lo estamos haciendo en el sentido amplio, es decirinvolucrando listas, colas y pilas. La caracterstica fundamental de estasestructuras es que a cada elemento le sigue un nico elemento, esto hace lasoperaciones en ellas muy sencillas pero con la dificultad que se deben realizarrecorridos secuenciales sobre la lista para localizar la informacin deseada.

    Este mdulo trata sobre las estructuras no lineales de datos , en donde cada

    elemento puede tener enlaces con varios elementos, por lo cual el recorrido en

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://%20rinconprog.metropoliglobal.com/http://%20rinconprog.metropoliglobal.com/http://www.cgrsoftware.com/http://www.cgrsoftware.com/http://%20rinconprog.metropoliglobal.com/http://%20rinconprog.metropoliglobal.com/http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    25/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    25

    ellas se hace ms complejo pe ro se puede hacer ms eficiente. Las estructurasde datos que sern motivo de estudio en este mdulo son: los rboles binarios ylos grafos. Adems se tratar la recursividad, como herramienta de granimportancia y utilidad en la programacin.

    Objetivo del Mdulo II:Codificar con sentido lgico y coherente, algoritmos en lenguaje de programacin,empleando TADs y/o estructuras no lineales de datos apropiadas, para resolverproblemas especficos.

    Estructura del Mdulo II

    Unidad 3: La herramienta de la recursividad y estructuras de datos tipo rbol. Unidad 4: La estructura de datos tipo grafo y algoritmos fundamentales.

    UNIDAD 3

    La herramienta de la recursividad y estruc turas de datos tipo rbol

    En relacin con el estudio de esta unidad, se sugiere igualmente seguir lasrecomendaciones indicadas. Paralelamente se recomienda intensificar lasactividades prcticas, utilizando el computador como herramienta para realizarlas pruebas de las abstracciones que Ud. disee.

    Objetivo de la Unidad 3

    Codificar algoritmos en lenguaje de programacin, empleando la estructura derbol y la tcnica adecuada para la resolucin de problemas especficos.

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    26/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    26

    Contenido: Recursividad, Concepto. Utilidad. Algoritmos tpicos. Implementacinde procedimientos recursivos.Concepto de rbol binario. rboles de Expresin. Construccin. Recorrido.Aplicaciones. rbol binario de bsqueda. Operaciones.

    Recomendaciones para el estudio del contenido de la unidad

    Estudiar el captulo del libro I: La herramienta de la recursividad . Siutiliza el texto II, estudie los procedimientos recursivos. Establezca lanocin de recursividad, su importancia y los problemas recursivos.Determine cmo se implementan los procedimientos y las funcionesrecursivas en PASCAL. Examine los ejemplos presentados en el libro.

    Realizar los ejercicios propuestos en el libro.

    Estudiar el captulo del libro I: rboles binarios .Si utiliza el texto IIestudie el captulo sobre el TDA ARBOL y rboles Binarios. Examine losejemplos de rboles binarios de expresin, evaluacin de expresiones,notacin infija a postfija, recorridos en un rbol y rboles de bsqueda.

    Realizar los ejercicios presentados en el libro.

    Implementar en el computador problemas de recursividad

    Implementar en el computador problemas relacionados con rbolesbinarios. Emplear algoritmos recursivos de recorrido de rbol.

    RECURSIVIDAD

    La recursividad es una herramienta muy potente para resolver cierto tipo deproblemas. No todos los problemas pueden ser resueltos de manera recursiva.Uno de los ejemplos tpicos de recursin es la determinacin de los trminos de laserie de Fibonacci y el clculo del factorial de un nmero natural. Unprocedimiento recursivo o una funcin recursiva es aquella que se llama a simisma, pero cuntas veces se auto invoca? Depende del problema, todoprocedimiento o funcin recursiva debe tener una condicin de borde ocondicin de parada, que se puede decir que es cuando el procedimiento toca

    fondo y una llamada a s mismo o llamada recursiva. Cada invocacin a un

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    27/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    27

    procedimiento ocasiona que se guarden los valores de las variables en una pila,esto es debido a que estas llamadas no son atendidas, sino hasta que se producela condicin de parada, que es cuando se asigna el valor establecido y se regresaa resolver las otras llamadas de acuerdo a la disciplina LIFO.Casi todos los algoritmos basados en los esquemas de vuelta atrs y divide yvencers son recursivos.

    Ejemplo 3.1 (recursividad)

    Dados dos nmeros a (nmero entero) y b (nmero natural mayor o igual quecero) se desea determinar ab, empleando una funcin recursiva.Primero que todo elaboraremos la siguiente funcin en PASCAL:

    function potencia (var a :integer; b : integer): integer;begin

    if b = 0 then potencia := 1else potencia:= a * potencia(a, b - 1)

    end ; {potencia}

    En la Figura 3.1, aparece en forma grfica la ejecucin de esta funcin cuando seinvoca. Observe el desencadenamiento de llamadas que provoca la ejecucin dela funcin para a = 3 y b = 4

    Condicin de parada

    Llamada recursiva

    Potencia :=Llamada : Potencia 3,4

    Potencia :=a* Potencia 3,2) Llamada : Potencia 3 3

    Llamada : Potencia 3,2 Potencia :=a* Potencia 3,1)

    Potencia :=a* Potencia 3,0) Llamada : Potencia(3,1)

    Llamada : Potencia 3,0 b= 0Potencia := 1

    Resolucin Potencia(3,0)

    Potencia :=a* Potencia 3,3)

    Potencia :=a* Potencia 3,2)

    Potencia :=a* Potencia 3,1)

    Potencia :=a * 1 = 3 * 1=3

    Resolucin Potencia 3 1

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    28/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    28

    Secuencia de llamadas y resoluciones para el ejemplo dadoFigura 3.1

    El valor obtenido es ab = 81

    Atenc in

    Es de suma importancia determinar el tipo de parmetros (por referencia o porvalor) a pasar en un procedimiento o funcin recursiva. Qu efecto tienenellos ?

    Ejercicios y actividades propuestas

    Potencia :=a* Potencia(3,3)

    Resolucin Potencia(3,4)

    Potencia :=a* Potencia(3,3)

    Potencia :=a* Potencia(3,2)

    Potencia :=a* 3 = 3 * 3 = 9

    Potencia :=a* 9 = 27

    Potencia :=a * 27 = 81

    Resolucin Potencia(3,3)

    Resolucin Potencia(3,2)

    Paso 2 Paso 3 Paso 4

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    29/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    29

    Investigue sobre las ventajas y las desventajas de implementar unprocedimiento recursivo.

    Compare los procedimientos iterativos con los recursivos. Implemente en PASCAL y pruebe algoritmos recursivos. Elabore un procedimiento iterativo, para resolver el problema planteado

    en el ejemplo 3.1, y compare con el aqu presentado. En los cursos de Matemtica se definen las sucesiones recurrentes o

    recursivas empleando una frmula explcita como la siguiente:c1 = 4, c n =2c n-1 , 2 n 8. Elabore una funcin recursiva que halle todos lostrminos de esta sucesin finita.

    Ejercicios de Autoevaluacin

    3.1 La siguiente expresin se denomina fraccin continua:

    1

    3

    2

    1

    0

    1

    1

    1

    1

    nq

    qq

    qq

    +

    ++

    ++

    O

    (1)

    en donde q1,q 2, ,q n son enteros positivos, a los cuales se les denominancocientes incompletos y q0 es un entero no negativo.

    Las fracciones continuas son de gran aplicacin en las matemticas,especialmente en la aproximacin de nmeros irracionales por nmerosracionales. El proceso de conversin de un nmero en una fraccin continua sedenomina desarrollo de este nmero en fraccin continua. Para determinar loscocientes incompletos en este desarrollo de una fraccin a / b, emplearemos elAlgoritmo de Euclides como sigue:

    a = bq0 + r 1 b = r 1q1 + r 2 r 1 = r 2 q 2 + r 3. . . . . . . . . . . . .

    r n-2 = r n-1 q n-1 + r nr n-1 = r n q n

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    30/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    30

    De la primera igualdad se obtiene:

    1

    01

    0

    1

    r bqb

    r qb

    a+=+=

    De la segunda igualdad se deduce:

    2

    1

    1

    1

    2

    1

    1

    1

    r

    r q

    r

    r q

    r b +=+=

    Resultando:

    2

    1

    1

    0 1

    1

    r

    r q

    qba

    ++=

    El proceso contina, si operamos con las siguientes igualdades hasta obtener laexpresin (1).

    Sobre la base de esta informacin elabore un programa en PASCAL, que empleeuna funcin recursiva denominada FRACCION.La funcin calcular el cocienteentre un par de nmeros enteros a,b empleando fracciones continuas como seexpresa en (1) y formar parte de un programa de lectura de pares de nmeros.

    Ampl iacin de conocimientos

    Existen lenguajes de programacin que no soportan la recursividad,

    investigue cules la soportan y cules no.La recursividad es muy til en el campo de la Investigacin de Operaciones,especficamente en el clculo de las funciones de costo o de gananciarecursivas, cuando se resuelven problemas de Programacin Dinmica. LaProgramacin Dinmica consiste en resolver un problema de optimizacin,dividindolo en sub-problemas ms sencillos de resolver, con miras a reducirsu complejidad del problema original. Un ejemplo tpico de la ProgramacinDinmica es la resolucin del problema de la mochila. Existen tambinproblemas que constan de mltiples perodos, para cuya resolucin se aplicala tcnica de la Programacin Dinmica

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    31/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    31

    Investigue en qu consiste el problema y su solucin cuando se aplica laestrategia de vuelta atrs .

    Respuestas a ejercicios de autoevaluacin

    3.1

    Typetipo_cociente = array[1..20] of integer;

    vary : real;

    Procedimiento para calcular los cocientes qi

    Procedure Calcular_Cocientes( a, b : integer; var q:tipo_cociente; var N :integer);varr,i,a1,b1 : integer;

    begini := 1;a1 := a;b1 := b;repeat

    r := a1 mod b1;q[i] := (a1 - r) div b1;a1 := b1;b1 := r;

    i := i + 1;until (r = 0);N := i - 1;

    end ;

    Funcin recursiva Fraccin

    function Fraccion(q : tipo_cociente; var i: integer; N : integer): real;var j : integer;

    beginif (i < N) thenbegin

    j := i + 1;Fraccion:= q[i] + 1/Fraccion(q,j,N)

    endelse Fraccion:= 1/q[N]

    end ;

    Llamada recursiva

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    32/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    32

    La llamada a la function recursiva dentro del programa principal es lasiguiente:

    y := Fraccion(q,i,M);

    Atenc in

    La solucin aqu presentada consiste en un procedimiento iterativo para el clculo

    de los cocientes y una funcin recursiva, que utiliza los cocientes previamentecalculados y enva el ndice del arreglo de los cocientes como parmetro variable.Es posible obtener el valor de la fraccin continua empleando slo recursin?.Intente otro tipo de solucin.

    RBOLES

    En la vida real es frecuente observar representaciones en las que se emplean losrboles, entre ellas estn los sistemas jerrquicos, los organigramas, los rboles

    genealgicos, etc. En computacin los rboles son estructuras no linealesdinmicas de gran utilizacin en la representacin y operacin de datosdeterminados. El estudio de los rboles como estructuras de datos contemplabsicamente los rboles binarios, los rboles binarios balanceados o AVL yrboles multicaminos, entre los cuales estn los rboles B, rboles B+ yfinalmente los rboles generalizados.Los rboles binarios son aquellos en los que cada nodo puede tener a lo sumodos hijos. Los rboles AVL son rboles binarios en los que los procesos deinsercin, bsqueda e informacin son ms eficientes, en ellos se mantiene unbalance o reacomodo de los nodos. Las estructuras mencionadas se almacenan yse operan en memoria, mientras que los rboles multicaminos son aquellos enlos que se requiere emplear almacenamiento auxiliar para su operacin. Losrboles generalizados son rboles cuyos nodos tienen mltiples hijos (tres oms); existen procedimientos para convertirlos en rboles binarios. En esta unidadslo trataremos los rboles binarios.

    A continuacin, se presenta un TAD RBOL, con las operaciones bsicas quecomnmente se emplean para operar con rboles:

    rbol Binar io

    Inicial

    PredecesorInsercin

    Sucesor

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    33/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    33

    Figura 3.2

    Los procedimientos o funciones bsicamente consisten en lo siguiente:

    OPERACIN DESCRIPCIN

    Inicial: Crea un rbol cuya raz es nulaInsercin: Agrega un nuevo nodo al rbolEliminacin: Elimina un nodo del rbol.Bsqueda : Busca informacin en un rbol, bajo un criterioPredecesor : Halla el nodo que precede a un nodo dadoSucesor : Halla el nodo que sigue a un nodo dado

    Ejemplo 3.2 (operacin con rboles)

    Una de las operaciones que se requiere hacer eventualmente con un rbolbinario, es determinar si el rbol contiene un valor y si el mismo est en un nodointerior al rbol o si est en un nodo terminal u hoja. Suponga que se tiene elsiguiente rbol:

    10

    165

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    34/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    34

    Se observa que:El valor 3 est en el rbol y est en un nodo hojaEl valor 5 est en el rbol y est en un nodo interior.El valor 20 no est en el rbol.

    Sobre la base del ejemplo mostrado, elabore un procedimiento en PASCALdenominado Busqueda, tal que dado un rbol binario, cuyos nodos, contienen losiguiente:

    Informacin: un valor entero Apuntador Izquierdo a nodo Apuntador derecho a nodo,

    y la informacinx, se efectuar un recorrido en dicho rbol y en caso que x est en un nodo, imprimir el mensaje de que est y adems si se trata de unnodo interior o de un nodo hoja; en caso contrario proporcionar la informacinapropiada sobre la no existencia de x en el rbol.Solucin: Primero definiremos en PASCAL el nodo tpico de la estructura derbol requerida:

    Typeapunt_arbol = ^nodo_arbol;nodo_arbol = record

    elemento: integer;izq,der: apunt_arbol

    end;

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    35/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    35

    El procedimientoBsqueda , elaborado en PASCAL, es un procedimientorecursivo y se presenta a continuacin:

    Procedure Busqueda(apunt:apunt_arbol;i : integer);begin

    if (apunt nil)thenbegin

    if apunt .elemento = i thenbegin

    writeln('El elemento ' , i, ' esta');Esta := true;if (apunt^.izq = nil) and (apunt .der = nil) then

    writeln('Se trata de una hoja')else

    writeln('Se trata de un nodo interior')endelsebegin

    busqueda( apunt^.izq, i );busqueda( apunt^.der, i );

    end;end;

    end ; {Bsqueda}

    Ejercic ios y actividades prop uestas

    Dado el rbol presentado en la Figura 3.2, determine para cada nodo,cules son los nodos hijos y hermanos. Igualmente determine cules sonlos niveles de dicho rbol y su altura.

    En el ejemplo anterior elabore un procedimiento de insercin. Implementeel algoritmo desarrollado en el computador y realice pruebas con mltiplesdatos.

    Halle otras operaciones que podran asociarse al TAD rbol.

    Ejercicios de Autoevaluacin

    3.2 Dado un rbol binario, no necesariamente completo, que contiene encada nodo esencialmente informacin relativa a sumas de dinero, se deseaelaborar un procedimiento, tal que dada la direccin del nodo raz, obtengala suma de las cantidades existentes en las hojas del rbol.

    Se emplea parainformar si un valorest o no en el rbol

    Llamada recursiva

    Condicin de arada

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    36/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    36

    Suponga el siguiente rbol binario, en donde por razones de simplicidad slomostramos la data completa de las hojas de dicho rbol:

    Al sumar las cantidades contenidas en las hojas, obtenemos el total de: 300,5 +600 + 700,25 +3.550,5 = 5.151,25

    Sobre la base de esta informacin realice lo siguiente:-Construya un procedimiento recursivo o una funcin recursiva en PASCAL,tal que dada la direccin de la raz de un rbol binario, no necesariamentecompleto, recorra el rbol y calcule la suma de las cantidades existentes enlas hojas. El procedimiento o funcin imprimir el resultado.

    -Describa las estructuras de datos empleadas en Pascal, considerando quelos nodos del rbol poseen la siguiente data:

    Info: cadena de caracteres(longitud: 5) Cantidad Apuntador Izquierdo a nodo Apuntador derecho a nodo

    M

    O:Cantidad:3.550,50

    K:Cantidad:700,25

    I:Cantidad:600,00

    A:Cantidad:300,50

    A J

    N

    O

    KI

    H

    Figura

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    37/70

  • 8/12/2019 Mia Computacionii

    38/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    38

    If (hoja^.izq = nil) and(hoja^.der = nil) then Total := hoja .cantidad +Total;

    end; {Totalizar_Hojas}

    beginif Rnil thenbegin

    Recorrer_Arbol(R .izq, AUX);Recorrer_Arbol(R^.der, AUX);Totalizar_Hojas(R, AUX);

    end;end; { Recorrer_Arbol}

    3.2 Funcin Booleana idnticos:

    function Identicos( r1, r2 : apunt_arbol) :boolean ;

    beginif r1 = nil then

    if r2 = nilthen Identicos := trueelse

    else if r2 = nilthen Identicos := falseelse if (r1^.elemento r2^.elemento)then Identicos := false

    elsebegin

    Identicos := Identicos(r1^.izq, r2^.izq);Identicos := Identicos(r1^.der,r2 .der)

    end ;end ; {Identicos }

    3.2 Problema del rbol binario, al que se le suman los contenidos de lashojas.

    Estructura de datos :Type

    tipo_nombre = string[5];tipo_cant = real;apunt_arbol = nodo_arbol;nodo_arbol = record

    info: tipo_nombre;cantidad: tipo_cant;izq,der: apunt_arbolend ;

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    39/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    39

    Procedimiento: el siguiente modelo de procedimiento, recorre el rbol enpreorden y verifica si el nodo visitado es una hoja, en cuyo caso guarda lostotales.

    procedure Recorrer_Arbol(R: apunt_arbol; var AUX : tipo_cant);

    procedure Totalizar_Hojas(hoja:apunt_arbol; var Total : tipo_cant);begin {verifica si se trata de una hoja del arbol}

    If (hoja^.izq = nil) and(hoja .der = nil)then Total := hoja .cantidad +Total;

    end;begin

    if Rnilthen begin

    Recorrer_Arbol(R^.izq, AUX);Recorrer_Arbol(R^.der, AUX);Totalizar_Hojas(R, AUX);

    end;end; { Recorrer_Arbol}

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    40/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    40

    UNIDAD 4La estructura de datos tipo grafo y algoritmos fundamentales.

    Para el estudio de esta unidad, se sugiere, como en las anteriores, seguir lasrecomendaciones indicadas. Igualmente sugerimos continuar con las pruebas delos algoritmos en el computador y su adaptacin a cada situacin.

    Objetivo de la Unidad 4

    Codificar algoritmos en lenguaje de programacin, empleando la estructura degrafo para la resolucin de problemas especficos

    Contenido: Concepto de grafo. Representacin del TAD grafo. Matriz de caminos.Algoritmos fundamentales con grafos. Aplicaciones.

    Recomendaciones para el estudio del contenido de la unidad

    Estudiar en el libro I el captulo del libro Grafos. Representacin yoperaciones , la estructura GRAFO. Si utiliza el texto II, estudie losGRAFOS dirigidos y no dirigidos, representacin.

    Profundizar en su estudio de la representacin Matriz de Adyacencia,Listas de Adyacencia, Matriz de Caminos y Cierre Transitivo.

    Examinar el recorrido de los grafos. Realizar los ejercicios propuestos en este captulo. Implementar los algoritmos relacionados con la estructura GRAFO, en

    lenguaje de programacin. Emplee el paquete de Software para probarestos algoritmos.

    Investigar sobre ejemplos de la vida real que puedan representarsecomo grafos.

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    41/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    41

    GRAFOS

    Es frecuente representar objetos que tienen mltiples relaciones con otros. Losgrafos son abstracciones de estas relaciones y tienen gran aplicabilidad endiversos campos. Los modelos de rutas areas o terrestres, las redes decomunicaciones, los circuitos elctricos, las relaciones entre individuos, sonejemplos, en donde los elementos se representan por puntos y sus relaciones porarcos. Los grafos o grficas son estructuras cuyos nodos pueden poseer mltiplesenlaces. La teora de grafos se inicia con ideas geomtricas muy simples pero degran utilidad para resolver muchos problemas en diferentes campos.

    Ejemplo 4.1 ( representacin en forma de grafo)

    Sea la simplificacin de un plano de una planta industrial (Figura 4. 1). A efectosde estudiar, bien sea el trfico de los productos elaborados y semielaborados odel personal que labora, se podra representar este plano empleando un grafo, elcual simboliza una abstraccin de la planta industrial, como se muestra en laFigura 4.2

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    42/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    42

    DISEO DE UNA PLANTA INDUSTRIAL

    PLANTA 2

    RECICLADO

    PLANTA 3 ALMACN 2

    ALMACN 1

    PLANTA 1

    DESECHOS

    Figura 4.1

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    43/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    43

    Seguidamente se representa un TAD GRAFO, con las siguientes operaciones:

    A1

    P3

    P1

    P2 A2

    D

    R

    Fi ura 4.2

    Grafo

    Insertar Arco

    Es Adyacente

    Eliminar ArcoEliminarVrtice

    InsertarVrtice

    Recorrido

    Figura 4.3

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    44/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    44

    Los procedimientos o funciones bsicamente consisten en lo siguiente:

    OPERACIN DESCRIPCIN

    Insertar Arco Agrega un vrtice al grafoEliminar Arco Elimina un arco del grafoEs Adyacente Determina si dos arcos son o no adyacentesInsertar Vrtice Agrega un vrticeEliminar Vrtice Elimina un vrtice del grafo

    Recorrido Recorre el grafo.

    Como se indica en el libro, el recorrido de un grafo podr ser enanchura y enprofundidad.

    Ejemplo 4.2 ( solucin de un problema empleando la estructura grafos)

    El departamento de una empresa consta de N empleados que denotaremos: E 1,E2,...,EN, algunos de los cuales pueden influir sobre los otros en la toma dedecisiones relacionadas con sus funciones en la empresa. Es posible que ocurraque Ei influye sobre E j y viceversa, por supuesto nunca ocurrir que cualquier Ei influya sobre si mismo. Tambin se ha analizado la denominada influencia de retapas, la cual consiste en lo siguiente: E i tiene una influencia de r etapas sobre E j,si existe una trayectoria de longitud r de Ei hasta E j. Estas relaciones tambin nospermiten determinar cules son los lderes del equipo de los N empleados.

    Para resolver este problema primero debemos definir las estructuras de datos aemplear. En este caso podemos representar las relaciones entre los N empleados,utilizando una matriz de adyacencia A, cuyos elementos son unos y ceros, de la

    siguiente manera:si Ei R Ej entonces a ij = 1si Ei R Ej entonces a ij = 0

    en donde R representa la relacin influye sobre

    Sobre la base de esta situacin, elabore un programa en PASCAL, que en formamodular y estructurada permita resolver lo siguiente:Dada una matriz de Adyacencia que representa la relacin descrita, para un equipode N empleados, determine lo siguiente:

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    45/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    45

    La influencia transitiva, la cual consiste en lo siguiente:

    Una influencia es transitiva si: dados tres empleados Ei, E j y Ek, se cumple losiguiente: si Ei influye sobre E j y E j influye sobre Ek, entonces E i influye sobre Ek.

    La influencia en r etapas de Ei sobre E j, dados r y un par de empleados E i y E j .

    Solucin:

    Descripcin de la matriz en PASCAL:

    Type Cero_uno = 0..1;

    Matriz_Booleana = array [1..N,1..N] of Cero_Unovar

    RELACION : Matriz_Booleana;

    Los elementos de la matriz, igualmente pudieron definirse del tipo booleano,es decir con valores VERDADERO y FALSO.

    procedure CrearMatriz (var A : Matriz_Booleana);{Crea una matriz NxN de ceros y unos }var

    i,j : integer;aleat : real;

    beginfor i := 1 to N do

    for j := 1 to N dobegin

    Randomize;aleat := random (100) ;if aleat

  • 8/12/2019 Mia Computacionii

    46/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    46

    {Esto debe hacerse ya que la relac in no debe ser reflexiva }var

    i : integer ;begin

    for i := 1 to Ndo if A[i,i] = 1then A[i,i] := 0;

    end ;

    Matriz de Adyacenci a

    La matriz de Adyacencia la representacin de los arcos que forman el grafo,suponiendo que los nodos o vrtices pueden representarse con nmeros

    ordinales. Para el caso de un grafo de N vrtices, la matriz de Adyacencia tieneNxN elementos, aij,

    Una matriz de adyacencia, para cuatro empleados, creada con estosprocedimientos podra ser como la que se muestra a continuacin:

    =

    0111

    1010

    1001

    0110

    A

    Procedimiento para determinar la influencia transitiva.

    procedure DeterminarTransitividad(A : Matriz_Booleana);var

    i,j,k : integer;ch : char;

    beginch :='S';while (ch 'N') dobegin

    repeat {Lectura y validacion de datos}writeln('Tipee 3 numeros enteros menores que N, cada uno en una linea');readln(i,j,k);

    until not Error (i,j,k);if (A[i,j] = 1)and (A[j,k] = 1)then

    writeln( 'La relacion es transitiva ')else writeln( 'La relacion no es transitiva ');

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    47/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    47

    writeln( 'Elige otra terna?, S / N ');readln(ch);

    end ;end ;

    La funcin Error permite verificar la validez de la data introducida.

    Procedimiento para determinar la influencia en r etapas:

    El procedimiento diseado utiliza el conceptode Cierre Transit ivo o Clausuraprocedure Determinar_Influencia( A : Matriz_Booleana);

    { Determina si existe influencia en r etapas de un individuo}{ sobre otro. Determina la matriz de Clausura Transitiva }var

    i,j,r : integer;ERROR : boolean;M,P : Matriz_Booleana;ch : char;

    beginwhile (ch 'N') do

    beginrepeat {Lectura y Validacion de datos}

    writeln('Tipee 2 num. enteros menores que N y un entero r, cada uno enuna

    linea');readln(i,j,r);

    until not(Error(i,j,r);M := A;

    for i := 1 to r- 1 dobeginProducto(M,A,P);

    M := P;end ;if (A[i,j] = 1) then

    writeln( 'Existe influencia en ', r,' etapas ' )else writeln( 'No existe influencia en ', r,' etapas ' );writeln( 'Elige otra terna?, S/N ');readln(ch);

    end ;

    Producto de r-1 matrices

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    48/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    48

    end ;

    La matriz obtenida es la que representa la influencia en r etapas. Si a ij = 1,

    entonces existe una influencia de r etapas del empleado i sobre el empleado j.

    Ejercic ios y actividades propuestas

    En el ejemplo determine cul o cules son los lderes del equipo. Elabore unprocedimiento o funcin que determine el lder del grupo.

    Determine la ventaja de emplear Listas de Adyacencias en lugar de matrices.

    Ampl iac in de conocimientos

    En el campo de la Investigacin de Operaciones existen muchos problemascuya resolucin se facilita empleando el enfoque de grafos. Son muycomunes el problema de la ruta ms corta, el problema del flujo mximo y elproblema del costo mnimo. Si desea ampliar ms sus conocimientos alrespecto, investigue sobre los algoritmos de Dijkstra, Floyd y Prim &Kruskal.

    Un concepto que tiene gran aplicacin en este campo es el de OrdenacinTopolgica. Existen algoritmos para resolver problemas en donde serequiera aplicar este concepto, por ejemplo cuando se tiene una matrizcurricular de una carrera y se necesita hallar los prerequisitos de un curso (o prelaciones). Investigue sobre los algoritmos apropiados para hallarsoluciones empleando este concepto.

    Existen clases de problemas que no tienen solucin a travs de algoritmoseficientes. La teora de la NP - completitud ha sido desarrollada paraofrecer respuestas y estudiar estas situaciones; a travs de ella se hapodido demostrar que aquellos problemas difciles, para los cuales no

    existen algoritmos eficientes para resolverlos, son equivalentes entre s.Por lo tanto si se pudiera desarrollar un algoritmo para resolver unproblema de esta clase, se estara en capacidad de desarrollar unalgoritmo eficiente para algn problema de la misma clase. Investigue sobrela teora de la NP- Completitud.

    El problema de la Coloracin de Mapas ha sido objeto de estudio porparte de los matemticos por varias dcadas. El mismo consiste en asignarcolores a un mapa, disponiendo del menor nmero de colores, de maneratal que a dos pases o regiones contiguas no se les asigne el mismo color.El medio de representacin empleado para simbolizar el mapa es un grafo.En general el problema de colorear un grafo arbitrario con el menor nmero

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    49/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    49

    de colores posibles es u n problema NP - completo. Investigue sobre lasaplicaciones que tiene la coloracin de mapas.

    " Consulta en la redPara reforzar lo aprendido en la unidad en relacin con las estructuras nolineales de datos y recursividad consulte las siguientes direccioneselectrnicas:

    http://rinconprog.metropoliglobal.com http://faea.uncoma.edu.ar

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://%20rinconprog.metropoliglobal.com/http://%20rinconprog.metropoliglobal.com/http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    50/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    50

    MDULO III Mtodo s de ordenacin y bsqueda

    Este mdulo trata sobre los diferentes mtodos empleados para ordenar gruposde datos y para buscar informacin en ellos. El proceso de ordenar consiste enreorganizar una coleccin de elementos en una secuencia especfica, siguiendo

    un mtodo. Los mtodos de ordenacin interna son aquellos que almacenan datosen memoria, los cuales desaparecen una vez concluida la ejecucin del programa.Estos mtodos analizados podrn ser de utilidad para operar sobre archivos, queresiden en medios de almacenamiento auxiliar, en este caso se trata deordenacin externa. La ordenacin externa se emplea generalmente cuando elconjunto de datos es muy grande para que el proceso pueda ser ejecutado en lamemoria. En este mdulo trataremos slo los mtodos de ordenacin interna. Losmtodos de bsqueda estn diseados para buscar informacin en conjuntos dedatos ordenados como arreglos ( arrays ), rboles de bsqueda o archivos.Igualmente existen mtodos de bsqueda internos y externos.Al finalizar el estudio de ambas unidades, se sugiere prestar atencin a lasactividades de ampliacin, que estn dirigidas fundamentalmente al tema deAnlisis de Algoritmos. Este tema es de gran inters en el campo de laComputacin, debido a que a travs del mismo se enfoca cmo analizar laeficiencia de algoritmos, empleando tcnicas matemticas.

    Objetivo del Mdulo III

    Codificar con sentido lgico y coherente, algoritmos en lenguaje de programacin,para resolver problemas especficos de Ordenacin y Bsqueda.

    El Mdulo III consta de dos unidades:

    Unidad 5: Mtodos de Ordenacin

    Unidad 6: Mtodos de Bsqueda

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    51/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    51

    UNIDAD 5Mtodos de Ordenacin

    Para el estudio de esta unidad, se sugiere, como en las anteriores, seguir lasrecomendaciones indicadas. Es importante implementar y probar los algoritmos,en trminos de su efectividad y eficiencia.

    Objetivo de la Unidad 5

    Codificar algoritmos de Ordenacin en lenguaje de programacin, para laresolucin de problemas especficos.

    Contenido: Ordenacin. Algoritmo de Burbuja. Algoritmo de Insercin. AlgoritmoShell . Algoritmo Quicksort . AlgoritmoHeapsor t. Otros.

    Recomendaciones para el estudio del contenido de la unidad

    Estudiar en el captulo del libro I, titulado Ordenacin, bsqueda ymezcla todas las secciones relacionadas con la ordenacin. Si utiliza eltexto II estudie el captulo sobre Clasificacin. Profundice su estudio en lossiguientes algoritmos: Ordenacin por Burbuja, Ordenacin por Seleccin,Ordenacin por Insercin, Ordenacin Rpida(Quicksort ), Ordenacin porMezcla(Mergesort ), Ordenacin por Montculos (Heapsort ), OrdenacinBinsort y Ordenacin Radix-sort .

    Realizar los ejercicios propuestos en el libro. Implemente algoritmos enlenguaje de programacin. Emplee el paquete de Software para probarestos algoritmos.

    Realizar comparaciones de los algoritmos de ordenamiento estudiados entrmino de su eficiencia.

    Recordatorio Recuerde implementar sus programas empleando el estilo de

    programacin modular en el desarrollo de programas. Elabore susprocedimientos y funciones con parmetros apropiados, esto facilitar la

    reusabilidad de los mismos.

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    52/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    52

    Mtodos de ordenacin

    Uno de los procesos ms utilizados cuando se opera con grupos de elementos en elcomputador es la ordenacin de los mismos de acuerdo a una clave.Constantemente requerimos ordenar ascendentemente o descendentemente unconjunto de elementos tales como directorios telefnicos, lista de estudiantes, de

    empleados, de clientes, de libros, etc., con el propsito de presentar la informacinorganizada. El estudio de los mtodos fundamentales de ordenacin proporcionadestrezas en la elaboracin de los algoritmos que pretenden resolver situacionesespecficas.

    Ejemplo 5.1 (ordenacin rpida)

    Sea un arreglo nmeros enteros (de dimensin M), obtenidos por generacin

    aleatoria, se desea ordenarlo empleando el Mtodo de Ordenacin Rpida(Quicksort)

    Presentaremos el algoritmo codificado en Pascal

    Programa principal

    beginwriteln('Escriba numero de elementos del arreglo');readln(N);if (N M)then ERRORelse begin

    writeln(' ARREGLO ORIGINAL');Generar_Arreglo(A,N);Imprimir_Arreglo(A,N);Quicksort(A,N);writeln(' ARREGLO ORDENADO');Imprimir_Arreglo(A, N);

    end ;end.

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    53/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    53

    Seguidamente presentaremos un e squema de los procedimientos utilizados y sucodificacin en PASCAL:

    Procedimiento para generar un arreglo con nmeros enteros obtenidos demanera aleatoria:

    Procedure Generar_Arreglo( var X : tipo_arreglo; N:integer );var

    I : integer;

    beginrandomize;for I := 1 to N do

    X[I] := random(1000)end ; { Generar_Arreglo}

    Procedimiento de ordenamiento, empleando el Quicksor t u Ordenacin Rpida:

    procedure Quicksort(var A : tipo_arreglo; N :integer );

    procedure Dividir(Primero, Ultimo: integer);varI,J, Centro : integer ;

    Procedure Intercambiar( var x,y : integer);var

    aux : integer ;begin

    aux := x;

    x := y;

    Genera un nmero aleatorio 0 y 1000 y lo coloca en unarreglo

    Intercambia dos valores

    Halla el elemento en laposicin central de unconjunto de datos parareordenar los elementosinternos del con unto

    Programa Principal

    Imprimir ArregloGenerar Arreglo Ordenar Arreglo

    Figura 5.1

    Dividir Intercambiar

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    54/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    54

    y := auxend ; {Intercambiar}

    beginI:= Primero;J := Ultimo;Centro := A[(Primero + Ultimo) div 2];repeat

    While A[I] < Centrodo I := I + 1;While A[J] > Centrodo J := J - 1;if I J;if Primero < J

    then Dividir(Primero, J);if I < Ultimo

    then Dividir(I, Ultimo)end ; {Dividir}

    beginDividir(1,N);

    end ; { Quicksort }(fuente: LibroEstructura de Datos: Algoritmos, abstraccin y objetos , Joyanes yZahonero)

    Procedimiento para imprimir el arreglo:

    Procedure Imprimir_Arreglo( N : integer);var

    I : integer;begin

    for I := 1 to N do write (X[I],' ');

    writeln;end ; { Imprimir_Arreglo}

    Ejercicios de Autoevaluacin

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    55/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    55

    5.1 Construya dos arreglos de 100 elementos enteros, cada uno, entre los valores 0y 500 que representan las claves de archivos, empleando una funcin aleatoria quepermita generar nmeros aleatorios dentro del intervalo mencionado. Ordene ambosarreglos y luego obtenga un arreglo final producto de la intercalacin de las clavesde ambos arreglos, en donde no existan claves repetidas.

    Ejemplo:

    Sean los siguientes conjuntos de datos:

    Al intercalar ambos arreglos ordenados obtenemos el arreglo:

    Se observa que el elemento con la clave igual a 11 est en ambos conjuntos

    Para realizar el ordenamiento utilice los siguientes mtodos:

    7 11 15 21 25 35 46 66 79 91 A:

    B:

    9 11 18 20 45 68 75 84 90

    7 9 11 15 18 20 21 25 35 45

    46 66 68 75 79 84 90 91

    C:

    7 152125 3546 667991

    B: 9 1118 2045 68 7584 90

    11

    A:

    B:

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    56/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    56

    a- Mtodo de Ordenacin por seleccin directa. En este caso, se obtendr unnuevo arreglo ordenado.

    b- Mtodo del Arbol. En este caso se obtendr un nuevo rbol ordenado.

    Sobre la base de esta informacin, elabore un programa en PASCAL que generelos arreglos de claves en forma aleatoria de acuerdo a las especificaciones dadas yrealice el ordenamiento por ambos mtodos y finalmente la intercalacin. Elprograma debe imprimir los datos antes y despus del ordenamiento para ambasestructuras de datos (arreglo y rbol). Adems imprimir los datos ordenadosdespus del proceso de intercalacin para ambas estructuras de datos.

    Respuestas a Ejercicios de Autoevaluacin

    5.1

    En esta situacin, como se exige emplear un algoritmo especfico, se ordenarcada conjunto de datos en forma separada y luego se unirn ambos conjuntos,formando un nuevo conjunto de datos que ser ordenado.

    a) Mtodo de Ordenacin por seleccin directa

    Tipos de datos definidos:

    constMAX_NUM = 1000;

    typetipo_arreglo = array[1..MAX_NUM] of integer;

    Procedure OrdenarSeleccion( Lim: integer;var T : tipo_arreglo);var

    J, Mayor : integer;

    Function IndMayor (ultimo: integer; var T : tipo_arreglo): integer;var

    Indmax,ind : 1..MAX_NUM;begin

    Indmax := 1;for ind := 2 to ultimodo if T[ind] > T[Indmax]

    then Indmax := ind;IndMayor := Indmax

    end ; {IndMayor}

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    57/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    57

    procedure Intercambiar( var i,j : integer);var

    aux : integer;begin

    aux := T[i];T[i] := T[j];T[j] := aux

    end; {Intercambiar}

    beginfor J := Lim downto 2 dobegin

    Mayor := IndMayor(J,T);

    Intercambiar(Mayor,J)end;end; {OrdenarSeleccion}

    (fuente: LibroEstructura de Datos: Algoritmos, abstraccin y objetos , Joyanes yZahonero)

    El procedimiento de generacin de un arreglo de nmeros aleatorios es idntico alelaborado para el ejemplo 5.1

    Procedimiento para unir los dos conjuntos de claves:

    Procedure Unir_Arreglos(N : integer; X,Y : tipo_arreglo; var Z : tipo_arreglo);var i : integer ;begin

    for i := 1 to N do Z[i] := X[i];for i := N + 1to 2*N do Z[i] := Y[i- N];

    end ; {UnirArreglos}

    Procedimiento de Impresin:

    Procedure Imprimir_Arreglo( X : tipo_arreglo; N : integer; ch : char);var

    i : integer;begin

    writeln(ch);for i := 1 to N do

    write (X[i],' ');writeln;

    end ; { Imprimir_Arreglo}

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    58/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    58

    Programa princ ipal:

    beginwriteln('Escriba numero de elementos del arreglo');readln(N);if (N MAX_NUM)then ERRORelse begin

    Generar_Arreglo(X,N);writeln('ARREGLO ORIGINAL ');Imprimir_Arreglo(X, N, 'X');Generar_Arreglo(Y,N);Imprimir_Arreglo(Y, N,'Y');OrdenarSeleccion(N, X);

    writeln('ARREGLO ORDENADO');Imprimir_Arreglo(X, N, 'X');OrdenarSeleccion(N, Y);writeln('ARREGLO ORDENADO');Imprimir_Arreglo(Y, N, 'Y');Unir_Arreglos(N, X,Y, Z);writeln('ARREGLO UNION DE AMBOS');Imprimir_Arreglo(Z, 2*N, 'Z');OrdenarSeleccion(2*N, Z);writeln('ARREGLO UNION ORDENADO');Imprimir_Arreglo(Z, 2*N, 'Z');

    end ;end .

    a) Mtodo de Ordenacin por ArbolesSe incluye el procedimiento para realizar la insercin ordenada de unconjunto de datos obtenidos de manera aleatoria, en un rbol binario. Elprocedimiento para generar los elementos es el mismo que se present enel ejemplo 5.1, adaptado al nuevo tipo de dato.

    Tipos de datos definidos:

    typeapunt_arbol = nodo_arbol;nodo_arbol = record

    elemento: integer ;izq,der: apunt_arbolend ;

    Procedimiento de Creacin de un rbol binario ordenado :

    Procedure Crear_Arbol(n : integer; var raiz : apunt_arbol);

    Impresin de ttulos yLlamadas a

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    59/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    59

    vari : integer ;

    Procedure Insercion_Arbol(var raiz:apunt_arbol; i : integer);varAUX,AUX1,NUEVO : apunt_arbol;

    functionCrearNodo(info: integer) : apunt_arbol;var

    apunt: apunt_arbol;begin

    new(apunt);with apunt ^ do begin

    elemento := info;izq := nil;der := nil

    end ;CrearNodo := apunt;

    end ; {CrearNodo}

    beginAUX1 := raiz;AUX := raiz;while (AUX nil) dobegin

    AUX1 := AUX;if (i

  • 8/12/2019 Mia Computacionii

    60/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    60

    Procedure ImprimirArbol(ap: apunt_arbol);begin

    if (ap nil)thenbeginwrite(ap ^.elemento, ' ');ImprimirArbol(ap^.izq);ImprimirArbol(ap^.der);

    end ;end ; { ImprimirArbol }

    Programa Principal:begin {programa principal}

    CrearNodoRaiz(raiz1);CrearNodoRaiz(raiz2);writeln('Procedimiento de Creacion de un arbol');writeln('Tipee nmero de elementos del arbol');readln(numero);Crear_Arbol(numero, raiz1);writeln('Arbol 1 ordenado ');ImprimirArbol(raiz1);Crear_Arbol(numero, raiz2);writeln;writeln('Arbol 2 ordenado ');ImprimirArbol(raiz2);

    end .

    El procedimiento Generar_Elemento , es similar a los empleados anteriormentepara obtener elementos dentro de un rango, de manera aleatoria.

    Como hacemos inserciones ordenadas en el rbol, para intercalar las claves de losdos rboles, se debe implementar un procedimiento de recorrido de un rbol,similar al procedimiento de Impresin, que podra hacer el recorrido al rbol 2 delproblema, y un procedimiento de insercin de las claves en el rbol 1( idntico alprocedimiento Insercin_Arbol, implementado). El resultado es el conjunto de todaslas claves ordenadas en el rbol 1.

    Ejercicios y actividades propuestas

    Recorre un rbol en preorden eimprime el nodo visitado

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    61/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    61

    En el ejercicio de autoevaluacin 5.1, considere que los Conjuntos dedatos son de diferentes tamaos. Cmo modificara los algoritmos paraconsiderar esta condicin?. En el Mtodo de Ordenacin por rbolesimplementado, los datos se insertan en el rbol de manera ordenada. Afin de saber en qu orden se generan los mismos, agregue la impresinantes de su insercin en el rbol.

    Igualmente en el ejercicio de autoevaluacin 5.1, implemente el Mtodode Ordenacin por Mezcla y analice las ventajas en esta situacin.

    UNIDAD 6Mtodos de Bsqueda

    El contenido de esta unidad se complementa con el de la unidad anterior. Unavez que los datos han sido ordenados, siguiendo lo aprendido en la Unidad 5, se

    requiere localizar datos en el conjunto ordenado. Para el estudio de estaunidad, se sugiere, como en la unidad anterior, seguir las recomendacionesindicadas. Es importante implementar y probar los algoritmos, en trminos de suefectividad y eficiencia.

    Objetivo de la Unidad 6Codificar algoritmos de Bsqueda en lenguaje de programacin, para la resolucinde problemas especficos.

    Contenido: Bsqueda. Bsqueda Lineal. Bsqueda Binaria. Hashing . Funcin deHashing.

    Recomendaciones para el estudio del contenido de la unidad

    Estudiar en el captulo del libro I titulado Ordenacin, bsqueda y mezcla , todaslas secciones relacionadas con la bsqueda y en el captulo del libro I tituladoTratamiento de Archivos de Datos lo referente a Hashing. Si utiliza el texto II,

    http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22http://www.pdfcomplete.com/cms/hppl/tabid/108/Default.aspx?r=q8b3uige22
  • 8/12/2019 Mia Computacionii

    62/70

    Computacin II 324 / 2004

    Mara E. Mazzei

    62

    estudie la seccin del libro sobre rboles binarios de bsqueda, Mtodos deDispersin o Hashing .

    Realizar comparaciones de los algoritmos estudiados en trmino de su eficiencia. Realizar los ejercicios propuestos en el libro. Implemente los algoritmos enlenguaje de programacin. Emplee el paquete de Software para probar estosalgoritmos.

    Mtodos de bsqueda

    Cuando disponemos de un conjunto de elementos ordenados, en muchas ocasionesnecesitamos localizar alguno de ellos, por ejemplo buscar un nmero de cdula deidentidad de una persona, dentro de una lista ordenada para conocer el nombreasociado u otros datos. La bsqueda se hace ms fcil si el conjunto de datos estordenado, un ejemplo de ello es la bsqueda de un nombre en el directorio

    telefnico de una ciudad, con el fin de hallar el nmero de telfono y/o la direccindel solicitado; si el directorio no estuviese ordenado por apellido, sera muy difcilhallar la informacin requerida. El estudio de los algoritmos que conforman estaunidad resultan igualmente fciles de comprender, debido a la similitud que existeentre ellos y la realidad. Los mtodos de bsqueda se han desarrollado con el fin dehacer eficiente la recuperacin de la informacin.

    Ejemplo 6.1 (bsqueda: dispersin o hashing )

    Para incluir una lista de N referencias de publicaciones en un libro se requiere

    ordenarla, alfabticamente. Cada rengln consta de lo siguiente:Llave: Nmero entero entre [1, 298]

    Apellido y sig las del nombre delautor(es)

    30 caracteres

    Nombre del artculo: 60 caracteresNombre de la Revista: 40 caracteresVolumen: Nmero entero

    Ao: 6 caracteres encerrados entre parntesisNmero de pginas : 5 caracteres

    Sobre la base de esta informacin, desarrolle un algoritmo en forma estructurada ymodular, que permita buscar