Estructura y Organización de Datos
October 10, 2022 | Author: Anonymous | Category: N/A
Short Description
Download Estructura y Organización de Datos...
Description
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Estructuras y Organización de Datos Ingeniería en Tecnologías de la Información y Comunicaciones
a)
Competencia general dela asignatura
Identifica, selecciona y aplica eficientemente tipos de datos abstractos, métodos de ordenamiento y búsqueda para la optimización del rendimiento de soluciones de problemas del mundo real. b)
Aportación de la asignatura al perfil profesional
Esta asignatura aporta al perfil del Ingeniero en Tecnología de la Información y Comunicaciones habilidades para las siguientes competencias: Desarrolla e implementa sistemas de información información para la gestión de procesos y apoyo en la toma de decisiones, utilizando metodologías basadas en estándares internacionales. Utiliza tecnologías emergentes y herramientas actuales para atender necesidades acordes acordes al entorno La importancia importancia de la materia radica en que aporta aporta al perfil del egresado el conocimiento, la correcta selección y aplicación de las estructuras de datos en la solución de problemas, así como el determinar la eficiencia de algoritmos que permitan la selección de los mismos con el fin de desarrollar soluciones eficientes. Puesto que que para llevar esta materia es indispensable conocer la programación programación orientada orientada a objetos, esta se encuentra ubicada para ser cursada después de las materias de Fundamentos de Programación y de Programación Orientada a Objetos. pilar fundamental en el análisis, diseño y desarrollo de sistemas de información. Siendo esta asignatura la base fundamental del perfil del egresado y relacionadas con todas aquellas en la implementación de sistemas, se ha tenido a bien estructurarla de tal manera que sirva como complemento de las materias relacionadas con programación de aplicaciones de software.
c)
Relación de la asignatura asignatura con otras del plan de estudios
d)
Programación II Programación WEB Taller de Bases de Datos Todas las asignaturas que involucren programación o manejo de datos. Competencias específicas a desarrollar en la asignatura
1. Identifica las diferentes estructuras estructuras de datos, respecto respecto a su implementación a la solución de problemas 2. Aplica las principales estructuras estructuras de datos lineales en la solución de problemas 3. Aplica las principales estructuras estructuras de datos no lineales en la solución de problemas. 4. Clasifica y aplica té técnicas cnicas para facilitar el ordenamiento, búsqueda búsqueda y recuperación de información en dispositivos de almacenamiento primario y secundario.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES e) f)
Temas (unidades) descritas en el programa de estudios Actividades de aprendizaje a realizar y su respectiva bibliografía
Temas y subtemas 1. Fundamentos de estructura de datos 1.1. Definición. 1.2. Clasificación. 1.3. Estructuras lineales y no lineales. 1.4. Estructuras dinámicas dinámicas y estáticas. estáticas.
2. Estructuras lineales 2.1. Listas 2.2. Pilas estáticas y dinámicas 2.3. Colas estáticas y dinámicas 2.4. Aplicaciones 3. Estructuras no lineales 3.1. Recursividad. 3.2. Árboles. 3.3. Grafos.
4. Métodos de ordenamiento y búsqueda 4.1. Algoritmos de ordenamiento. 4.2. Métodos de búsqueda. búsqueda. 4.3. Recuperación de datos.
Actividades de aprendizaje
Investigar los conceptos fundamentales de las estructuras de datos. Identificar las estructuras de datos lineales y no lineales de acuerdo al problema a resolver. Identificar las estructuras de datos estáticas y dinámicas de acuerdo al problema a resolver. Comprender los conceptos básicos, el funcionamiento y las aplicaciones que tienen las estructuras de datos lineales. Realizar ejercicios implementando estructuras de datos lineales. Agregar al proyecto definido lo aprendido en este tema. Analizar conceptos de estructuras de datos no lineales para comprender el funcionamiento y las aplicaciones que tienen las estructuras de datos no lineales. Realizar ejercicios de conversión de soluciones recursivas a soluciones iterativas y viceversa. Agregar al proyecto definido lo aprendido en este tema. Discutir el uso de los métodos de ordenamiento, búsqueda y recuperación de datos en memoria principal y secundaria. Investigar los diversos algoritmos de los métodos de ordenamiento, búsqueda y recuperación de datos según el tipo de problema que se desea resolver. Aplicar los algoritmos investigados en dos lenguajes orientados a objeto y anotar observaciones. Implementar archivos a la aplicación del proyecto y aplicar métodos de ordenamiento, búsqueda recuperación de datos en memoria principal y secundaria.
Bibliografía Del programa: 1. Joyanes Aguilar, L Luis. uis. Estructura de Datos en Java. Primera edición. edición. Ed. McGraw McGraw Hill. 2007. 2. Lewis, John. Estr Estructura uctura de Datos con JAVA: Diseño de estructuras y algoritmos. Primera edición. Ed. Pearson. 2007.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES 3. Guardati Buemo, Silvia. Estr Estructura uctura de Datos orientada a objetos: Algoritmos con C++. Primera edición. Ed. Pearson. 2007. 4. Allen, Marc. Estructura de Datos con JAVA: Compatible con JAVA 2. Ed. Prentice Prentice Hall. 5. Cairo, Osvaldo Osvaldo.. Estructura Estructura de Datos. Tercera edición. Ed. McGraw Hill; 2006.
Actualizada: 1. Anandhavalli D. Programming & Data Structure Using C. LAP Lambert. 2017 2017 2. 3. 4. g)
Guardati Silvia. Estructuras Estructur Orientada a Objetos con Java.Buemo, Ed. Alfaomega. 2016. as de datos Básicas, Programación Orientada López Takeyas, Brund. Estructuras de datos Orientadas a Objetos. Ed. Alfaomega. 2016. Weiss, Mark Allen. Estructura de Datos En En Java. 4ª edición. Ed. Pearson. 2013. Por tema: Criterios de evaluación • Instrumentos de evaluación-valoración • Evidencias a entregar • Calendarización del trabajo semestral
h)
Evidencia de aprendizaje
Indicadores de Alcance
Unidad
1
1
2
A
B
C
D
E
F
30 pts.
40 pts.
5 pts.
5 pts.
5 pts.
5 pts.
5 pts.
5 pts.
Mapa conceptual 30/Ago/2019 Rúbrica Rúbrica
Resolución problemasde propuestos 06/Sep/2019 Rúbrica Rúbrica
Resumen de la Importancias de las estructuras de datos. Registro de realización realización
Resolución de problemas propuestos 10/Oct/2019 Rúbrica Rúbrica Resolución de problemas propuesto 13/Nov/2019 Rúbrica Rúbrica
2
3
Exposición 2 y 3/Dic/2019 Guía de Observación Observación
4
Constancia de Curso en Línea edX o Google Evidencia de participación participación
Proyecto 10 y11/Oct/2019 Guía de Observación Observación Proyecto 13 y14/Nov/2019 Guía de Observación Observación
Diseñar opciones adicionales al proyecto realización Registro de realización
Participación en clase Registro de Participación Participación
Proyecto 4 y 5/Dic/2019 Guía de Observación Observación
Explica problemas propuestos Guía de Observación
1 2 3 4
Participación en la organización del congreso o como participante Evidencia de participación participación Realizar Exposición con software alternativo a PowerPoint Registro de Realización Realización
Otrass Observacion Otra Observaciones: es: Hora de entrada Asistencia a clase Exámenes
Revisión equitativa
1ª. Oportunidad 2ª. Oportunidad
Solicitud de Amistad a la cuenta de Facebook Arturo López Ponce Solicitar que los agregue al grupo EyOD Ago-Dic 2019 Foto para el Face.
Resolución de problemas adicionales a los problemas propuestos Registro de Realización Realización
Exposición de un tema de tipo ético o ecológico o histórico o político o económico. Guía de Observación Observación
Entregar los trabajos en tiempo y forma Entrega Registro de Entrega
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
1.
F undam undamentos entos de es estructura tructura de datos datos
En la práctica, la mayor parte de información útil no aparece aislada en forma de datos simples, sino que lo hace de forma organizada y estructurada. Los datos de los diccionarios o enciclopedias son colecciones de datos y serian inútiles si no estuvieran organizadas de acuerdo con unas determinadas reglas. Además, bajo esta estructura de organización la información supone ventajas adicionales al facilitar el acceso y el manejo de datos. Como tendremos ocasión de ver, la selección de una estructura de datos frente a otra, a la hora de programar es una decisión importante, ya que ellos influyen decisivamente en el algoritmo que se vaya a utilizar para la resolución del problema. Programación = Estructura de Datos + Algoritmos
1.1.
Definición.
En programación, una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulación. Un dato elemental es la mínima información que se tiene en un sistema.
B it
Acrónimo de Binary digit. (dígito binario). Un bit es un dígito del sistema de numeración binario (0, 1).
Byte
Unidad básica de almacenamiento de información, equivale a ocho bits (octeto).
Nombre
Abrev.
Factor
Tamaño
Kilo
K
210 = 1024
103 = 1000
Mega
M
220 = 1 048 576
106 = 1 000 000
Giga
G
230 = 1 073 741 824
109 = 1 000 000 000
Tera
T
240 = 1 099 511 627 776
1012 = 1 000 000 000 000
Peta
P
250 = 1 125 899 906 842 624
1015 = 1 000 000 000 000 000
Exa
E
260 = 1 152 921 504 606 846 976
1018 = 1 000 000 000 000 000 000
Zetta
Z
270 = 1 180 591 620 717 411 303 424
1021 = 1 000 000 000 000 000 000 000
Yotta
Y
280 = 1 208 925 819 614 629 174 706 176
1024 = 1 000 000 000 000 000 000 000 000
Bronto
B
290 = 1 237 940 039 285 380 274 899 124 224
1027 = 1 000 000 000 000 000 000 000 000 000
Geop
Ge
2100 = 1 267 650 600 228 229 401 496 703 205 376
1030 = 1 000 000 000 000 000 000 000 000 000 000
Carácter Cualquier signo tipográfico. Puede ser una letra, un nú número, mero, un signo de puntuación o un espacio.
Palabra
En el contexto de la informátic informática, a, una palabra es una cadena finita de bits que son manejados como un conjunto por la máquina. Las computadoras modernas
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
normalmente tienen un tamaño de palabra de 16, 32 o 64 bits. Muchos otros tamaños se han utilizado en el pasado, como 8, 9, 12, 18, 24, 36, 39, 40, 48 y 60 bits. Algunas de las primeras computadoras utilizaron una longitud de palabra del tipo decimales en vez de binarios, típicamente teniendo un tamaño de palabra de 10 o 12 dígitos decimales y algunas alg unas otras computadoras no tenían una longitud de palabra fija. 1.2.
Clasificación.
Predefinidos
Enteros Carácter Lógicos
Definidos por el usuario
Enumerados Subrango
Ordinal
byte short int long char boolean
Simple
Estructura de Datos Estructurados o Complejos
Abstractos
No Ordinal
Reales Cronológicos Apuntador, punteros o referencias
Cadenas
String StringBuffer
Arreglos Registros
Arrays ArrayList Vector
Listas Conjuntos
LinkedList
Árboles
JTree
Grafos Archivos
File
float double
abstract class
1.3.
Estructuras lineales y no lineales.
1.4.
Estructuras dinámicas y estáticas.
Evidencia de Aprendizaje: Mapa Conceptual de la Unidad 1
Investigar los conceptos fundamentales de las estructuras de datos e identificar las estructuras de datos lineales, no lineales, estáticas y dinámicas; y elaborar un mapa conceptual. Indicador de Alcance 1.A.- Resumen de la Importancias de las estructuras de datos.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Instituto Tecnológico de Aguascalientes Departamento de Sistemas y Computación Asignatura: Carrera: Grupo:
Estructura y Organización de Datos Ingeniería en Tecnológicas de la Información y Comunicaciones
Hora:
Nombre del alumno: No. Control:
Fecha:
R úbri ca del Ma Mapa pa Conc eptua eptuall de lla a Unidad 1 Instrucciones: Indique con una “X” en la intersección fila - columna las características mínimas que cumple el
proyecto entregado como evidencia, anote los puntos en cada criterio y súmelos. Criterios de desempeño
Excelente
Notable
Bueno
Suficiente
Insuficiente
Presenta una portada con seis de los conceptos del apartado de excelente y sin errores ortográficos.
Presenta una portada con cinco de los conceptos del apartado de excelente y sin errores ortográficos.
Presenta una portada con cuatro de los conceptos del apartado de excelente y sin errores ortográficos.
Presenta un portada con menos de cuatro de los conceptos mostrados en el apartado de excelente o tiene errores ortográficos o No presenta portada.
Portada
Presenta una portada con: 1. Logo del TecNM y del ITA en la parte superior 2. Nombre del Instituto 3. Nombre de la carrera 4. Nombre de la materia y hora 5. Unidad y producto de aprendizaje. 6. Nombre y número de control del estudiante 7. Fecha Sin errores ortográficos
Pts.
5 pts. El mapa está representado: 1. Conceptos se
representan con palabras clave.
4.5 pts.
4 pts.
EL mapa tiene cuatro de los puntos presentados en apartadoexcelente.
EL mapa tiene tres de los puntos presentados en apartadoexcelente.
3.5 pts. EL mapa tiene dos de los puntos presentados en apartado excelente.
0 pts. EL mapa tiene menos de dos de los puntos presentados en apartado excelente.
2. Los conceptos se
Mapa Conceptual
Pts. Mapa Conceptual Pts. Bibliografía Pts. Conclusiones Pts.
Rúbrica
Pts.
organizan en niveles jerárquicos que que van de lo general a lo específico. 3. Se utilizan óvalos o rectángulos para encerrar conceptos. 4. Se utilizan líneas y palabras de enlace para unir conceptos. 5. Se utilizan flechas para señalar las relaciones cruzadas
20 pts. El mapa tiene estructuras de datos: 1. Lineales (tres tipos) 2. No lineales (dos tipos) 3. Estáticas (dos tipos) 4. Dinámicas (tres tipos)
40 pts. Presenta más de cinco obras consultadas de r eferencia, considerando los documentos, material impreso o no impreso utilizando el estilo de referencias APA.
15 pts. Presenta una opinión personal coherente con el trabajo y sin errores ortográficos en más de media cuartilla.
18 pts.
16 pts.
14 pts.
El mapa tiene estructuras de datos: 1. Lineales (dos tipos) 2. No lineales (dos tipos) 3. Estáticas (dos tipos) 4. Dinámicas (tres tipos)
El mapa tiene estructuras de datos: 5. Lineales (dos tipos) 6. No lineales (dos tipos) 7. Estáticas (dos tipos) 8. Dinámicas (dos tipos)
El mapa tiene estructuras de datos: 1. Lineales (un tipo) 2. No lineales (un tipo) 3. Estáticas (un tipo) 4. Dinámicas (un tipo)
36 pts. Presenta cinco obras consultadas de referencia, considerando los documentos, material impreso o no impreso utilizando el estilo de referencias APA.
13.5 pts. Presenta una opinión personal coherente con el trabajo y sin errores ortográficos en media cuartilla.
32 pts. Presenta cuatro obras consultadas de referencia, considerando los documentos, material impreso o no impreso utilizando el estilo de referencias APA.
12 pts. Presenta una opinión personal coherente con el trabajo y sin errores ortográficos en menos de media cuartilla.
28 pts. Presenta tres obras consultadas de referencia o menos, considerando los documentos, material impreso o no impreso.
0 pts. EL mapa tiene menos de tres de los puntos presentados en apartado excelente.
0 pts. No presenta aportaciones personales.
10.5 pts.
0 pts.
Presenta una opinión personal coherente con el trabajo y con a lo menos dos errores ortográficos en menos de media cuartilla.
Presenta una opinión personal y con más de dos errores ortográficos o No presenta aportaciones personales.
15 pts.
13.5 pts.
12 pts.
10.5 pts.
0 pts.
El trabajo tiene impreso la Rúbrica con el llenado de los siguientes rubros: o No. de grupo y hora o Nombre del alumno o Número de control o Fecha de entrega o Nombre del Alumno y Firma
El trabajo tiene impreso la Rúbrica y falta el llenado de uno de los siguientes rubros: o No. de grupo y hora o Nombre del alumno o Número de control o Fecha de entrega o Nombre del Alumno y Firma
El trabajo tiene impreso la Rúbrica y falta el llenado de dos de los siguientes rubros: o No. de grupo y hora o Nombre del alumno o Número de control o Fecha de entrega o Nombre del Alumno y Firma
El trabajo tiene impreso la Rúbrica solo tiene llenado uno o ninguno de los siguientes rubros: o No. de grupo y hora o Nombre del alumno o Número de control o Fecha de entrega o Nombre del Alumno y Firma
No presenta la rúbrica impresa.
5 pts.
4.5 pts.
4 pts.
3.5 pts.
0 pts.
Indicador de alcance A Indicador de alcance F
Resumen de la Importancias de las estructuras de datos Entrega el Mapa Conceptual en la fecha y hora señalada
Calificación Nivel de desempeño mínimo aceptable: 70 pts. NOMBRE Y FIRMA DE CONFORMIDAD DEL ALUMNO:
Retroalimentación
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Tipo de datos en Java Tipo
Tamaño en bits
boolean
1
char byte
16 8
short
16
int
32
long
64
float
32
double
64
Rango de valores true o false Nota: El No. de bits puede variar según la plataforma ‘\u0000’ hasta ‘\uFFFF' Conjunto Unicode de ISO -128 a +127 -27 a 27 – – 1 -32,768 a +32,767 -215 a 215 – – 1 -2,147,483,648 a +2,147,483,647 -231 a 231 – – 1 -9,223,372,036,854,775,808 a +9,223,372,036,854,775,807 – 1 -263 a 263 – Rango negativo: -3.4028234663852886E+38 hasta -1.40129846432481707E-45 Rango positivo: 1.40129846432481707E-45 hasta 3.4028234663852886E+38 Rango negativo: -1.797693134862157E308 hasta -4.94065645841246544E324 Rango positivo: 4.94065645841246544E324 hasta 1.797693134862157E308
Tokens elementos léxico de los programas Existen 5 clase de tokens: identificadores, palabras reservadas, literales, operadores y otros. Identificadores Los identificadores pueden representar variables, constantes, métodos, nombres de archivos, etc. Diagrama de contexto de los identificadores:
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Regla para formar un identificador:
1. 2. 3. 4. 5. 6.
Debe comenzar po porr una letra Después de la 1er. Letra puede contener letras, dígitos o guion de piso No están permitidos los espacios en blanco No deben formar palabras reservadas Java es sensibles a las mayúsculas y minúsculas En Java la longitud de los identificador identificadores es no tiene límite.
A rreg rr eg los
Una de las características de Java es que los temas complejos como punteros o apuntadores lo hacen de una forma sencilla. Las referencias no son más que apuntadores, pero manejados de una forma simplificada. Los arreglos son referencia o apuntadores. Definición. -
Un arreglo (vector o tabla) es una secuencia de objetos del mismo tipo. A los objetos se les llama elementos del arreglo y se enumeran del 0 al n-1, además se almacenan linealmente en posiciones de memoria consecutivas.
Unidimensionales. Tipo [ ]
identificador
;
,
Tipo
identificador [ ]
;
, Donde el Tipo, corresponde al tipo de dato del arreglo, el cual pude ser cualquiera de los 8 básicos de Java o de alguna clase. Los corchetes pueden colocarse de dos formas: o o
Los corchetes colocados después del tipo de dato, esto indica que todos los identificadores son arreglos. Los corchetes colocados después del identificador, indica que solo el identificador que tenga los corchetes es un arreglo.
Identificador: Es el nombre del Arreglo. Ejemplo:
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
int enteros [ ], x, y; float [ ] cal1, cal2, cal3, prom; char [ ] letra1, letra2[ ], letra3;
enteros en enteros en un arreglo unidimensional de tipo int, x y y son variables tipo int. cal1, cal2, cal3 y prom prom son arreglos unidimensionales. letra1 y letra3 son letra3 son arreglos de una dimensión del tipo char y mientras que letra2 letra2 es es un arreglo de arreglos de tipo char (es decir una matriz).
C rea reación ción del a arr rreglo eglo Esto solo está declarando el nombre del arreglo y el tipo de datos que se van a almacenar (a esto se le llama también referencia), para declarar el número de elementos del arreglo, new.. se realiza por medio del operador new Ejemplo: float [ ] CalificacionFinal; CalificacionFinal = new float [45]; La primera sentencia declara un arreglo unidimensional llamado CalificacionFinal que maneja del 0 al datos 44). tipo float. La segunda sentencia declara que tendrá 45 elementos (enumerado Otra forma de hacer la declaración del arreglo, así como de sus elementos es: float [ ] CalificacionFinal = new float [45];
Acc A cces eso o a los elementos del arr arreg eglo lo Para almacenar datos en un arreglo basta con poner el nombre del arreglo, el subíndice (encerrado entre corchetes), el símbolo igual, la expresión que se quiere almacenar y finalmente punto y coma. CalificacionFinal[5] = 70; System.out.println(“La Calificación Final 6 es: “ + CalificacionFinal[5]) CalificacionFinal[5]);;
Otra forma de introducir datos en un arreglo es inicializándolo desde la declaración. int enteros[] = {5, 4, 9 ,8, 7, 6, 2, 1, 3, 0}; Tamaño de los arreglos (length) Java considera cada arreglo un objeto, debido a ello se pude conocer el número de campo length. elementos de un arreglo por medio del campo length.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
E jercicio 1.1 1.1:: El siguiente ejemplo declara un arreglo de 10 elementos llamado enteros, y
le asigna datos desde la declaración. Posteriormente por medio de un ciclo for recorre los elementos del arreglo y determina el elemento menor y mayor; al final los imprime.
Bidimensionales. Los arreglos vistos anteriormente se conocen como arreglos unidimensionales y se caracterizan por tener un solo subíndice. Los arreglos multidimensionales son aquellos que tienen más de una dimensión y, en consecuencia, más de un índice. Los arreglos más usuales son los de dos dimensiones, conocidos como matrices. Un arreglo de dos dimensiones equivale a una tabla con filas y columnas: n
0 0 1 2 3 4
m
1
2
3
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Declaración de arreglos bidimensionales (matriz)
Tipo [ ] [ ]
identificador
;
,
Tipo
identificador [ ] [ ]
;
, Ejemplo: int puestos[ ][ ], x, y;
puestos en un arreglo de dos dimensiones del tipo int, puestos en int , x y y son variables tipo int.
float [ ][ ] cal1, cal2, cal3, prom;
cal1, cal2, cal3 y prom son prom son arreglos bidimensionales.
C rea reación ción del a arr rreglo eglo Como ya se mencionó estas declaraciones son simplemente referencias, para declarar el new.. número de elementos del arreglo se hace por medio del operador new Ejemplo: float [ ][ ] Calificaciones; Calificaciones = new float [45][4]; La primera sentencia declara un arreglo Calificaciones que manejara tipos de datos float. La segunda sentencia crea el arreglo e indica que manejara 45 filas (del 0 al 44) y 4 columnas (del 0 al 3). Otra forma de hacer la declaración y creación del arreglo es: float [ ][ ] Calificaciones = new float [45][3];
Inici Ini cial alizaci ización ón de los elem elementos entos del a arr rreg eglo lo Al igual que los arreglos unidimens unidimensionales, ionales, los arreglos multidimensio multidimensionales nales se pueden inicializar desde la declaración. Ejemplo: int tabla1[ ][ ] = { {51, 24, 33}, {32, 23, 45} }; Se define una matriz de 2 filas por 3 columnas
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
También se puede utilizar otros formatos como los siguientes: int tabla1[ ][ ] = { {51, 24, 33}, {32, 23, 45} } int tabla1[ ][ ] = { {51, 24, 33}, {32, 23, 45}
tabla1[ ][ ] 0
};
1
2
0
51
24
33
1
32
23
45
0
1
2
3
0
1
2
3
4
1
5
6
7
8
2
9
10
11
12
tabla2[ ][ ]
int tabla2[ ][ ] = { { 1, 2, 3, 4}, { 5, 6, 7, 8}, { 9, 10, 11, 12} };
Java losarreglos arreglosnodeproporcionales. dos o más dimensiones como un arreglo de arreglos, por tanto, puedetrata crear Por ejemplo: a)
double datos[ ][ ] = { {1.5, -2.5}, {5.0, 0.0, 1.5} };
Se ha creado un arreglo con dos filas, la 1ª con dos columnas y la 2ª. con 3. b)
int [ ] a = { 1, 3 3,, 5 }, b = { 2, 4, 6, 8, 10 }; int z[ ][ ] = { a, b };
Primero se definió el arreglo a con 3 elementos y después el arreglo b con 5 elementos, posteriormente nte se la matriz(los z con filas, b la).primera con 3 elementos (los del arreglo aposteriorme ) y la segunda condefine 5 elementos deldos arreglo Método length con los arreglos bidimensional bidimensionales es Para saber la longitud de la última dimensión se debe especificar los subíndices precedentes,
E jercicio 1.2 1.2:: Para el siguiente ejemplo se declara una matriz f no proporcional, donde el primer subíndice tiene 4 elementos, el segundo 2 y el último 6.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Acc A cces eso o a los elementos del arr arreg eglo lo bidimens bid imens ion ional al Por ejemplo, si tenemos la siguiente matriz: int [ ][ ] a = new int [3][4]; a Columna 0 Fila 0 a[0][0] Fila 1 a[1][0] Fila 2 a[2][0]
Columna 1 a[0][1] a[1][1] a[2][1]
Columna 2 a[0][2] a[1][2] a[2][2]
Columna 3 a[0][3] a[1][3] a[2][3]
ndice de la columna Índice de la fila Nombre del arreglo
Para almacenar datos en una matriz basta con poner el nombre del arreglo, el subíndice de las filas y el subíndice de las columnas, el símbolo igual y la expresión que se quiere almacenar y finalmente después punto y coma. Por ejemplo: a[1][3] = Expresión;
E jercicio 1. 1.3: 3: El siguiente programa lee una matriz de enteros de n renglones y m columnas y calcule la suma de los elementos de cada renglón.
TECNOLÓGICO NACIONAL DE MÉXICO INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Multidimens Multidi mens i onales onales.. Java proporciona la probabilidad de almacenar varias dimensiones, aunque raramente los problemas del mundo real se manejan más tres dimensiones, esto porque para los seres humanos es difícil representar gráficamente arreglos con más de tres dimensiones. Para representar un arreglo de tres dimensiones lo haremos por medio de un cubo. int cubo [ ][ ][ ] = new int [4][5][3];
Operaciones. Las operaciones básicas sobre un arreglo multidimensional son:
Declaración del arreglo, Creación del arreglo, Inicializac Inicialización ión de los elementos del arreglo, y Acceso a los elementos del arreglo.
Declaración de arreglos multidimensional Para el siguiente ejemplo se tomará un arreglo de tres dimensiones
Tipo [ ] [ ] [ ]
identificador
;
,
T ipo
identificador [ ] [ ] [ ]
,
;
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Ejemplo: int cubo[ ][ ] [ ];
cubo en cubo en un arreglo de tres dimensiones del tipo int.
String [ ][ ][ ] Edificio1, Edificio Edificio2; 2;
Edificio1 y Edificio2 son arreglos multidimensionales de 3 dimensiones.
C rea reación ción del a arr rreglo eglo
Como ya se mencionó estas declaraciones son simplemente referencias, para declarar el new.. número de elementos del arreglo se hace por medio del operador new Ejemplo: int cubo[ ][ ][ ]; cubo = new int [4][5][3]; La primera sentencia declara la referencia al arreglo cubo (de tres dimensiones) que manejara datos tipos int. La segunda sentencia crea el arreglo e indica que manejara manej ara 4 filas, con 5 columnas y 3 de profundidad. Otra forma de hacer la declaración y creación del arreglo es: int [ ][ ] [ ] cubo = new int [4][5][3]; Almacenar datos en el arreglo multidimensional:
Al igual que en los anteriore anterioress arreglos, se deben poner los subínd subíndices ices al cual se quiere acceder y posteriormente la expresión a asignar. cubo[2][3][2] = 15; Objetos que permiten E/S por consola. En Java, la entrada y salida se lee y escribe en flujos ( streams s treams ). La fuente básica de entrada de datos es el steclado y lalafuente dede salida es pantalla. La clase Sys S ys tem define dos ta tatic tic para referencias a objetos para gestión entrada (in) y salida (out). Salida (System.out)
El objeto out definida definida en la clase S ys tem está asociado con el flujo de salida, que dirige los datos a consola y permite visualizarlos en pantalla, por ejemplo: System.out.println(“Esta es una cadena”); Se visualizará en pantalla: Esta es una cadena.
Des cri pción del m mét étodo odo print: void print(c print(cadena) adena) void println( println(cadena) cadena)
Despliega una cadena en pantalla. Despliega una cadena en pantalla y al final un carácter de nueva línea (‘\n’).
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Con estos métodos se puede escribir cualquier cadena o dato de los tipos primitivos, como, por ejemplo: System.out.println( "Valores de las Variables: \n" + "a=" + a +"\n" + "b=" + b +"\n" + "x=" + x +"\n" + "y=" + y ); Entrada (System.in) Por medio de un objeto S canner se puede leer datos desde un programa, esta clase pertenece al paquete java.util y debe ser importada. Para poder utilizarlo instancie un objeto de la siguiente forma: Sacanner identificador = new Scanner (System.in); Esta expresión crea un objeto Scanner y determina que leerá los datos desde teclado mediante los siguientes métodos: identificador.nextBoolean() identific ador.nextBoolean() Para Booleanos identificador.nextByte() identific ador.nextByte() Para números Enteros tipo byte identificador.nextShort() identific ador.nextShort() Para números Enteros tipo short identific identificador.nextInt() ador.nextInt() identificador.nextLong() ador.nextLong() identificador.nextFloat() identific ador.nextFloat() identificador.nextDouble() identific ador.nextDouble() identificador.next() identific ador.next() identificador.nextLine() identific ador.nextLine()
Ejercicio 1.4: El siguiente programa lee de teclado datos de deferente tipo
(String, int un y double) mediante objeto tipo Scanner y posteriormente los muestra en pantalla mediante el flujo System.out.
Para números Enteros tipo int long Para números flotantes Para números doubles Para el siguiente token Para una línea
TECNOLÓGICO NACIONAL DE MÉXICO INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
lee dos números enteros desde una ventana de Ejercicio empleando 1.5: El siguiente Windows la claseprograma JOptionPane, posteriormente los suma y muestra el resultado en una ventana.
Al leer los los datos mediante la clase JJOptionPa OptionPane, ne, los ccaptura aptura titipo po String, por lo que se tiene que convertir a datos tipo numérico (int) mediante la sentencia Integer.parseInt(), en la cual marcará una excepción si el String no es un número entero válido.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
El método showMessageDialog de la clase JOptionPane tiene varias formas de enviarles parámetros: public static static void showMessage showMessageDialog(Comp Dialog(Component onent componente componentePadre, Padre, Object Mensaje)
Dónde: componentePadre
Determina la ventana en que se desplegara el mensaje, si es null, se despliega en la ventana por defecto.
Mensaje
Objeto a desplegar
public static static void showMessage showMessageDialog(Comp Dialog(Component onent componente componentePadre, Padre, Object Mensaje, String Titulo, int TipodeMensaje)
Dónde: componentePadre Mensaje Titulo TipodeMensaje
Determina la ventana en que se desplegara e ell mensaje, si es null, se despliega en la ventana por defecto. Objeto a desplegar Cadena de caracteres de la caja de dialogo Valor entero que determina qué imagen se despliega según la siguiente tabla:
Tipo de cuadro de diálogo de mensaje JOptionPane.ERROR_MESSAGE JOptionPane.ERROR _MESSAGE JOptionPane.INFORMATION_MESSAGE JOptionPane.INFO RMATION_MESSAGE JOptionPane.WARNING_MESSAGE
Icono
Descripción Ventana de Error Ventana Informativa Ventana de Advertencia Adverten cia
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Tipo de cuadro de diálogo de mensaje
Icono
Descripción Ventana de introducción de datos o selección de alguna alternativa
JOptionPane.QUESTION_MESSAGE
JOptionPane.PLAIN_MESSAGE JOptionPane.PLAIN_ MESSAGE
Sin Icono
Ventana estándar
Mini proyecto:
Elaborar un programa en Java que mediante una Venta (JFrame) sume dos números.
Clase Math La Clase Math proporciona una gran variedad de métodos matemáticos al igual ig ual que algunas constantes útiles. Campos
Descripción
final static double E
Constante e: 2.7182818284590452354 del logaritmo natural.
final static double PI
Constante pi: 3.14159265358979323846
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Métodos
Descripción
static double abs(double d) static float abs(float f) static long abs(long l) static int abs(int i)
Regresa el valor absoluto especificado.
static double acos(double d)
Regresa el inverso del coseno del ángulo especificado en radianes.
static double asin(double d)
Regresa el inverso del seno del ángulo especificado en radianes.
static double atan(double d)
Regresa el inverso de la tangente del número especificado.
static double atan2(double d1, double d2)
Regresa el ángulo definido por las coordenadas rectangulares (d1, d2)
static double cos(double d)
static double sin(double d)
static double tan(double d)
Regresa el coseno del ángulo especificado en radianes. double angulo = 45.0 * Math.PI/180.0; System.out.println("cos(" + angulo + ") es " + Math.cos(angulo));
Regresa el seno del ángulo especificado en radianes. double angulo = 45.0 * Math.PI/180.0; System.out.println("sen(" + angulo + ") es " + Math.sen(angulo));
Regresa la tangente del ángulo especificado en radianes. double angulo = 45.0 * Math.PI/180.0; System.out.println("tan(" + angulo + ") es " + Math.tan(angulo));
Regresa ed. Ejemplo: static double exp(double d)
System.out.println("exp(1.0) es " + Math.exp(1.0)); System.out.println("exp(10.0) es " + Math.exp(10.0)); System.out.println("exp(0.0) es " + Math.exp(0.0));
Regresa el logaritmo natural de d (base e). Ejemplo: static double log(double d)
System.out.println("log(1.0) es " + Math.log(1.0)); System.out.println("log(10.0) es " + Math.log(10.0)); System.out.println("log(Math.E) es " + Math.log(Math.E));
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Métodos
Descripción
static double max(double d1, double d2) static float max(float f1, float f2) static long max(long l1, long l2) static int max(int i1, int i2)
Regresa el valor más grande. Ejemplo: Math.max(2.3,12.7) 12.7 Math.max(-2.3,-12.7) -2.3
static double min(double d1, double d2) static float min(float f1, float f2) static long min(long l1, long l2) static int min(int i1, int i2)
Regresa el valor más pequeño. Ejemplo: Math.min(2.3,12.7) 2.3 Math.min(-2.3,-12.7) -12.7
static double sqrt(double r)
Regresa la raíz cuadrada del valor r especificado.. Math.sqrt(25) 5.0 especificado
static double pow(double base, double exp) throws AritmeticException
Regresa baseexp. Ejemplo: System.out.println("pow(10.0, 3.5) es " + Math.pow(10.0,3.5));
Regresa un número aleatorio comprendido
static double random()
Función matemática abs atan sin cos tan exp
Significado
log
Valor absoluto Arcotangente Seno Coseno Tangente Exponenciación neperiana Logaritmo neperiano
pow round
Potencia Redondeo
random max min
Número aleatorio Número máximo Número mínimo
entre 0.0 y 1.0. 0.0 "; nodo = nodo.getEnlace(); } Salida += "\\"; JOptionPane.showMessageDialog( null,Salida, "Lista ligada simple",JOptionPane.PLAIN_MESSAGE); } }
}
Inserción al inicio:
Inserción al final:
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Listas doblemente ligadas Clase NodoDoble public class NodoDoble { private NodoDoble enlaceIzq; private String dato; private NodoDoble enlaceDer; NodoDoble( String d ) { this( null, d, null ); } NodoDoble(NodoDoble NodoDoble(Nodo Doble izq, String d, NodoDoble der ) { dato = d; enlaceIzq = izq; enlaceDer = der; } String getDato() { return dato; } NodoDoble getEnlaceIzq() { return enlaceIzq; } NodoDoble getEnlaceDer() { return enlaceDer; } void setDato(String d) { }
dato = new String(d);
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES void setEnlaceIzq(NodoDoble izq) { enlaceIzq = izq; } void setEnlaceDer(NodoDoble der) { enlaceDer = der; }
}
Insertar un elemento Existen tres formas de insertar un nodo en una lista doblemente ligada:
Insertar al inicio inicio /
e0
inicio
/ e1
e2
e3
…
…
en / fin
nododoble nodo, inicio = null, fin = null; ... .. . Capturar la información nodo = new nodoDoble(información); nodoDoble(información); ... .. . nodo.setEnlaceDer(inicio); inicio.setEnlaceIzq(nodo); inicio = nodo;
Insertar al final inicio / e1
e2
e3
nodoDoble nodo, inicio = null, fin = null; ... .. . Capturar la información nodo = new nodoDoble(información); nodoDoble(información); ... .. . fin.setEnlaceDer(nodo); nodo.setEnlaceIzq(fin); fin = nodo;
…
…
en / fin
e0 / fin
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Insertar entre elementos de la lista inic io / e1
pre
s uc
e2
e3
… …
en / fin
e0 nodo
nodoDoble nodo, inicio = null, fin = null; ... .. . Capturar la información nodo = new nodoDoble(información); nodoDoble(información); ... .. . pre.setEnlaceDer(nodo); nodo.setEnlaceIzq(pre); nodo.setEnlaceDer(suc); suc.setEnlaceIzq(nodo);
Eliminar un elemento Existen tres formas de eliminar un elemento en una lista doblemente ligada. Eliminar un elemento al inicio inicio / e1
inic io e2
e3
nodo
nodoDoble nodo, inicio = null, fin = null; String x; ... .. . x = inicio.getDato(); inicio.getDato(); nodo = inicio; inicio = inicio.getEnlaceDer(); inicio.getEnlaceDer(); inicio.setEnlaceIzq(null); nodo.setEnlaceDer(null); nodo = null;
… …
en / fin
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Eliminar un elemento al final de la lista nodo
inicio / e1
e2
…
e3
…
fin
en /
fin
nodoDoble nodo, inicio = null, fin = null; String x; ... .. . x = fin.getDato(); nodo = fin; fin = fin.getEnlaceIzq(); fin.getEnlaceIzq(); fin.setEnlaceDer(null); nodo.setEnlaceIzq(null); nodo = null;
Eliminar un elemento en medio inic io / e1
pre
s uc
e2
e3 …
nodo
…
en / fin
nodoDoble nodo, inicio = null, fin = null; String x; ... .. . x = nodo.getDato(); pre.setEnlaceDer(suc); suc.setEnlaceIzq(pre); nodo.setEnlaceIzq(null); nodo.setEnlaceDer(null); nodo = null;
Clase LinkedList
El paquete java.util contiene la clase LinkedList para para implementar y manipular listas enlazadas que crezcan y se reduzcan durante la ejecución del programa. La clase LinkedList es es una implementación de listas doblemente ligadas.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Métodos
Descripción
LinkedList()) LinkedList(
Crea una lista vacía
boolean add(Object o)
Inserta el objeto o al final de la lista
void add(int index, Object o)
Inserta el objeto o en la posición indicada por index
void addFirst( addFirst(Object Object o)
Inserta el objeto o al inicio de la lista
void addLast(Object o)
Inserta el objeto o al final de la lista
void clear()
Elimina todos los elementos
boolean contains(Object o)
Regresa verdadero si el objeto o está contenido en la lista
Object get(int index)
Regresa el objeto almacenado en la posición indicada por index
Object getFirst()
Regresa el objeto que esta al inicio de la lista
Object getLast()
Regresa el objeto que esta al final de la lista
int indexOf(Object o)
Regresa la posición de la primera ocurrencia del objeto o en la lista o -1 en caso de que no exista el elemento.
int lastIndexOf(Object o)
Regresa la posición de la última ocurrencia del objeto o en la lista o -1 en caso de que no exista el elemento
Object remove(int index)
Elimina y regresa el objeto indicado por index
boolena remove(Object o)
Elimina la primera ocurrencia del objeto o de la lista.
Object removeFirst()
Elimina y regresa el primer elemento de la lista
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Métodos
Descripción
Object removeLast()
Elimina y regresa el último elemento de la lista
Object set(int index, Object o)
Remplaza el elemento indicado por index por el elemento o y regresa el objeto almacenado en esa posición
int size()
Regresa el número de elementos de la lista
Object [ ] toArray()
Regresa un arreglo de objetos que contiene todos los elementos de lista
Indicador de Alcance 2.C.- Explica problemas propuestos
Elabore un programa en Java que evalué una expresión con los 3 diferentes delimitadores de ámbito utilizando la clase LinkedList. Clases para la implementación de pilas. La clase Stack (java.util.Stack) es una extensión de la clase Vector. La clase Stack representa una pila de objetos bajo la filosofía LIFO. Esta clase cuenta con cinco operaciones que permite al Vector ser utilizado como una pila. Entre estas operaciones se encuentran push y pop, además el método peek que proporciona el objeto de la cima de la pila, así como loe métodos empty y search. Métodos
Descripción
Stack()
Crea un objeto Stack vacío
boolean empty()
Regresa true si el objeto Stack está es tá vacío y false en caso contrario.
Objeto peek()
Regresa el objeto de la cima del Stack sin eliminar el objeto de la pila.
Objeto pop()
Regresa el objeto de la cima del Stack eliminando el objeto de la pila.
Objeto push(Objeto elem)
Inserta el objeto elem en la cima de la pila. Es similar a: Vector.addElement(Objeto); Vector.addElement(Objeto);
int search(Object o)
Regresa posición del objeto o dentro de la pila o -1 si no lolaencuentra.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Indicador de Alcance 2.C.- Explica problemas propuestos
Elabore un programa en Java que evalué una expresión con los 3 diferentes delimitadores de ámbito utilizando la clase Stack.
2.3.
Colas estáticas y dinámicas.
Recordemos que las pilas funcionan en un depósito en donde se insertan y se retiran elementos por el mismo extremo. En las colas sucede algo diferente, se insertan elementos por un extremo y se retiran por el otro. Por esta razón las colas se rigen por la filosofía FIFO (first in, first out) o PEPS (primero en entrar primero en salir). Colas simples En una cola hay dos extremos, uno es llamado frente y el otro se llama final, el cual se encuentra en la parte trasera de la cola. En una cola, los elementos se retiran por la parte del frente y se agregan por la parte final o trasera de la cola.
Las operaciones básicas de una cola son insertar (agregar un elemento al final de la cola) y borrar (eliminar el elemento que está al frente de la cola).
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Colas circulares. Otra solución consiste en considerar la cola en forma circular, en lugar en forma lineal. Veamos el siguiente ejemplo e insertemos el elemento F. Frente 0
1
2
3
4
C
D
E Final
Frente 0
1
F
2
3
4
C
D
E
insertar F
Final
Colas dobles. Una variación de las colas son la Bicolas o colas de doble entrada. Una Bicola es una cola en donde se puede insertar o eliminar elementos por los dos extremos. Se puede decir que una Bicola es una cola bidireccional. Operaciones. Antes de de po poder der utiliz utilizar ar una cola de debemos bemos estipulas que tip tipo o de datos almacena almacenara ra (int, float, char, etc.).
Operaciones básicas de colas simples Las operaciones básicas de una cola son: Tamaño de la cola
Crear Cola Insertar Borrar Cola vacía Cola llena
Número de elementos máximos que puede contener la cola. Crear la cola. Agregar un elemento al final de la cola. Extraer el elemento del frente de la cola. Comprobar si la cola no tiene elementos. Comprobar si la cola está llena.
Al utilizar arreglos como una cola existe la posibilidad de desborda desbordamientos mientos (underflow u overflow). Si por el momento no tomamos en cuenta la posibilidad de desbordamiento las operaciones quedaran de la siguiente forma:
Insertar 1. Verificar que la cola no esté llena. 2. Almacenar Incrementarelen 1 el apuntador del final de la cola. 3. elemento e en n la nueva posición final.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Borrar 1. Verificar si la cola no este vacía. 2. Leer el elemento que se encuentra la frente de la cola. 3. Incrementar en 1 el frente de la cola.
Cola vacía Al comenzar comenzar el final e ess igual a -1 y el frente es igual a 0. La ccola ola está va vacía cía siempre que el final < frente y el número de elementos se calcula final – frente + 1.
Cola llena La cola está llena cuando el final es igual al máximo de elementos – 1.
La representación en Java de las operaciones de una cola Definir el tipo de dato de la cola Se debe seleccionar que tipo de dato va a manejar la Cola (char, int, double, etc.)
Tamaño de la cola final static int MAX_ELEMENTOS = 100;
Crear una cola TipoColaChar Cola = new TipoColaChar();
Inicializar la cola public TipoColaChar() { frente = 0; final = -1; elemento = new char [MAX_ELEMENTOS]; }
Función insertar public void insertar(char d){ if (!colallena()) elemento[++final]=d; else System.out.println("Cola System.out.prin tln("Cola llena"); }
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Función borrar public char borrar() { if (!colaVacia()) return elemento[frente++]; elemento[frente++]; else { System.out.println("Cola System.out.print ln("Cola vacia"); return ' '; } }
Función colaVacia public boolean colaVacia(){ if (final < frente) return true; esle return false; }
Función colaLlena public boolean colaLlena(){ if (final == MAX_ELEMENTOS - 1) return true; else return false; }
Ahora consideremos consideremos la posibi posibilidad lidad de d desborde, esborde, ssuponga upongamos mos el siguie siguiente nte ejemp ejemplo: lo: Frente 0
1
2
3
4
C Final Frente 0
1
2
3
4
C
D
E
insertar D inserta E
Final
Si se desea insertar el elemento F, no es posible porque Final == MAX_ELEMENTOS – 1, es decir la cola está llena (aunque calculando el número de elementos en la cola final – frente + 1 es igual a 3 y comprobando que la cola no está llena).
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Compactación Una solución es modificar la operación borrar de tal manera que cuando se elimine un elemento los demás se recorran al principio del arreglo, a este proceso se le llama compactación. La función borrar quedaría de la siguiente forma: public char borrar(){ char d; if (!colaVacia()) { d = elemento[0]; for(int i=0; i< final; i++) elemento[i] = elemento[i+1]; final--; return d; } else System.out.println("Cola System.out.print ln("Cola vacía”);
}
Bajo estaestá técnica no es necesario el frenteeste de método la cola, debido que el porque primer elemento siempre en layaposición 0. Sin embargo, es pocoaeficaz, cada vez que se borra un elemento se tiene que compactar los elementos restantes. Para poder solucionar este problema sería necesario realizar la compactación si y solo si: ((final == (MAX_ELEMENTOS-1)) && ((final – frente+1) frente+1) != (MAX_ELEMENTOS)))
Operaciones básicas de colas circulares En las colas circulares es difícil determinar si la cola está llena o no. Para calcularla debemos utilizar la teoría de los residuos de tal modo que generemos posiciones entre 0 y MAX_ELEMENTOS-1.
frente + 1)%%MAX_ELEMENTOS MAX_ELEMENTOS final == (frente (final +1) Las operaciones de una cola circular quedarían como sigue: frente = 0; final = MAX_ELEMENTOS – 1;
Cola vacía Para comprobar si una cola está vacía o está llena sacrificaremos un elemento de la cola, de tal forma que la capacidad real de la cola será MAX_ELEMENTOS – 1 y la condición de cola vacía quedará:
frente == siguiente(final);
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Donde la función siguiente regresa la posición de que le sigue al final, si esta es igual al frente se determina que la cola está vacía. Frente
0
1
2
3
4
Final Frente
0
1
2
3
4
Final Frente
0
1
2
3
4
Final
Cola llena La cola está llena cuando: frente == siguiente(sig siguiente(siguiente(final) uiente(final))) Recordemos que se está sacrificando un elemento, entonces si el frente es igual a la posición de las dos siguientes posiciones se supone que la cola está llena. Frente 0
a
1
b
2
3
c
d
4
Final Frente 0
1
f
2
3
4
c
d
e
Final Frente 0
f
1
g
2
h
3
4
e
Final
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Insertar 1. Verificar que la cola no esté llena. 2. final = (final + 1) % MAX_ELEMENTOS 3. Almacenar el elemento en la nueva posición final.
Borrar 1. Verificar si la cola no este vacía. 2. Leer el elemento que se encuentra la frente de la cola. 3. frente = (frente + 1) % MAX_ELEMENTOS
Siguiente 1. A la posición que recibe como parámetro: return (n + 1) % MAX_ELEMENTOS
La representación en Java de las operaciones de una cola circular Inicializar la cola public TipoColaCircularChar(){ TipoColaCircularChar(){ frente = 0; }
final = MAX_ELEMENTOS -1;
Función insertar public void insertar(char d){ if (!colaLlena()) { final = siguiente(final); siguiente(final); elemento[final] = d; } else System.out.println("Cola System.out.prin tln("Cola llena"); }
Función borrarborrar(){ public char char d; if (!colaVacia()) { d= elemento[frente]; elemento[frente]; frente = siguiente(frente); siguiente(frente); return d; } else { System.out.println("Cola System.out.print ln("Cola vacía"); return ' '; } }
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Función colavacia public boolean colaVacia(){ if (frente == siguiente(final)) siguiente(final)) return true; else return false; }
Función colaLlena public boolean colaLlena(){ if (frente == siguiente(siguiente(final))) siguiente(siguiente(final))) return true; else return false; }
Operaciones básicas de las colas dobles o bicolas Los extremos de la Bicola se pueden identificar como izquierdo y derecho respectivamente. Las operaciones básicas de una Bicola son:
Crear Bicola Crear InsertarIzq
InsertarDer InsertarD er
BorrarIzq BorrarDer Bicola vacía Bicola llena
Crear la Bicola. Agregar un elemento en el extremo Izquierdo de la Bicola. Agregar un elemento en el extremo Derecho de la Bicola. Extraer el elemento de la Izquierda de la Bicola. Extraer el elemento de la Derecha de la Bicola. Regresa verdadero si la Bicola está vacía. Regresa verdadero si la Bicola está llena
Una Bicola con restricción de entrada es aquella que solo permite inserciones por uno de los extremos, pero que permite eliminar elementos por los dos extremos. Una Bicola con restricción de salida es aquella que solo permite inserciones por los dos extremos, pero solo permite eliminar elementos por un extremo. Clases para la implementación de colas. La interfaz Queue (java.util.Queue) representa una cola de objetos bajo la filosofía FIFO. Esta clase cuenta con los siguientes métodos:
Métodos
boolen add (Object o)
Descripción Inserta el elemento o en la cola, si regresa verdadero (true), el elemento fue insertado con éxito, y si regresa falso (false) no se inserte el elemento.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Métodos
Descripción
Object element()
Recupera el elemento de la cabeza de la cola pero no lo elimina.
boolean offer(Object o)
Inserta el elemento la cola (true), en caso o de especificado que no sea en posible regresa false.
Object peek()
Recupera el elemento de la cabeza de la cola pero no lo elimina, en caso de que la cola esté vacía devuelve null.
Object poll()
Recupera el elemento y lo remueve de la cabeza de la cola o null si esta cola está vacía.
Object remove()
Recupera y remueve la cabeza de la cola.
Indicador de Alcance 2.B.- Participación en clase. Evidencia de Aprendizaje.- Resolución de problemas propuestos de la Unidad 2
1. Implemente el algoritmo de evaluación de una expresión postfija. 2. Implemente el algoritmo para convertir una expresión infija a postfija. 3. Elabore un programa en Java que lea 7 nombres desde el teclado y los inserte en un objeto TipoColaString con organización circular (Con capacidad de 10 elementos) y posteriormente borre cuatro elementos de la cola, posteriormente solicite otros 5 elementos y los inserte en la cola; al final imprima los elementos de la cola. Indicador de Alcance 2.E.- Resolución de problemas adicionales a los problemas propuestos.
Elabore un programa en Java que implemente la interfaz Queue, insertando 5 elementos, imprimiendo el contenido de la cola, borrando 2 e imprimiendo el contenido de la cola.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Instituto Tecnológico de Aguascalientes Departamento de Sistemas y Computación Asignatura: Carrera: Grupo:
Estructura y Organización de Datos Ingeniería en Tecnológicas de la Información y Comunicaciones
Hora:
Nombre del alumno: No. Control:
Fecha:
R úbrica de res olución de probl problem emas as propues tos de lla a Unida Unidad d2 Instrucciones: Indique con una “X” en la intersección fila - columna las características mínimas que cumple el
proyecto entregado como evidencia, anote los puntos en cada criterio c riterio y súmelos. Criterios de desempeño
Portada
Pts.
Desarrollo Problema 1
Excelente
Notable
Bueno
Suficiente
Insuficiente
Presenta una portada con: 1. Logo del TecNM y del ITA en la parte superior 2. Nombre del Instituto 3. Nombre de la carrera 4. Nombre de la materia y hora 5. Unidad y producto de aprendizaje. 6. Nombre y número de control del estudiante 7. Fecha
Presenta una portada con seis de los conceptos del apartado de excelente y sin errores ortográficos.
Presenta una portada con cinco de los conceptos del apartado de excelente y sin errores ortográficos.
Presenta una portada con cuatro de los conceptos del apartado de excelente y sin errores ortográficos.
Presenta un portada con menos de cuatro de los conceptos mostrados en el apartado de excelente o tiene errores ortográficos o No presenta portada.
Sin errores 5 ortográficos pts. Presenta la resolución del problema con los siguientes rubros: Descripció n del problema. Código de la Implemente el algoritmo de evaluación de una expresión postfija Ejecución del programa mediante imágenes que muestre el funcionamiento funcionamie nto correcto de la evaluación de la expresión postfija al 100%.
Pts.
Desarrollo Problema 2
Pts.
Desarrollo Problema 3
Pts. Conclusiones Pts.
4.5 pts.
4 pts.
3.5 pts.
Presenta la resolución del problema con los siguientes rubros: Descripció n del problema. Código de la Implemente el algoritmo de evaluación de una expresión postfija Ejecución del programa mediante imágenes que muestre el funcionamiento correcto de la evaluación de la expresión postfija al 80%.
Presenta la resolución del problema con los siguientes rubros: Código de la Implemente el algoritmo de evaluación de una expresión postfija Ejecución del programa mediante imágenes que muestre el funcionamiento correcto de la evaluación de la expresión postfija al 80%.
Presenta la resolución del problema con los siguientes rubros: Código de la Implemente el algoritmo de evaluación de una expresión postfija Ejecución del programa mediante imágenes que muestre el funcionamiento correcto de la evaluación de la expresión postfija al 70%.
0 pts. El programa que presenta no resoluciona correctamente lo solicitado o no presenta la solución del problema.
20 pts.
18 pts.
16 pts.
14 pts.
0 pts.
Presenta la resolución del problema con los siguientes rubros: Descripción del problema. Código de la implementación para convertir una expresión infija a prefija
Presenta la resolución del problema con los siguientes rubros: Descripción del problema. Código de la implementación para convertir una expresión infija a prefija
Presenta la resolución del problema con los siguientes rubros: Código de la implementación para convertir una expresión infija a prefija Ejecución del programa mediante
Presenta la resolución del problema con los siguientes rubros: Código de la implementación para convertir una expresión infija a prefija Ejecución del programa mediante
El programa que presenta no resoluciona correctamente correcta mente lo solicitado o no presenta la solución del problema.
Ejecución programa del mediante imágenes que muestre el funcionamiento correcto de la conversión de una expresión infija a prefija 100%.
Ejecución del programamediante imágenes que muestre el funcionamiento correcto de la conversión de una expresión infija a prefija 80%.
imágeneselque muestre funcionamiento correcto de la conversión de una expresión infija a prefija 80%.
imágeneselque muestre funcionamiento correcto de la conversión de una expresión infija a prefija 70%.
25 pts.
22.5 pts.
20 pts.
17.5 pts.
0 pts.
Presenta la resolución del problema con los siguientes rubros: Descripción del problema. clase Código de la clase TipoColaString Código Clase principal Ejecución del programa mediante imágenes que muestre el funcionamiento correcto de la cola circular al 100%.
Presenta la resolución del problema con los siguientes rubros: Descripción del problema. clase Código de la clase TipoColaString Código Clase principal Ejecución del programamediante imágenes que muestre el funcionamiento correcto de la cola circular al 80%.
Presenta la resolución del problema con los siguientes rubros: Código de la clase TipoColaString Código Clase principal Ejecución del programa mediante imágenes que muestre el funcionamiento correcto de la cola circular al 80%.
Presenta la resolución del problema con los siguientes rubros: Código de la clase TipoColaString Código Clase principal Ejecución del programa mediante imágenes que muestre el funcionamiento correcto de la cola circular al 70%.
El programa que presenta no resoluciona correctamente correcta mente lo solicitado o no presenta la solución del problema.
30 pts.
27 pts.
24 pts.
21 pts.
Presenta una opinión personal coherente con el
Presenta una opinión personal coherente con el
Presenta una opinión personal coherente con el
Presenta una opinión personal coherente con el
Presenta una opinión personal y con más de dos
trabajo y sinen errores ortográficos más de media cuartilla.
trabajo y sin en errores ortográficos media cuartilla.
trabajo y sinen errores ortográficos menos de media cuartilla.
trabajo y conortográficos a lo menosen dos errores menos de media cuartilla.
errores ortográficos o No presenta aportaciones personales.
12 pts.
10.5 pts.
15 pts.
13.5 pts.
0 pts.
0 pts.
Retroalimentación
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Criterios de desempeño
Rúbrica
Pts.
Indicador de alcance E Indicador de alcance F
Excelente
Notable
Bueno
Suficiente
El trabajo tiene impreso la Rúbrica con el llenado de los siguientes rubros: o No. de grupo y hora o Nombre del alumno o Número de control o Fecha de entrega o Nombre del Alumno y Firma Firma
El trabajo tiene impreso la Rúbrica y falta el llenado de uno de los siguientes rubros: o No. de grupo y hora o Nombre del alumno o Número de control o Fecha de entrega o Nombre del Alumno y Firma Firma
El trabajo tiene impreso la Rúbrica y falta el llenado de dos de los siguientes rubros: o No. de grupo y hora o Nombre del alumno o Número de control o Fecha de entrega o Nombre del Alumno y Firma Firma
El trabajo tiene impreso la Rúbrica solo tiene llenado uno o ninguno de los siguientes rubros: o No. de grupo y hora o Nombre del alumno o Número de control o Fecha de entrega o Nombre del Alumno y Firma Firma
4.5 pts.
4 pts.
3.5 pts.
5 pts.
Resolución de problemas adicionales a los problemas propuestos. propuestos. Entrega la resolució n de problemas propuestos en la fecha y hora señalada
Calificación Nivel de desempeño mínimo aceptable: 70 pts. NOMBRE Y FIRMA DE CONFORMIDAD DEL ALUMNO:
Insuficiente No presenta la rúbrica impresa.
0 pts.
Retroalimentación
TECNOLÓGICO NACIONAL DE MÉXICO INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Evidencia de Aprendizaje.- Proyecto de la Unidad 2
Elabore un proyecto en Java que mediante un menú despliegue si se quiere crear una Lista Ligada Simple, Lista Ligada Doble o Salir, al seleccionar Lista Ligada Simple o Lista Librada Doble muestre otro menú donde indique si quiere Insertar, Borrar, Buscar, Mostrar o Regresar, si selecciona Insertar se despliegue un menú que indique si se inserta al Inicio, en Medio o al Final de la lista, si selecciona Inicio o Final capture un nombre y lo inserte al inicio o al final, si selecciona en Medio, capture el nombre y una posición e inserte en la posición indicada. Si selecciona Borrar se despliegue un menú que indique si se borra al Inicio, en Medio o Final, si selecciona Inicio o Final borre el elemento que esta al inicio o al final, si selecciona en Medio, capture la posición del elemento a borrar y posteriormente borre el elemento según lo indicado. Si selecciona Buscar capture el elemento, lo busque en la lista e indique si lo encuentra o no. Si selecciona Mostrar despliegue la lista. Solo puede terminar cuando en el menú principal seleccione Salir. Nota.- El sistema debe de validad cualquier contingencia. Indicador de Alcance 2.A.- Diseñar opciones adicionales al proyecto.
Que el proyecto permita guardar y cargar listas mediante archivos.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Instituto Tecnológico de Aguascalientes Departamento de Sistemas y Computación Asignatura: Carrera: Grupo:
Estructura y Organización de Datos Ingeniería en Tecnológicas de la Información y Comunicaciones
Hora:
Nombre del Equipo:
Fecha:
G uía de Obs ervación y L is ta de Cotejo del Pr oyecto de la Unidad 2 Instrucciones para el llenado del instrumento: instrumento: Observe cuidadosamente la ejecución de las actividades que se enuncian y marque con una “X” en la columna “Si” cuando el equipo cumpla con el desempeño correspondiente al 100% o porcentaje de cumplimiento y en la columna “No” cuando no realice re alice las actividades señaladas. No.
Exposición del proyecto y entrega del trabajo
Valor
Cumple Si No
Al Inicio de la sesión: sesión: 1 2
Realiza la presentación ante el grupo de cada uno de sus integrantes (Nombre completo). Indica ante el grupo la descripción del proyecto a resolver.
2 2
Durante la sesión: 3
4 5 6
Explican el funcionamiento del proyecto: Insertar, Borrar, Buscar, Mostrar o Listas Ligadas Simples o Listas Ligadas Dobles o Validaciones De una forma coherente y clara. Interactúa con el grupo manteniendo contacto visual durante la exposición. Emplea un tono de voz adecuado durante la exposición. Mantiene la atención del grupo durante la exposición.
20
2 2 5
Cierre de la sesión: 7 8
Responde a las preguntas de forma clara Cumple con el tiempo planeado para la sesión de 12 a 20 minutos.
2 15
Entrega trabajo impreso:
9
10
11 12 13 14
La portada contiene: 1. Logo del TecNM y del ITA en la parte superior. 2. Nombre del Instituto. Instituto. 3. Nombre de la carrera. 4. Nombre de la materia y hora. 5. Unidad y descripción del proyecto. 6. Nombre y nú número mero de con control trol los estudiantes. 7. Fecha. El desarrollo contiene la resolución del problema con los siguientes rubros: Descripción del problema. Código de Listas simples y dobles (insertar, borrar, buscar, mostrar y validación) Ejecución del programa mediante imágenes que muestre el buen funcionamiento del programa 100%. La conclusión tiene con una opinión personal coherente con el trabajo por cada integrante del equipo. El trabajo tiene texto justificado y maneja títulos y subtítulos El trabajo está libre de errores ortográficos. Diseñar opciones adicionales al proyecto: El proyecto permite guardar y cargar listas mediante archivos.
5
20
15 5 5 Indicador de Alcance A
Puntuación Total
Nivel de desempeño mínimo aceptable: 70 pts. pts. NOMBRES Y FIRMAS DE CONFORMIDAD LOS ALUMNOS:
Puntos
Retroalimentación
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
3. Estructuras no lineales 3.1.
Recursividad.
Definición:
Una función recursiva es una función que se llama a si mismo ya sea directa o indirectamente.
La recursividad directa es el proceso por el cual un método se llama asimismo desde el mismo cuerpo del programa: int fn(…) {
... fn(…);
... } La recursividad indirecta implica más de un método, por ejemplo: int fn1(…) {
... fn2(. . . . . .); } int fn2(…) {
... fn1(. . .); ... } Uno de los requisitos que debe tener un proceso recursivo para considerarlo valido es que debe invocarse así mismo (directa o indirectamente) y debe tener una condición de salida o condición base, para que garantice el no generará una secuencia infinita y agotara la memoria (Stack) – Pila). Por ejemplo: El factorial de un número no negativo n (denotado por n!) es el producto de: n! = n * (n-1) * (n- 2) …* 1 En el cual: 0! = 1 1! = 1 2! = 2 * 1 3! = 3 * 2 * 1 ...
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Si n es igual a 5 tendremos: tendremos: De modo que la función recursiva el factorial n sería: n! = n * (n-1)! = n * (n-1) * ((n-1)-1)!...1 Primero debemos de determinar cuál es la condición de salida o condición base, para ello tendemos que determinar cuándo dejaremos de invocar la recursividad, en este caso, se sabe que el factorial de cero (0) por notación es 1, es decir que esta sería nuestra condición de salida, si n = 0 se regresa 1, en cualquier otro caso (n>0), se invocara a la función recursiva de la siguiente forma n * n!*(n-1). De tal manera que el factorial de un entero no negativo n mayor o igual a cero se su función recursiva quedaría de la siguiente forma:
=0 1 ( ) { > 0 ∗ ( ( − 1) Al implementar implementar la fun función ción recu recursiva rsiva queda quedaría ría de la ssiguiente iguiente fforma: orma: long factorial (long n) { if (n == 0) return 1; else return n * factorial(n-1); } La recursividad en el recorrido de las pilas System.out.println (“Factorial de 5 es:” + factorial(5)); factorial(5)); n=5
n=4
n=3
n=2
5*factorial(4) 4*factorial(3) 5*factorial(4) 3*factorial(2) 4*factorial(3) 5*factorial(4) 2*factorial(1) 3*factorial(2) 4*factorial(3) 5*factorial(4)
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
n=1
1*factorial(0) 2*factorial(1) 3*factorial(2) 4*factorial(3) 5*factorial(4) 1*1 = 1 2*factorial(1) 3*factorial(2) 4*factorial(3) 5*factorial(4) 2*1=2 3*factorial(2) 4*factorial(3) 5*factorial(4) 3*2=6 4*factorial(3) 5*factorial(4) 4*6=24 5*factorial(4) 5*24=120
Factorial de 5: 120 Ejemplos: Deducir la función recursiva del producto de dos números naturales. El producto producto de a*b donde a*b donde a y b son enteros positivos, tiene dos soluciones:
Solución iterativa:
Solución recursiva: La condición de salida sería cuando b = 1, se regresaría el valor de a, mientras b > 1 la se invocaría la funciona recursiva de la siguiente forma a + multiplica(a, b-1).
(,,) { =1 > 1 + (, − 1)
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Por ejemplo 7 * 3 será:
producto(7,3) = 7 + producto(7,2) = 7 + 7 + producto(7,1) = 7 + 7 + 7 = 21 La función recursiva quedara: int producto (int a, int b) { if (b == 1) return a; else return a + producto(a, b - 1); } Deducir la función recursiva de la serie fibonacci: 0 1 1 2 3 5 8 13 … La seria fibonacci comienzan con los números 0 y 1, y el los demás resultan de la suma de los dos últimos: 0+1=1 1+1=2 1+2=3 2+3=5 3+5=8 5 + 8 = 13 .. . Entonces podemos deducir que: fibonacci(0) = 0 fibonacci(1) = 1 … … fibonacci(n)= fibonacci(n) = fibonacci(n fibonacci(n-1) -1) + fibonacci(n fibonacci(n-2) -2) Solución recursiva: Condición base+ siFibonacci(n-2). n = 0 ó n = 1 se regresa el valor de n, si n > 1 el valor Fibonacci será fibonacci(n-1)
() { =0||=1 > 1 ( − 1) +(−2) La función recursiva quedara: long fibonacci(long n) { if (n == 0 || n == 1) return n; else return fibonacci(n-1) + fibonacci(n-2 fibonacci(n-2); ); }
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Máximo como un divisor. El máximo como un divisor (mcd) de dos números a y b se define como el entero mayor que divide a ambos números. El mcd no está definido si tanto a como b son cero. Los valores negativos de a y b se sustituyen por sus valores absolutos. Siempre debe cumplirse la premisa a >= b. Si b = 0 el mcd es a. Por ejemplo el mcd(2970, 1265): a 2970 1265 440 385 55
b 1265 440 385 55 0
Operación 2970 % 1265=440 1265 % 440 = 385 440 % 385= 55 385 % 55 = 0 El mcd es 55
Indicador de Alcance 3.C.- Explica problemas propuestos
Elabora la solución recursiva y su implementación en código java los siguientes problemas: 1. Máximo cómo un divisor. 2. División por restas sucesivas de dos números enteros. 3. Sumar Invertir los un número. E Ejemplo: jemplo: Entrada: 123 Salida: 321. Entrada: 123 Resultado: 6. 4. dígitos que componen un número. Ejemplo: 5. Elevar a la potencia un número xn.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Instituto Tecnológico de Aguascalientes Departamento de Sistemas y Computación Asignatura: Carrera: Grupo:
Estructura y Organización de Datos Ingeniería en Tecnológicas de la Información y Comunicaciones
Hora:
Nombre del alumno: No. Control:
Fecha:
G uía de ob obss ervación de eexplicación xplicación de probl problem ema as propuestos Instrucciones para el llenado del instrumento: instrumento: Observe cuidadosamente la ejecución de las actividades que se enuncian y marque con una “X” en la columna “Si” cuando el candidato cumpla con el desempeño correspondiente y en la columna “No” cuando no realice las actividades señaladas.
No. 1 2 3 4 5 6 7 8 9
Unidad:
3.
Estructuras no lineales
Tema:
Indicador de Alcance 3.C.- Explica problemas propuestos
Al Inicio de la sesión:
Valor
Realiza su presentación ante el grupo (Nombre completo) Indica ante el grupo el indicador de alcance y la descripción del problema a resolver Durante la sesión: Maneja la términos, conceptos y conocimientos en su exposición de forma correcta Explica la resolución del problema de forma coherente y clara Interactúa con el grupo manteniendo contacto visual durante la exposición. Emplea un tono de voz adecuado adec uado durante la exposición. Mantiene la atención del grupo durante la exposición. Cierre de la sesión: Responde a las preguntas de forma coherente y clara. Cumple con el tiempo planeado para la sesión: 8 a 10 minutos.
Cumple Si No
5 5 30 30 5 5 5 5 10 Puntuación Total
Nivel de desempeño mínimo aceptable: 70 pts. NOMBRE Y FIRMA DE CONFORMIDAD DEL ALUMNO:
Puntos Retroalimentación
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
3.2.
Árboles.
Las listas enlazadas, pilas y colas son estructuras de datos lineales (es decir, secuenciales). Un árbol es una estructura bidimensional no lineal, con propiedades especiales. Por medio de los árboles se pueden representar estructuras jerárquicas, direcciones o etiquetas de una manera organizada.
V4
V5
V6
V7
V3
V2 V1
Dentro de las ciencias computacionales, los árboles tienen muchas aplicaciones, entre estas se encuentran:
Organización de tablas de símbolos en los compiladores. Representació Representación n de árboles de decisión. Asignación de bloques de memoria de tamaño variable. Ordenación de datos. Búsqueda de datos. Solución de juegos. Teoremas. Etc.
Definición: Conjunto finito T de de uno o más nodos tal que:
v1 es el nodo raíz. vn-1 es el padre de vn. v1, v2, …, vn-1 son ancestros de vn. vn es un hijo de vn-1. Si a es un ancestro de b, entonces b es un descendiente de a. Si a y b son hijos de c , entonces a y b son hermanos. Si a no tiene hijos, entonces a es un vértice terminal (o una hoja). Si a no es un vértice terminal, entonces a es un vértice interno (o una rama).
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Nodo Raíz Vértice o
V1
Nodo
Nivel 0
V3
Arco
V2
Nivel 1 Nivel 2
V7
V6
V5
V4
Cada vértice o nodo puede tener un nombre y una información asociada. Un arco es una conexión entre dos vértices o nodos. Un camino es una lista de nodos diferentes en los que los nodos están conectados por medio de arcos. Una propiedad que se distingue a los árboles es que existe exactamente un camino entre el nodo raíz y cada uno de los nodos del árbol, por ejemplo, el camino desde la raíz a la hoja v 5, se representa v1, v2, v5 que incluye las ramas (v1, v2) y (v2, v5) y su longitud es 2.
La alturadeo profundidad es la longitudaldel camino largoraíz más uno.distancia cero. El nivel un nodo es su distancia nodo raíz. más El nodo tiene Los hijos del nodo raíz están en el nivel uno, mientras que sus hijos están en el nivel 2 y así sucesivamente. El grado de un nodo se determina por el número de hijos que tiene. Los nodos que tienen grado cero son hojas.
Ejemplo: A
B
D
I
E
J
K
L
¿Cuál es el camino de A-L? ¿Cuáles son los hijos de G? ¿Cuáles son los nodos de grado cero? ¿Cuáles son los nodos de grado dos?
¿Cuáles los nodos de tres? ¿Cuál esson la profundidad delgrado árbol?
C
F
G
M
N
H
O
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Representación de un árbol Existen varias formas de representación de un árbol en forma gráfica: Niveles: 01 v1 02 v2 03 v4 03 v5 02 v3 03 v6 03 v7 Paréntesis anidados: v1(v2(v4,v5), v3(v6,v7)) Grafos: V1
V2
V3
V7
V6
V5
V4
Diagrama de Venn: v1 v2
v3 v5
v4
v6
v7
Un árbol ordenado es aquel que está estructurado bajo una organización específica. Representación en memoria de árboles. A B
C
D /
I
/
E /
J
/
/
K
/
/ /
L
/
F
/
/
H
/
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Árboles generales. También mediante los árboles podemos representar situaciones de la vida diaria tales como: Presidente
Vice-Presidente para asuntos Académicos
Decano de Artes y Ciencias Ciencias
Jefe de Ciencias de la Computación
Jefe de Matemáticas
Vice-Presidente para asuntos Administrativos Administrativo s
Director de Plantación Académica
Decano de Comercio
…
Jefe de Contaduría
Director de Adquisiciones
…
Urano
Afrodita Afro dita
Cronos Cronos
Atlas
Prometeo Prometeo
Eros
Zeus
Poseidón
Hades
Ares
Apolo
Atenas
Hermes
Hera Heracles cles
Seles Seles Navratilova Graf Sabatini Graf Graf
Árboles binarios.
Definición: Es un árbol en el cual sus nodos no puede tener más de dos hijos.
Un árbol binario puede tener cero, uno o dos hijos. Al nodo izquierdo se le llama hijo izquierdo y al nodo derecho hijo derecho.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
A
B
D
E
G
C
F
H
Recorrido de árboles binarios. Existen tres formas de recorrer un árbol binario, las cuales son Preorden, Incorden Postorden. Preorden
Preorden
El recorrido es raíz, hijo izquierdo e hijo derecho. derecho.(rid) (rid)
Inorden
Inorden
(ird) El recorrido es hijo izquierdo, raíz e hijo derecho. (ird)
Postorden
Postorden
El recorrido es hijo izquierdo, hijo derecho y raíz. (idr) (idr)
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Preorden: 20, 15, 10, 5, 12, 18, 17, 19, 33, 25, 21, 27, 50, 40, 70
Inorden: 5, 10, 12, 15, 17, 18, 19, 20, 21, 25, 27, 33, 40, 50, 70
Postorden: 5, 12, 10, 17, 19, 18, 15, 21, 27, 25, 40, 70, 50, 33, 20
Declaración de un nodoArbol public class NodoArbol { private NodoArbol hizq; private int dato; private NodoArbol hder;
public NodoArbol( int dat ) { this( null, dat, null ); } public NodoArbol( NodoArbol izq, int dat, NodoArbol der ) { dato hizq = = dat; izq; hder = der; } int getDato() { return dato; } NodoArbol getHIzq() { return hizq; } NodoArbol getHDer() { }
return hder;
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES void setDato(int dat) { dato = dat; } void setHIzq(NodoArbol izq) { hizq = izq; } void setHDer(NodoArbol der) { hder = der; }
}
Algoritmo preorden utilizando pilas public static void preordenPila(NodoArbol r) { TipoPilaNodoArbol TipoPilaNodoArb ol Pila = new TipoPilaNodoArbol(); TipoPilaNodoArbol(); NodoArbol recorre; Pila.insertar(null); recorre = r; while (recorre != null) { procesar el nodo nodo recorre if (recorre.getHDer() != null) Pila.insertar(recorre.getHDer()); if (recorre.getHIzq() != null) recorre = recorre.getHIzq(); recorre.getHIzq(); else recorre = Pila.quitar(); } }
Algoritmo preorden recursivo public static void preordenRecursivo(NodoArbol r) { if (r != null) { procesar el nodo r preordenRecursivo(r.getHIzq()); preordenRecursivo(r.getHDer()); } }
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Algoritmo inorden utilizando pilas public static void inordenPila(nodoArbol r) { TipoPilaNodoArbol TipoPilaNodoArb ol Pila = new TipoPilaNodoArbol TipoPilaNodoArbol (); NodoArbol recorre; Pila.insertar(null); recorre = r; while (recorre != null) { while (recorre != null) { Pila.insertar(recorre); recorre = recorre.getHIzq(); recorre.getHIzq(); } recorre = Pila.quitar(); while (recorre != null) { procesar el nodo recorre if (recorre.getHDer() != null) { recorre = recorre.getHDer(); recorre.getHDer(); break; } recorre = Pila.quitar(); } } }
Algoritmo inorden recursivo public static void inordenRecursivo(NodoArbol r) { if (r != null) { inordenRecursivo(r.getHIzq()); procesar el nodo r inordenRecursivo(r.getHDer()); } }
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Algoritmo postorden utilizando pilas public static void postordenPila(NodoArbol r) { TipoPilaNodoArbol Pila = new TipoPilaNodoArbol(); NodoArbol recorre; Pila.insertar(null); recorre = r; while (recorre != null) { while (recorre != null) { Pila.insertar(recorre); if (recorre.getHDer() != null) Pila.insertar( (-1) * recorre.getHDer()); recorre = recorre.getHIzq(); } recorre = Pila.quitar(); Pila.quitar(); while (recorre > 0) { procesa el el nodo recorre recorre recorre = Pila.quitar(); } if (recorre < 0) recorre = (-1) * recorre; } }
Algoritmo postorden recursivo public static void postordenRecursivo(NodoArbol r) { if (r != null) { postordenRecursivo(r.getHIzq()); postordenRecursivo(r.getHDer()); procesar el nodo r } }
El siguiente programa crea un árbol ordenado ascendentemente, mostrando los datos mediante el recorrido preorden y utiliza recursión. Primero solicita el número de nodos que se darán de alta, posteriormente solicita el valor de cada nodo y va creando el árbol binario, al final muestre la información. package ejemplo_arbol; NodoArbol { public class NodoArbol private NodoArbol hizq; private int dato; private NodoArbol hder; public NodoArbol( int dat ) { this( null, dat, null ); }
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES public NodoArbol( NodoArbol izq, int dat, NodoArbol der ) { dato = dat; hizq = izq; hder = der; } int getDato() { return dato; } NodoArbol getHIzq() { return hizq; } NodoArbol getHDer() { return hder; } void setDato(int dat) { dato = dat; } void setHIzq(NodoArbol izq) { hizq = izq; } void setHDer(NodoArbol der) { hder = der; }
}
package ejemplo_arbol; import javax.swing.JOptionPane; javax.swing.JOptionPane; public class Ejemplo_PreordenRe cursivo { Ejemplo_PreordenRecursivo public static void main(String[] args) { int i,cuantos, inf; NodoArbol nodo, recorre, raiz = null; cuantos = Integer.parseInt( Integer.parseInt( JOptionPane.showInputDialog("Cuantos elementos deseas:") );
// Construcción del arbol ordenado for (i=0; i < cuantos ; i++) { inf = Integer.parseInt( Integer.parseInt( JOptionPane.showInputDialog("Dame JOptionPane.showInputDialog( "Dame el valor del nodo " + i + ":"));
nodo= new== NodoArbol(inf); if (raiz null) raiz = nodo;
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES else { recorre = raiz; while (true) { if (nodo.getDato() > recorre.getDato()) recorre.getDato()) if (recorre.getHDer() == null) { recorre.setHDer(nodo); break; } else recorre = recorre.getHDer(); recorre.getHDer(); else if (recorre.getHIzq() == null) { recorre.setHIzq(nodo); break; } else recorre = recorre.getHIzq(); recorre.getHIzq(); } } } String Salida = ""; Salida = "Preorden:\n"; Salida += " Recursivo: " + preordenRecursiv preordenRecursivo(raiz); o(raiz); JOptionPane.showMessageDialog( null,Salida, JOptionPane.showMessageDialog( "Arbol Binario",JOptionPane.PLAIN_MESSAG Binario",JOptionPane.PLAIN_MESSAGE); E); } public static String preordenRecursivo(NodoArbol r) { if (r != null) { return r.getDato() + " " + preordenRecursivo(r.getHIzq()) preordenRecursiv o(r.getHIzq()) + preordenRecursivo(r.getHDer()); } else return ""; }
}
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Indicador de Alcance 3.C.- Explica problemas propuestos
1. Elabore un programa en java que crea un árbol binario ordenado ascendentemente de cadena de caracteres, posteriormente solicite una cadena y la busque en el árbol e indique se la encuentra a no. 2. de Elabore un de programa en java que crea árbolconforman binario ordenado ascendentemente cadena caracteres e imprima los un nodos sus ramas. 3. Elabore un programa en java que crea un árbol binario ordenado ascendentemente de cadena de caracteres e imprima los nodos que son abuelos. 4. Elabore un programa en java que crea un árbol binario ordenado ascendentemente de números enteros e imprima cuantos nodos tienen información de un numero par. 5. Elabore un programa en java que crea un árbol binario ordenado ascendentemente de números enteros, solicite un número desde teclado e imprima si se encuentra ese valor en el árbol. 6. Elabore un programa en java que crea un árbol binario ordenado ascendentemente de números un número desdeel teclado, posteriormente el número en elenteros, árbol y solicite si lo encuentra regrese nodo donde lo encontró,busque en caso contrario regrese null. 3.3.
Grafos.
Definición. Un grafo está representado por un conjunto de vértices o nodos V y y un conjunto de arcos A , representado por G=(V,A). Un arco o arista representa una relación entre dos nodos y se representa por (u, v), siendo u y v el par de nodos. Tipos de grafos. Un grafo no dirigido es aquel en que sus arcos son pares no ordenados o no dirigidos. Un grafo dirigido es aquel en el que sus arcos son pares ordenados o dirigidos (sus arcos tienen una flecha que indica la dirección de la relación). A un grafo dirigido también se le llama diágrafo.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES G=(V,A)
G(V, A)
1
C
4
E
H
5
F
D
9
7
V={1, 4, 5, 7, 9} A={(1, 4), (4, 1), (1, 5), (5, 1), (4, 9), (9, 4), (5, 7), (7, 5), (7, 9), (9, 7)} (a)
V={C, D, E, F, H} A={ (C, D), (D, F), (E, C) (E, H), (H, E) } (b)
(a) Grafo no dirigido y (b) Grafo dirigido En ocasiones las relaciones entre nodos tienen asociado una magnitud denominada factor o peso, y al grafo se le llama grafo ponderado. Por ejemplo, los pueblos que forman una comarca, los nodos están conformados por los pueblos, los arcos por los caminos y los pesos es la distancia en kilómetros.
San Nicolas
7 Lupiana 5 12
El Centenillo
Valleviejo
6 El Novillo
7
Grafo ponderado Grado de un nodo En un grafo no dirigido el grado de un nodo v (grado(v)), es el número de arcos que contiene el nodo v . Por ejemplo en el primer ejemplo de grafo no dirigido en el inciso (a), el grado(9) = 2, ahora considerando grafo de la comarca tendremos que el grado(Lupiana) = 3. En un grafo dirigido se distingue entre grado de entrada y grado de salida; el grado de entrada de un nodo v (gradoEntrada(v)), es el número de arcos que entran al nodo v y y el grado de salida del nodo v (gradoSalida(v)) (gradoSalida(v)), es el número de arcos que salen de v . Por ejemplo, en el primer ejemplo de grafo no dirigido en el inciso (b) tendremos: gradoEntrada(E) = 1 y el gradoSalida(E) = 2.
Camino
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Un camino P de de longitud n, desde el vértice v 00 a a v n, es un grafo G es la secuencia de n+1 A(arcos) para 0 ≤ i ≤ n. n. Matemáticame Matemáticamente nte el camino vértices v0, v1, v2,…, vn tal que (vi, vi+1) A(arcos) se representa por P=(v0, v1, v2,…, vn). 7
4
10 11 6
9
Grafo no dirigido Por ejemplo, camino cami no del nodo 4 al nodo 7 se representa por P1 = (4, ( 4, 6, 9, 7) con una longitud 3, otro camino seria P2=(10, 11). En el ejemplo de la comarca el camino P= (Lupiana, Valleviejo, El Novillo) tiene una longitud de 19 (12 + 7). 1, v2,…, vn) es simple si todos los nodos que forman el camino son Un camino P=(v0, vser distintos, pudiendo igual v0 y vn (los extremos del camino). Los caminos de P1 y P2 son caminos simples.
En un grafo dirigido, un ciclo es un camino simple cerrado. Por tanto, un ciclo empieza y termina en el mismo nodo, v0 = vn,; debe tener más de un arco. Un grafo dirigido sin ciclos es llamado acíclico (GDA-Grafo Dirigido Acíclico). En general, un ciclo de longitud k se denomina k-ciclo.
A
B
C
D
E
F
Grafo dirigido con ciclos En la figura anterior anteri or se muestra un grafo dirigido dirigi do en el que los vértices (A, E, B, F, A) forman for man un ciclo de longitud 4, por lo tanto, es de 4-ciclo. Un grafo no dirigido es conexo si existe un camino entre cualquier par de nodos que forman el grafo y es fuertemente conexo si todos sus nodos están conectados.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
A
C
A
C
E F
F D
D (a)
(b)
(a) Grafo conexo y
(b) Grafo fuertemente conexo
Representación de grafos en memoria. Primero considere los vértices o nodos como números consecutivos empezando del índice cero. Tome en cuenta que el número de nodos son finitos. Se puede elegir una representación secuencial, mediante un arreglo bidimensional conocida como matriz de adyacencia ; o bien una representación mediante una estructura multienlazada, denominada denomi nada lista de adyacencia. La elección de una representación u otra depende del tipo de grafo y de las operaciones que se vayan a realizar sobre los vértices y arcos. Para un grafo denso lo menor es utilizar una matriz de adyacencia. Para un grafo disperso se suelen utilizar listas de adyacencia.
Camino Sea G=(V, A) un grafo de n nodos, siendo V={v0, v1, v2,..,vn-1} el conjunto de nodos, y A={(v i, v j)} el conjunto de arcos. Los nodos se pueden representar por números consecutivos de 0 a n-1. La representación de los arcos se hace con una matriz M de n por n, denominada matriz de adyacencia, tal que cada elemento Mij puede tomar los valores: M ij 01
Por ejemplo, de un grafo dirigido:
si hay un arco (v i , v j ) si no hay un arco (v i , v j )
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Matriz de adyacencia:
0 1 2 3 4
D F K L R
Lista de adyacencia:
0 1 2 3 4 D F K L R
D
F
F
D
0
K
1 1 0 0
1 0 0 1
0 0 0 0 1 1 0 0 0 0 0 0
K
/
K
/
/
/
L
F
R
D
/
Por ejemplo, de un grafo no dirigido:
3
2
1
4
Matriz de adyacencia:
0 1 2 3 4
1 2 3 4 5
5
Lista de adyacencia:
0 1 2 3 4 1 2 3 4 5
1
2
4
2
1
3
/
0 1 0 1 1
3 4
2 1
4 3
/
5
1
3
/
1 0 1 0 0
0 1 0 1 1
1 0 1 0 0
1 0 1 0 0
5
/
5
/
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Ejemplo de un grafo ponderado: 5
A
4
8
5
F
5
W
L
9
V
Lista de adyacencia:
Matriz de adyacencia:
A
0 1 2 3 4 A F L V W 0 1 2
A F L
0 5 0
0 0 0 5 0 0
0 5 0
0 0 9
3 4
V W
8 0
0 0 0 4
0 0
0 0
/
F
A 5
L
L
W 9
/
V
A 8
/
W
F 4
/
5
V 5
/
Indicador de Alcance 3.C.- Explica problemas propuestos
De los siguientes grafos represéntelos en su matriz de adyacencia y lista de adyacencia. San Blass
10 Futuro 6
8
5 4
Villa Grande
6
El Rincon
El Rancho
8
v1
v2
v6
a
c
b
v4
v3
v5
d
e
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
R ecorrido de un G Graf rafo o Recorrer un grafo consiste en visitar (procesar) cada uno de los nodos a partir de uno de sus nodos, en otras palabras, recorrer un grafo consiste en visitar todos los nodos los vértices alcanzables a partir de un nodo de inicio. Existen dos formas de recorrer un grafo:
Recorrido en anchura.-
Para realizar el recorrido y procesar los nodos utiliza una cola Recorrido en profundidad.- Para realizar el recorrido y procesar los nodos utiliza una pila
R ecorrido eenn A nchura Este método hace uso de una cola como estructura en la que se mantienen los vértices marcados que se van a procesar El orden en que una cola trata los elementos hace que, a partir del vértice vért ice de partida, v, se procesen primer primero o todos los nodos adyacentes a v, después se procesen los nodos adyacentes de estos que no estén procesados o visitados. Algoritmo: v nodo inicial w nodo a procesar
TipoRetorno recorreAnchura(int matriz[][], Character v) { TipoColaGrafo Cola = new TipoColaGrafo(); TipoColaGrafo Procesado = new TipoColaGrafo(); Character w; Cola.insertar(v); While (!Cola.colavacia()) { w = Cola.quitar(); Si (!Procesado.buscar( (!Procesado.buscar(w)) { Procesar el nodo w; Procesado.insertar(w); } Insertar a la Cola todos los vértices adyacentes a w no procesados } return TipoRetorno;
}
Cola
Procesados
D BC
D
CH
B
HR
C
RAT
H
AT
R
T
A T
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
R ecorri ecorrido do en Profundida Profundidad d El recorrido comienza por el vértice v, este se marca como procesado o visitado y se mete a la pila. Después se visitan en profundidad cada vértice adyacente a v no procesado o visitado; así hasta que no haya más vértices adyacentes no visitado o procesados. Esta estrategia de examinar los nodos nod os se denomina en profundidad por que la dirección de visitar es hacia adelante mientras sea posible; al contrario que la búsqueda en anchura que primero visita todos los vértices posibles en amplitud. Algoritmo:
v nodo inicial w nodo a procesar
TipoRetorno recorreProfundidad(int matriz[][], Character v) { TipoPilaGrafo Pila = new TipoPilaGrafo(); TipoColaGrafo Procesado = new TipoColaGrafo(); Chararacter w; Pila.insertar(v); While (!Pila.pilavacia()) { w = Pila.quitar(); Si (!Procesado.buscar( (!Procesado.buscar(w)) { Procesar el nodo w; Procesado.insertar(w); } Insertar a la Pila todos los vértices adyacentes a w no procesados } return TipoRetorno; }
Pila
Procesados
D BC
D
BR
C
BH
R
BAT
H
BA
T
B
A B
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Evidencia de Aprendizaje.- Resolución de Problemas propuestos de la Unidad 3
1. Del siguiente árbol binario indique cual es el o orden rden de los nodos en preorden, inorden y postorden.
2. De los siguientes grafos represéntelos en su matriz de adyacencia y lista de adyacencia.
a)
b)
3. De los siguientes grafos indique el orden de p procesamiento rocesamiento de los nodos al recorrerlo por anchura y profundidad, comenzando por el nodo H.
a)
b)
TECNOLÓGICO NACIONAL DE MÉXICO INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Indicador de Alcance 3.E.- Resolución de problemas adicionales a los problemas propuestos.
Elabore un programa que tenga un método recursivo que transforme un número entero positivo a notación binaria. Debe de presentar: Función recursiva Clase principal Método recursi recursivo vo Ejecución del programa mediante imágenes que muestre el buen funcionamiento del programa 100%.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Instituto Tecnológico de Aguascalientes Departamento de Sistemas y Computación Asignatura: Carrera: Grupo:
Estructura y Organización de Datos Ingeniería en Tecnológicas de la Información y Comunicaciones
Hora:
Nombre del alumno: No. Control:
Fecha:
R úbrica de res resolución olución de probl problem emas as propuestos pr opuestos de lla a Unida Unidad d3 Instrucciones: Indique con una “X” en la intersección fila - columna las características mínimas que cumple el proyecto entregado como evidencia, anote los puntos en cada criterio y súmelos.
Criterios de desempeño
Portada
Pts. Desarrollo Problema 1 Pts. Desarrollo Problema 2 Pts. Desarrollo Problema 3 Pts. Conclusiones Pts.
Rúbrica
Pts.
Excelente Presenta una portada con: 1. Logo del TecNM y del ITA en la parte superior 2. Nombre del Instituto 3. Nombre de la carrera 4. Nombre de la materia y hora 5. Unidad y producto de aprendizaje. 6. Nombre y número de control del estudiante 7. Fecha Sin errores ortográficos
Notable Presenta una portada con seis de los conceptos del apartado de excelente y sin errores ortográficos.
5 pts.
4.5 pts.
Presenta la resolución del problema con los siguientes rubros correctos al 100%: Descripción del problema. Orden de los nodos nodos en: Preorden, Inorden y Postorden.
Presenta la resolución del problema con los siguientes rubros correctos al 80%: Descripció n del problema. Orden de los nodos en: Preorden, Inorden y Postorden.
Bueno Presenta una portada con cinco de los conceptos del apartado de excelente y sin errores ortográficos.
4 pts. Presenta la resolución del problema con los siguientes rubros correctos al 80%: Orden de los nodos nodos en: Preorden, Inorden y Postorden.
Suficiente Presenta una portada con cuatro de los conceptos del apartado de excelente y sin errores ortográficos.
3.5 pts. Presenta la resolución del problema con los siguientes rubros correctos al 66%: Orden de los nodos en: Preorden, Inorden y Postorden.
Insuficiente Presenta un portada con menos de cuatro de los conceptos mostrados en el apartado de excelente o tiene errores ortográficos o No presenta portada.
0 pts. El programa que presenta no resoluciona correctamente correctamen te lo solicitado o no presenta la solución del problema.
25 pts.
22.5 pts.
20 pts.
17.5 pts.
0 pts.
Presenta la resolución del problema con: Descripción del problema. a) Matriz de adyacencia y Lista de adyacencia. b) Matriz de adyacencia y Lista de adyacencia. Solucionados correctamente al 100%.
Presenta la resolución del problema con: Descripció n del problema. a) Matriz de adyacencia y Lista de adyacencia. b) Matriz de adyacencia y Lista de adyacencia. Solucionados correctamente al 75%.
Presenta la resolución del problema con: a) Matriz de adyacencia y Lista de adyacencia. b) Matriz de adyacencia y Lista de adyacencia. Solucionados correctamente al 75%.
Presenta la resolución del problema con: a) Matriz de adyacencia y Lista de adyacencia. b) Matriz de adyacencia y Lista de adyacencia. Solucionados correctamente al 50%.
El programa que presenta no resoluciona correctamente correctamen te lo solicitado o no presenta la solución del problema.
25 pts.
22.5 pts.
20 pts.
17.5 pts.
0 pts.
Presenta la resolución del problema con: Descripción del problema. a) Lista de nodos en anchura y profundidad. b) Lista de nodos en anchura y profundidad. Solucionados correctamente al 100%.
Presenta la resolución del problema con: Descripció n del problema. a) Lista de nodos en anchura y profundida profundidad. d. b) Lista de nodos en anchura y profundida profundidad. d. Solucionados correctamente al 75%.
Presenta la resolución del problema con: a) Lista de nodos en anchura y profundidad. b) Lista de nodos en anchura y profundidad. Solucionados correctamente al 75%.
Presenta la resolución del problema con: a) Lista de nodos en anchura y profundidad. profundidad. b) Lista de nodos en anchura y profundidad. profundidad. Solucionados correctamente al 50%.
El programa que presenta no resoluciona correctamente correctamen te lo solicitado o no presenta la solución del problema.
25 pts. Presenta una opinión personal coherente con el trabajo y sin errores ortográficos en más de media cuartilla.
22.5 pts. Presenta una opinión personal coherente con el trabajo y sin errores ortográficos en media cuartilla.
20 pts. Presenta una opinión personal coherente con el trabajo y sin errores ortográficos en menos de media cuartilla.
17.5 pts.
0 pts.
Presenta una opinión personal coherente con el trabajo y con a lo menos dos errores ortográficos en menos de media cuartilla.
Presenta una opinión personal y con más de dos errores ortográficos o No presenta aportaciones personales.
15 pts.
13.5 pts.
12 pts.
10.5 pts.
El trabajo tiene impreso la Rúbrica con el llenado de los siguientes rubros: o No. de grupo y hora o Nombre del alumno o Número de control o Fecha de entrega o Nombre del Alumno y Firma
El trabajo tiene impreso la Rúbrica y falta el llenado de uno de los siguientes rubros: o No. de grupo y hora o Nombre del alumno o Número de control o Fecha de entrega o Nombre del Alumno y Firma
El trabajo tiene impreso la Rúbrica y falta el llenado de dos de los siguientes rubros: o No. de grupo y hora o Nombre del alumno o Número de control o Fecha de entrega o Nombre del Alumno y Firma
El trabajo tiene impreso la Rúbrica solo tiene llenado uno o ninguno de los siguientes rubros: o No. de grupo y hora o Nombre del alumno o Número de control o Fecha de entrega o Nombre del Alumno y Firma
5 pts.
4.5 pts.
4 pts.
3.5 pts.
Indicador de alcance E Indicador de alcance F
Resolución de problemas adicionales a los problemas propuestos. propuestos. Entrega la resolución de problemas propuestos propuestos en la fecha y hora señalada
Calificación Nivel de desempeño mínimo aceptable: 70 pts. NOMBRE Y FIRMA DE CONFORMIDAD DEL ALUMNO:
0 pts. No presenta la rúbrica impresa.
0 pts.
Retroalimentación
TECNOLÓGICO NACIONAL DE MÉXICO INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Evidencia de Aprendizaje.- Proyecto de la Unidad 3
Elabore un proyecto en Java que mediante un menú despliegue si se quiere crear un Árbol Binario o un Grafo o Salir, si selecciona Árbol Binario, despliegue un submenú que indique si quiere Crear, Recorrer o Regresar, si seleccionar Crear, cree una árbol binario de datos tipo String, si seleccionar Recorrer muestre un submenú que indique si desea recorrerlo en Preorden, Inorden, Postorden o Regresar, al seleccionar método dealrecorrido muestre otro submenú que indique si desea utilizar Pilas, Recursiónun o Regresar, seleccionar Pilas o Recursión muestre los nodos según la opción seleccionada. Si selecciona Grafo, despliegue un submenú que indique si quiere Crear, Recorrer o Regresar, si seleccionar Crear, cree un grafo capturando el tipo de grafo y magnitud, posteriormente muestre otro submenú donde indique si quiere recorrerlos por Anchura, Profundidad o Regresar, si seleccionar un método muestre los nodos según la opción seleccionada. Solo puede terminar cuando en el menú principal seleccione Salir. Nota. -
Debe de validar cualquier eventualidad.
Indicador de Alcance 3.A.- Diseñar opciones adicionales al proyecto.
Que el proyecto permita guardar y cargar arboles binarios y grafos mediante archivos.
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Instituto Tecnológico de Aguascalientes Departamento de Sistemas y Computación Asignatura: Carrera: Grupo:
Estructura y Organización de Datos Ingeniería en Tecnológicas de la Información y Comunicaciones
TID1012/TC_
Hora:
Nombre del Equipo:
Fecha:
G uía de Obs ervación y L is ta de Cotejo del Pr oyecto de la Unidad 3 Instrucciones para el llenado del instrumento: instrumento: Observe cuidadosamente la ejecución de las actividades que se enuncian y marque con una “X” en la columna “Si” cuando el equipo cumpla con el desempeño correspondiente al 100% o porcentaje de cumplimiento y en la columna “No” cuando no realice re alice las actividades señaladas. No.
Exposición del proyecto y entrega del trabajo
Valor
Cumple Si No
Al Inicio de la sesión: sesión: 1 2
Realiza la presentación ante el grupo de cada uno de sus integrantes (Nombre completo). Indica ante el grupo la descripción del proyecto a resolver.
2 2
Durante la sesión: Explican el funcionamiento del proyecto: Crear y Recorrer Arboles (Preorden, Inorden y Postorden con pilas y recursión). o o Grafos (Anchura y Profundidad) o Validaciones De una forma coherente y clara Interactúa con el grupo manteniendo contacto visual durante la exposición. Emplea un tono de voz adecuado durante la exposición. Mantiene la atención del grupo durante la exposición.
3 4 5 6
20 2 2 5
Cierre de la sesión:
7 8
Responde a las preguntas de forma clara Cumple con el tiempo planeado para la sesión de 17 a 25 minutos.
2 15
Entrega trabajo impreso:
9
10 11 12 13 14
La portada contiene: 1. Logo del TecNM y del ITA en la parte superior. 2. Nombre del Instituto. 3. Nombre de la carrera. 4. Nombre de la materia y hora. 5. Unidad y descripción del proyecto. 6. Nombre y número de control los estudiantes. 7. Fecha. El desarrollo contiene la resolución del problema con los siguientes rubros: Descripción del problema. Código Arboles (Preorden (Preorden,, Inorden y Postorden con p pilas ilas y recursión), Grafos (Anchura y Profundidad) y Validaciones. Ejecución del p programa rograma mediante imágenes que muestre el buen funcionamiento del programa 100%. La conclusión tiene con una opinión personal coherente con el tr abajo por cada integrante del equipo. El trabajo tiene texto justificado y maneja títulos y subtítulos El trabajo está libre de errores ortográficos. Diseñar opciones adicionales al proyecto: El proyecto permite guardar y cargar arboles binarios y grafos mediante archivos.
5
20 15 5 5 Indicador de Alcance A
Puntuación Total
Nivel de desempeño mínimo aceptable: 70 pts. pts. NOMBRES Y FIRMAS DE CONFORMIDAD LOS ALUMNOS:
Puntos
Retroalimentación
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
4.
Métodos de ordenamiento y búsqueda
Uno de los procedimientos más comunes y útiles en el procesamiento de datos, es la clasificación u ordenación de los mismos. Se considera ordenar al proceso de reorganizar un conjunto dado de objetos en una secuencia determinada. Cuando se analiza un método de ordenación, hay que determinar cuántas comparaciones realizo, cuantos intercambios hizo y cuánto tiempo tardo. La colocación en orden de una lista de valores se llama Ordenación y a la localización de un elemento de una lista se llama búsqueda.
4.1.
Algoritmos de ordenamiento.
Existen varios métodos para ordenamiento y clasificados en tres formas:
Intercambio Selección Inserción.
En cada familia se distinguen dos versiones: un método simple y directo, fácil de comprender, pero de escasa eficiencia efic iencia respecto al tiempo de ejecuc ejecución, ión, y un método rápido, más sofisticado en su ejecución por la complejidad de las operaciones a realizar, pero mucho más eficiente en cuanto a tiempo de ejecución. En general, para arreglos con pocos elementos, los métodos directos son más eficientes (menor tiempo de ejecución) mientras que para grandes cantidades de datos se deben emplear los llamados métodos rápidos.
Intercambio El método de intercambio se basa en comparar los elementos del arreglo e intercambiarlos si su posición actual o inicial es contraria inversa a la deseada. Pertenece a este método el de la burbuja. Aunque no es muy eficiente para ordenar listas grandes, es fácil de entender y muy adecuado para ordenar una pequeña lista de elementos. Una pasada por la ordenación de burbujeo consiste en un recorrido completo a través del arreglo, en el que se comparan los contenidos de las casillas adyacentes, y se cambian si no están en orden. La ordenación por burbujeo completa consiste en una serie de pasadas ("burbujeo") que termina con una en la que ya no se hacen cambios porque todo está en orden. Ejemplo: Arreglo o riginal
7
4
9
2
4 7
7 4
2 9
9 2 5
5
10
1
6
8
3
5 9
6 10 3 10 10 1 6 8 3 1 10 10 8 10 10
mo v 7
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
7 5
1 9
9 1 6
7 6
4
7 2
2 4
4 2
5
7 1
6 1 7
4
1 5
5 1
6
7 3
2
Arreglo Final
5 2 7
8 6 9
9 8 3
8 3
3 9
10
mo v 6
3 8
9
10
mo v 4
3 7
8
9
10
mo v 2
6 3
7
8
9
10
mo v 2
2
4 1
1 4
5
3 6
1 2
2 1
4
5 3
3 5
6
7
8
9
10
mo v 2
1
2
3 4
4 3
5
6
7
8
9
10
mo v 1
1
2
3
4
5
6
7
8
9
10
mo v 0
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Algoritmo: Burbuja(int[] Arreglo) Realiza movimiento = 0 Para I=0 hasta Arreglo.longitud – 1 Inc 1 Si Arreglo[I+1] < Arreglo[I] Arreglo[I] Arreglo[I+1] // Intercambiar movimientos = movimientos + 1 Fin_Si Fin_para Mientras (movimientos != 0) Fin_Burbuja
Indicador de Alcance 4.C.- Explica problemas propuestos
Investigar y explicar los algoritmos de ordenamiento: 1. Burbuja bidireccio bidireccional nal 2. Diferencia del algoritmo de la burbuja respecto al que está en la página http://lwh.free.fr/pages/algo/tri/tri_bulle_es.html
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Instituto Tecnológico de Aguascalientes Departamento de Sistemas y Computación Asignatura: Carrera: Grupo:
Estructura y Organización de Datos Ingeniería en Tecnológicas de la Información y Comunicaciones
Hora:
Nombre del alumno: No. Control:
Fecha:
G uía de ob obss ervación de eexplicación xplicación de probl problem ema as propuestos Instrucciones para el llenado del instrumento: instrumento: Observe cuidadosamente la ejecución de las actividades que se enuncian y marque con una “X” en la columna “Si” cuando el candidato cumpla con el desempeño correspondiente y en la columna “No” cuando no realice las actividades señaladas.
No. 1 2 3 4 5 6 7 8 9
Unidad:
4.
Métodos de ordenamiento y búsqueda
Tema:
Indicador de Alcance 4.C.- Explica problemas propuestos
Al Inicio de la sesión:
Valor
Realiza su presentación ante el grupo (Nombre completo) Indica ante el grupo el indicador de alcance y la descripción del problema a resolver Durante la sesión: Maneja la términos, conceptos y conocimientos en su exposición de forma correcta Explica la resolución del problema de forma coherente y clara Interactúavisual con eldurante grupo manteniendo contacto la exposición. Emplea un tono de voz adecuado adec uado durante la exposición. Mantiene la atención del grupo durante la exposición. Cierre de la sesión: Responde a las preguntas de forma coherente y clara. Cumple con el tiempo planeado para la sesión: 8 a 10 minutos.
Cumple Si No
5 5 30 30 5 5 5 5 10 Puntuación Total
Nivel de desempeño mínimo aceptable: 70 pts. NOMBRE Y FIRMA DE CONFORMIDAD DEL ALUMNO:
Puntos Retroalimentación
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
S elecci elección ón Los métodos de ordenación por selección se basan en dos principios básicos: Seleccionar el elemento más pequeño (o más grande) del arreglo. Colocarlo en la posición más baja (o más alta) del arreglo. A diferencia del método de la burbuja, en este método el elemento más pequeño (o más grande) es el que se coloca en la posición final que le corresponde. Ejemplo: 7 4/2/1 4 7 9 2 4 5 10 1 2 6 8 3 1
1 7 9 4 5 10 2 6 8 3
4/2 7
4
1
2 3 4 5 10 9/7/6 9 10 7 9 8 6 7
2 3 4 5 6 10 9/8/7 9 10 8 9 7 8
1 2 9 7/5/4/3 7 9 5 7 10 4 5 6 8 3 4
1 2 3 9 7/5/4 7 9 10 5 7 6 8 4 5
1 2 3 4 9 7/6/5 10 7 9 6 7 8 5 6
1
1
1
2 3 4 5 6 7 10 9 8
2 3 4 5 6 7 8 10 9
2 3 4 5 6 7 8 9 10
9/8 10 9
9 10
Algoritmo: Selección(int[] Arreglo) Para I=0 hasta Arreglo.longitud – 1 Inc 1 Para J= I+1 hasta Arreglo.longitud Inc 1 Si Arreglo[J] < Arreglo[I] Arreglo[I] Arreglo[J] // Intercambiar Fin_Si Fin_para Fin_para Fin_Selección Indicador de Alcance 4.C.- Explica problemas propuestos
Investigar y explicar el algoritmo de ordenamiento: 1. Selección Mejorado
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Inserción Algoritmo: El fundamento de este método consiste en insertar los elementos no ordenados del arreglo en su posición final. Dependiendo del método elegido para encontrar la posición de inserción tendremos distintas versiones del método de inserción. Inserción(int[] Arreglo) Para I=1 hasta Arreglo.longitud Inc 1 Actual = Arreglo[I] Para J = I Hasta J > 0 && Arreglo[J - 1] > Actual Dec 1 Arreglo[J] = Arreglo[J - 1] Fin_Para_J Arreglo[J] = Actual; Fin_Para_I Fin_Inserción
http://lwh.free.fr/pages/algo/tri/tri_insertion_es.html
Método s hell
El método de shell es una versión mejorada del método de inserción directa y recibe ese nombre en honor a su autor Donald L. Shell quien lo propuso en 1959. En el método de ordenación Shell propone que las comparaciones entre elementos se efectúen con saltos de mayor tamaño, pero con incrementos se efectúen con saltos de mayor tamaño, pero con incrementos decrecientes, así los elementos quedarán ordenados en el arreglo. Ejemplo: Arreglo original
7
4
9
2
5
10
1
6 9
2
3 5
10
1 4
6
2
3
Salto=5
7
4 1
Arreglo después de Salto = 5
7
1
10
4
6 7
7/3 7/4 1 6 2 3 10 9
7 4
Salto = 2
6
8
3
9 6
8
5 3
9
8
5
9 8 10/5
5 10
mov
3
mov
5
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Arreglo después de Salto = 2
Salto = 1
Arreglo Final
3 6
6/4 1 3 2
6 4
3
1
4
2
1 3
3 1
2 4
1
3
2
2
3
2
3
1
9 5
7
5 9
8
10
mov
3
6
5
7
9
8
10
4 2
5 6
6 5
7
9 8
8 9
10
mov
4
4
5
6
7
8
9
10
mov
1
4
5
6
7
8
9
10
Algoritmo: Shell(int[] Arreglo) Salto=Arreglo.longitud/2 Mientras (Salto>=1) Realiza movimiento = 0 Para I=0 hasta Arreglo.longitu Arreglo.longitud d – (Salto) Inc 1 Si Arreglo[I+Salto] < Arreglo[I] Arreglo[I] Arreglo[I+Salto] // Intercambiar movimientos = movimientos + 1 Fin_Si Fin_para Mientras (movimientos != 0) Salto=Salto/2 Fin_mientras Fin_Shell
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Método Qui Quick ck S ort Es probablemente el más utilizado de los algoritmos de ordenación. Fue inventado por C.A.R. Hoare en 1960 y desde entonces se han propuesto mejoras. Es muy popular porque es relativamente fácil de implementar, ofrece buenos resultados generales, en muchos casos consumeamenos recursos otros otr os métodos de ordenación, está bien estudiado (ha sido expuesto un minucioso análisis matemático que hay sido corroborado con amplia experiencia práctica). El algoritmo consta de los siguientes pasos: 1. Elegir un elemento de la lista de elementos a ordenar, al que llamaremos pivote. 2. Resituar los demás elementos de la lista a cada lado del pivote, de manera que a un lado queden todos los menores que él, y al otro los mayores. Los elementos iguales al pivote pueden ser colocados tanto a su derecha como a su izquierda, dependiendo de la implementación deseada. En este momento, el pivote ocupa exactamente el lugar que le corresponderá en la lista ordenada. 3. La lista queda separada en dos sublistas, una formada por los elementos a la izquierda del pivote, y otra por los elementos a su derecha. 4. Repetir estemás proceso forma recursiva cada sublista mientras éstas contengan de undeelemento. Una vez para terminado este proceso todos los elementos estarán ordenados. Ejemplo:
TECNOLÓGICO NACIONAL DE MÉXICO INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE AGUASCALIENTES
Algoritmo: //Recibe un vector de enteros y el índice del primer y último elemento válido del mismo Quicksort(int[] Arreglo, int primero, int ultimo) i=primero, j=ultimo pivote=Arreglo[(primero + ultimo) / 2] Realiza { Mientras(Arreglo[i] < pivote){ i++ } Mientras(Arreglo[j] > pivote){ j-- } Si (i
View more...
Comments