Open in TheBrain

Alg Comp 3nm40 2o. departamental

<p><b>Sesión 22 (lunes 14/dic/2020): especificaciones hacia el trabajo final</b>

<b>+ Tema visto:&nbsp;</b>especificaciones hacia el trabajo final

<b>+ Acervo: </b>ver las notas en líneas adelante

<b>+ Tarea:</b>&nbsp;ninguna agregada.

<b>+ Notas:</b>

<p>

¿Para qué sirve la documentación? Ejemplo con una silla.

&nbsp;a) garantía de los primeros días

&nbsp;b) para saber cómo armarla en un futuro</p>

<p>

¿Qué van a entregar?

  1. Una portada con el nombre, correo y teléfono de los integrantes en PDF, enviada por correo.

&nbsp;- hará las veces de índice con las ligas respectivas

  1. Manual de usuario (escrito o video).

&nbsp;&nbsp;- ¿Cómo de instala para un "usuario común"? ¿Qué funciones tiene? ¿Cómo se opera? ¿Con qué plataformas es compatible?

&nbsp;&nbsp;- Se sugiere un video, aunque puede ser escrito

&nbsp;&nbsp;- Se manda la documentación por correo o, en su defecto, una liga en donde visualizarlos.

  1. Manual técnico

&nbsp;&nbsp;a) ¿Cómo se instala (desde el punto de vista técnico)? ¿Qué requerimientos se necesitan, incluyendo dispositivos adicionales?

&nbsp;&nbsp;b) entender el sistema para facilitar actualizaciones, mejoras y correcciones (Vg. diagrama de clases). Bitácoras y manejo de errores.

&nbsp;&nbsp;c) esquema de base de datos o archivos (si es necesario)

&nbsp;&nbsp;d) código fuente

&nbsp;&nbsp;- escrito

&nbsp;&nbsp;- se combina escrito en Word o PDF + código anexo o, en su defecto, una liga en donde visualizarlos.

  1. Historial de construcción del sistema en archivos Word o PDF.

&nbsp;&nbsp;a) especificación inicial (puede modificarse sobre la marcha).

&nbsp;&nbsp;b) el diseño preliminar de las pantallas con datos reales (puede modificarse sobre la marcha).

&nbsp;&nbsp;c) ¿qué pruebas le van a hacer al sistema?

&nbsp;&nbsp;d) reporte de pruebas del revisor y el usuario final

&nbsp;&nbsp;e) cambios acordados a la idea inicial</p>

<p>

Sugerencia:

1.- Tener más de un tema que les guste (al menos dos). Averiguar complejidad y viabilidad.

2.- Hacer un listado de funcionales del "sistema ideal".

3.- Limitarlo a las posibilidades de tiempo disponible.</p>

<p>

=> Van a hacer una DEMO de unos minutos en la clase.</p>

<p>

<b>Sesión 20 y 21 (lunes 7/dic/2020 y viernes 11/dic/2020): cuadro de complejidad computacional</b>

&nbsp;&nbsp;&nbsp;- panorama general de complejidad computacional

<p>

<b>Sesión 19 (viernes 30/nov/2020): Introducción a búsqueda</b>

&nbsp;&nbsp;&nbsp;- autoevaluación

&nbsp;&nbsp;&nbsp;- introducción a búsqueda

<p>

Torres de Hanoi

<a href="https://correoipn-my.sharepoint.com/:x:/g/personal/jlgoytia_ipn_mx/EW1JPMVavvRJhCeaIiXp1ycBaxzgCtj6vnTQYkMrS4u-og?e=F0Pgt7">AC 3NM40 Torres de Hanoi.xlsx</a></p>

<p>

Selección Directa o Burbuja

<a href="https://correoipn-my.sharepoint.com/:x:/g/personal/jlgoytia_ipn_mx/EbTLM4E8Rv5BruYh639MY_0B22uDKpJF-tDIBZyrTpjZGA?e=ji1hye">AC 3NM40 Selección Directa o Burbuja.xlsx</a></p>

<p>

Algoritmos Diversos

<a href="https://correoipn-my.sharepoint.com/:x:/g/personal/jlgoytia_ipn_mx/Eai-1ylMIo1HobglnqPIxW4BkROn7dMNeO0RNAv1G1fKmA?e=loWfBl">AC 3NM40 Algoritmos Diversos.xlsx</a></p>

<p>

<b>+ Notas de la clase:</b></p>

<p>

¿Para qué sirve un ordenamiento?</p>

<p>

El ordenamiento por si mismo no sirve para nada.

Excepto...

a) Si se va a buscar

b) Si se quiere una clasificación

&nbsp;&nbsp;Vg. filtros de búsqueda.</p>

<p>

Queremos buscar...

a) ¿Qué pasa si no están ordenados?

-> Buscar uno por uno: búsqueda secuencial.</p>

<p>

b) ¿Qué sucede cuando están ordenados?

-> Buscar partiendo por mitades: búsqueda binaria.

Búsqueda binaria, que es muy eficiente. Por ejemplo: para mil millones solo se requieren 30 comparaciones. Justo el comportamiento contrario de lo que sucede en Torres de Hanoi.</p>

<p>

¿Un Ingeniero en Informática vaa a hacer ordenamientos, búsquedas lineales y binarias?

Estefani) No creo.

Hannia) Sí

Raymundo) Sí.

Sánchez) Sí.

José Luis) Poco probable</p>

<p>

¿Ustedes van a trabajar con bases de datos?

Estefani) Sí.

Hannia) Sí.

Raymundo) Sí.

Sánchez) Sí.

José Luis) Casi seguro.</p>

<p>

Los índices principales de las bases de datos siempre se mantienen ordenados.

Buscar por una llave primaria es una búsqueda binaria.

Buscar por un campo que no es índice es una búsqueda lineal.</p>

<p>

Suponga una tabla con boleta y nombre. La llave primaria es boleta.</p>

<p>

// Esta sería una búsqueda binaria

SELECT boleta, nombre

FROM alumnos

WHERE boleta = '2020141857'</p>

<p>

// Esta es una búsqueda lineal

SELECT boleta, nombre

FROM alumnos

WHERE nombre = 'Miguel Ángel'</p>

<p>

<b>Sesión 18 (viernes 27/nov/2020): Ordenamiento por árbol binario. Estrategia para enfrentar la complejidad computacional</b></p>

<p>

&nbsp;&nbsp;&nbsp;- repaso de Quicksort.

&nbsp;&nbsp;&nbsp;- introducción al ordenamiento por árbol binario balanceado

<p>

&nbsp;

<b>Sesión 18 (viernes 27/nov/2020): Ordenamiento por árbol binario. Estrategia para enfrentar la complejidad computacional</b></p>

<p>

&nbsp;&nbsp;&nbsp;- repaso de Quicksort.

&nbsp;&nbsp;&nbsp;- introducción al ordenamiento por árbol binario balanceado

<p>

<p>

¿Por qué se gana en Quicksort?

<p>

¿Qué es una instrucción básica?

a) un autoincremenento de una variable

b) una operación

c) una comparación</p>

<p>

Ejemplo:

for (i=0; i<5; i++) {

&nbsp;&nbsp;// tomar dato de un arreglo

&nbsp;&nbsp;suma = suma + calificación

}</p>

<p>

5 veces tomaría el dato de un arreglo

5 veces suma calificación a suma

5 veces incrementaría i

5 veces compararía el valor de i contra 5

1 vez asignaría 0 a i

21 en total</p>

<p>

No sumar aquello no equivalente en consumo. Por ejemplo: i++ con un printf(.....</p>

<p>

&nbsp;

¿Qué hacer cuando descubrimos que una estrategia no va a soportar el volumen?

1.- Llorar, corroborar los cálculos y aceptar la realidad.

&nbsp;&nbsp;&nbsp;Para corroborar los datos hay que validar y mejorar su precisión.

&nbsp;&nbsp;&nbsp;Pruebas de estrés.

2.- Buscar cambios de estrategia:

&nbsp;&nbsp;&nbsp;a) Simplificar la solución o el diseño (Arquitectura de Software)

&nbsp;&nbsp;&nbsp;b) Mejorar y optimizar el algoritmo (Algoritmos Computacionales) &nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;c) Reducir "cuellos de botella" (Vg. pool de conexiones)

&nbsp;&nbsp;&nbsp;d) Recuperar la experiencia a nivel código y humana

&nbsp;&nbsp;&nbsp;e) Automizar procesos que se llevan manualmente.

&nbsp;&nbsp;&nbsp;f) Reorganizar procesos administrativos (Administración)

&nbsp;&nbsp;&nbsp;g) Mejorar las herramientas utilizadas (IDE, Bases de Datos SQL y nosql, clases, etc.).

&nbsp;&nbsp;&nbsp;h) Reducir la "deuda técnica" y activar recursos no empleados

&nbsp;&nbsp;&nbsp;i) Simplificar el requerimiento (Ing. de Requerimientos)

&nbsp;&nbsp;&nbsp;j) Dar resultados aproximados o reducir precisión (muestreo - Estadística; Heurística - AC o IA).

&nbsp;&nbsp;&nbsp;k) Conducirse con valores éticos y con base en el conocimiento.</p>

<p>

<b>Sesión 17 (lunes 23/nov/2020): cómo medir tiempos. ¿Qué es una operación básica?</b>

&nbsp;&nbsp;&nbsp;- dudas acerca de cómo medir los tiempos.&nbsp;

&nbsp;&nbsp;&nbsp;- ¿Qué debe entenderse como una operación básica?

&nbsp;&nbsp;&nbsp;- introducción a Quicksort. ¿Cómo trabaja y porqué ahorra tiempo?

<p>

<b>Sesión 16 (viernes 20/nov/2020): no hubo sesión por junta para docentes.</b></p>

<p>

<b>Sesión 15 (lunes 16/nov/2020): no hubo sesión por ser día festivo.</b></p>

<p>

&nbsp;

<b>Sesión 14 (viernes 13/nov/2020): ¿cuánto tardaría selección directa en ordenar un millón de números?</b></p>

<p>

<p>

La función de trabajo es:

a) Intercambios: n-1

b) Comparaciones: (n * n - n) / 2

Nota: en burbuja el número de intercambios es (n * n - n) / 2 para el peor de los casos.</p>

<p>

Se tomó como referencia que una PC hace 50 millones de operaciones por segundo, tomado como moda (el dato aproximado más frecuente) directamente de pruebas de los alumnos.

Nota: a manera de verificación, en la PC del profesor se obtuvo el valor de 380,314,000 operaciones básicas / segundo. Debe entender por operación básica una comparación o el incremento de una única variable.</p>

<p>

¿Cuántos intercambios habría? 999,999

¿Cuántas comparaciones habría? 499,999,5000,000

#operaciones = #comparaciones + #intercambios * 3 = 500,002,499,997

tiempo en segundos = &nbsp;500,002,499,997 / 50,000,000 = 10,000 segundos = 166.66 minutos = 2.77 horas

Eso quiere decir que en 5 millones tardaría 69 horas.</p>

<p>

En términos prácticos, ¿qué situaciones tienen un volumen de datos equiparable?

<p>

Se comentó que los arreglos se "caen" en determinado volumen. Nota; en la PC del profesor, en Dev C++, los arreglos llegaban hasta 518,107; en el 518,108 se "caen". Se ignora la causa.</p>

<p>

0..1 Insertion

2..3 Shell

4..5 Quick3

6..7 Heap

8..9 Merge</p>

<p>

<b>Sesión 13 (lunes 9/nov/2020): comparando burbuja vs. selección directa</b>

&nbsp;&nbsp;&nbsp;- Burbuja

&nbsp;&nbsp;&nbsp;&nbsp;a) mejor caso: n-1 comparaciones y 0 intercambios

&nbsp;&nbsp;&nbsp;&nbsp;b) promedio: por analizar

&nbsp;&nbsp;&nbsp;&nbsp;c) peor caso: (n * n - n) / 2, tanto comparaciones como intercambios

&nbsp;&nbsp;- Selección directa:

&nbsp;&nbsp;&nbsp;&nbsp;a) todos los casos: (n * n - n) / 2 intercambios

&nbsp;&nbsp;&nbsp;&nbsp;b) de 0 a n-1 intercambios según el caso

&nbsp;&nbsp;- Como conclusión: en general es mejor selección directa excepto si nos acercamos al mejor caso. Ambos son de naturaleza cuadrática.

Se sugiere utilizar la siguiente adecuación para reportar el número global de operaciones:&nbsp;

&nbsp;Operaciones = comparaciones + intercambios * 3

&nbsp;&nbsp;&nbsp;A. ¿Cuánto tardaría burbuja en el peor caso en ordenar un millón de números tomando como punto de partida las siguientes afirmaciones?

&nbsp;&nbsp;&nbsp;a) El tiempo consumido será proporcional al número de operaciones. Operaciones = comparaciones + intercambios * 3

&nbsp;&nbsp;&nbsp;b) Un equipo de cómputo hace 10,000 operaciones por segundo.

&nbsp;&nbsp;&nbsp;B. ¿Cuánto tardaría su PC personal?

&nbsp;&nbsp;&nbsp;Sugerencia. Medir las operaciones por segundo con alguna estrategia como la mostrada:

&nbsp;&nbsp;&nbsp;tiempo inicial

&nbsp;&nbsp;for (i=0, i<=1000000; i++)

&nbsp; &nbsp;&nbsp;&nbsp;// no hacer nada

&nbsp;&nbsp;tiempo final</p>

<p>

<b>Sesión 12 (viernes 6/nov/2020): ¿cómo saber si un algoritmo es eficiente?</b>

<p>

#datos &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#comparaciones &nbsp;&nbsp;&nbsp;#intercambios=#c+#i * 3 &nbsp; #operaciones&nbsp;&nbsp;tiempo

5

50

500

5000

50000

500000</p>

<p>

&nbsp;</p>

<p>

<b>Sesión 11 (lunes 1/nov/2020): no hubo sesión por ser día festivo</b></p>

<p>

<b>Sesión 10 (viernes 30/oct/2020): complejidad computacional</b>

&nbsp;&nbsp;&nbsp;a) 16. Estructuras_de_datos_CC_BY-SA_3.0 introducción a la complejidad.pdf

&nbsp;&nbsp;&nbsp;b)&nbsp;17. C-24 eficiencia en software.pdf

<p>

<b>Sesión 09 (lunes 26/oct/2020): ¿qué es la función de trabajo?</b>

&nbsp;&nbsp;&nbsp;&nbsp;- concepto de función de trabajo

&nbsp;&nbsp;&nbsp;a)&nbsp;La terrible leyenda de las Torres de Hanoi (el hipervínculo del vídeo está en Megasinapsis).

&nbsp;&nbsp;&nbsp;b) ¿Cuál es el juego más complicado del mundo? (el hipervínculo del vídeo está en Megasinapsis).

<p>

<b>Sesión 08 (viernes 23/oct/2020): introducción a la función de trabajo</b>

&nbsp;&nbsp;&nbsp;&nbsp;- introducción a la complejidad computacional con Torres de Hanoi

&nbsp;&nbsp;&nbsp;16.&nbsp;¿Cuántas veces puedes doblar una hoja de papel? (liga a video)

&nbsp;&nbsp;&nbsp;17. Juguemos Torres de Hanoi (liga a juego de Torres de Hanoi)

&nbsp;</p>

Attachments