Está en la página 1de 32

Brian Keith N.

Introduccin
Ya, en estas diapositivas veremos ejercicios para la primera prueba de estructura, lamentablemente, el profe subi la pauta de esta prueba, as que ya no tiene mucho sentido hacerla. Por lo mismo, no termin el resumen. (Adems me da flojera) La parte de matriz poco pobladas esta resuelta en la plataforma, y la parte de UML creo pueden terminarla ustedes solos. xD Brian Keith N.

Anlisis de Algoritmos
Determinar el tiempo de clculo de los siguientes algoritmos. Para cada algoritmo, se pide evaluar el mejor y el peor caso. Mostrar el pseudocdigo asociado al algoritmo. Ok, esta es la parte regalada de la prueba, deben asegurarse con esto al menos.

Anlisis de Algoritmos
Se tiene el arreglo A[1..N] ordenado de menor a mayor y se desea saber si se encuentra en el arreglo el valor X. Palabra clave: ORDENADO. Qu implica esto? Bsqueda Binaria. Este va fijo en la prueba; el profe dijo.

Bsqueda Binaria
Input: Arreglo A[1..N], valor X a buscar. Retornaremos un Booleano, true si se encuentra, false si no se encuentra. Entonces, lo primero que hay que hacer es codificar la solucin. NO UTILICEN EL ALGORITMO RECURSIVO DE BSQUEDA BINARIA, ES MS DIFICIL DE ANALIZAR.

Bsqueda Binaria
BinarySearch(A[1..N],X) { L <- 1 U <- N WHILE (L<U) { C <- (L+U)/2 IF (A[C]==X) { RETURN true; } IF (A[C]<X) { L <- C + 1 } ELSE { U <- C 1 } } RETURN false; }

Bsqueda Binaria
Cmo se analiza la bsqueda binaria? Primero se debe identificar la operacin activa, como en toda bsqueda, la operacin activa es la siguiente: O.A.: La comparacin IF (A[C]==X). Claramente en el mejor caso se realiza una sola comparacin. Luego para el mejor caso O(1).

Bsqueda Binaria
En el peor caso? Se debe construir el rbol generado por las consultas y ver su altura.
1 2 3 1 4 21 = 2 20 = 1

22 = 4

Bsqueda Binaria

El nmero de comparaciones hechas equivale a la altura del rbol. Ntese adems que con el ejemplo que se ha dado el rbol tiene 7 nodos y 3 niveles. = 23 1 = 7 Sea k la altura del rbol. = 2 1, 1 2 = + 1 log 2 2 = log 2 + 1 log 2 2 = log 2 + 1 1 = log 2 + 1 = log 2 Para el peorcaso. (Podramos omitir la base 2 del log)

Anlisis de Algoritmos

Se tiene la matriz A de NxN. Se desea sumar los siguientes elementos:

Al ojo esta cosa es lineal, y se puede hacer en un T(n) = 3N - 2, probmoslo.

Suma de Elementos

Primero se debe sumar la diagonal y luego las dos filas en un solo ciclo for. Pero cuidado, que nos sobrarn dos elementos. Creo que por ahora da lo mismo la eficiencia a un nivel tan minucioso, as que con un solo for haremos el algoritmo, y despus restamos los repetidos. (Esto har el algoritmo menos eficiente por 4 operaciones activas, pero eso es O(1), as que da igual!)

Suma de Elementos
SumaElementos(A[1..N,1..N]) { S <- 0 FOR (i = 1 to N) { S <- S + A[1,i] S <- S + A[i,i] S <- S + A[N,i] } S <- S A[1,1] S <- S A[N,N] RETURN S }

Suma de Elementos
El peor y el mejor casos son iguales. NUNCA DIGAN QUE NO EXISTE PEOR Y MEJOR CASO! Se dice que son iguales. El ciclo for se ejecuta N veces, en cada ejecucin se realizan 3 sumas. Luego se realizan 3N sumas. Sin embargo, al final, se realizan 2 restas, luego: = 3 + 2 (El mejor algoritmo que podramos realizar para esto es uno con 3 ciclos for separados, y reduciramos el tiempo por 4 operaciones activas, vale la pena? No creo, la simplicidad de cdigo creo es mejor. Adems que sigue siendo O(N)) = O.A.: Las sumas (y restas). S <- S A[ , ]

Anlisis de Algoritmos

Se tiene Valor de N Valor de M Un arreglo de N nombres de sectores (datos alfabticos) Un arreglo de M cdigos de categoras econmicas (datos alfanumricos) Una matriz de NxM que tiene el total asociado a cada combinacin posible de valores Sector-Categora. Existe al menos una combinacin de valores SectorCategora que tenga un total superior a 1 milln de pesos? Responder SI o NO. Este es un problema de bsqueda, nada difcil.

Bsqueda Secuencial en una Matriz


Sea A la matriz dada. BsquedaSecuencial(A[1..N,1..M]) { FOR (i = 1 to N) { FOR (j = 1 to M) { IF (A[i,j] > 1000000) { PRINT SI RETURN } } } PRINT NO }

Bsqueda Secuencial en una Matriz


Como en toda bsqueda la operacin activa es la comparacin. O.A.: La comparacin IF (A[i,j] > 1000000). El mejor caso ocurre cuando se realiza una nica comparacin, luego O(1).

Bsqueda Secuencial en una Matriz

El peor caso es que no existe ningn valor o se encuentre al final.

En dicho caso la operacin activa se realiza M veces en el loop interno, y el loop interno se realiza N veces dentro del loop externo. Luego claramente se tiene que: = Noten que depende de DOS variables, no se vayan a confundir, aparentemente siempre entra uno con dos variables. = ESO NO ES LO MISMO QUE .

Anlisis de Algoritmos
Determinar el tiempo de clculo de los siguientes algoritmos. Para cada algoritmo, se pide evaluar el mejor y el peor caso. Mostrar el pseudocdigo asociado al algoritmo. Ok, esta es la parte regalada de la prueba, deben asegurarse con esto al menos.

Diagramas UML
Bueno aparentemente todo lo aprendido antes en Progra I parece ser obsoleto aqu, salvo la idea de la abstraccin. Ahora tenemos 3 diagramas y no nos preocuparemos de los mtodos: Diagrama de Anlisis (Modelo del Dominio como les llamabamos en Progra I) El diagrama de anlisis solo tiene las entidades, sus relacionamientos y cardinalidades sin direccionar. tampoco muestra las listas ni detalles de la implementacin, pues este diagrama tiene que ser entendible por el cliente. De los relacionamientos aparecen ciertos atributos que deben ser considerados apartes por ahora. (Cajas con lneas, pero sin flechitas!) Diagrama de Diseo 1 (Este es el diagrama de clases clsico que haciamos en Progra I) Este diagrama muestra la visibilidad, la direccin de los relacionamientos y los contenedores (listas). Bsicamente, es una expansin del diagrama de anlisis. (Cajas con flechas!) Diagrama de Diseo 2 (Esta es una malignidad nueva que no me gusta.) Este diagrama borra todas las flechitas y las traduce a atributos, tambin se busca la forma de traducir los atributos aparecidos por el relacionamiento. (Casos 1..1, 1..N y N..N) Desaparecen los relacionamientos. (Cajas aisladas!)

Ejercicio
La Direccin de Docencia de la UCN requiere de un sistema que le permita llevar el control de la docencia en el semestre. Los alumnos, con atributos rut, matricula, nombre y fono, se encuentran matriculados en una determinada carrera, con atributos cdigo, nombre y cantidad de semestres; cursan distintas asignaturas durante el semestre. La asignatura tiene los atributos: cdigo, nombre, crditos. Una asignatura tiene 1 o 2 profesores, con atributos rut, nombre y direccin; tambin tiene 0 o 1 ayudante que es un alumno. Al asignarse un profesor a una asignatura se le asigna un sueldo mensual. Toda asignatura tiene un alumno que es el contacto que tiene el profesor si desea enviar alguna informacin al curso. Preguntas de inters son: 1. Las asignaturas que cursa el alumno. 2. Las notas finales del alumno en cada asignatura. 3. La carrera de un alumno. 4. Los profesores de una asignatura. 5. Los crditos de una cierta asignatura. 6. Los alumnos de una asignatura. 7. Las asignaturas que dicta un profesor. 8. Total de crditos que cursa un alumno en el semestre. 9. Datos del ayudante de una asignatura, incluyendo su sueldo. 10. Los alumnos de una determinada carrera. 11. Datos del alumno que es contacto en una asignatura. 12. Total en bonos que tiene un profesor. 13. Bono que tiene un profesor en una asignatura determinada. Se pide: Diagrama de la solucin del problema (clases y atributos de las clases). Explicar la solucin propuesta. Las suposiciones se deben indicar claramente en su respuesta.

Ejercicio
Ataquemos por partes el ejercicio.

Cliente y contexto del problema.

La Direccin de Docencia de la UCN requiere de un sistema que le permita llevar el control de la docencia en el semestre. Los alumnos, con atributos rut, matricula, nombre y fono, se encuentran matriculados en una determinada carrera, con atributos cdigo, nombre y cantidad de semestres; cursan distintas asignaturas durante el semestre. La asignatura tiene los atributos: cdigo, nombre, crditos. Una asignatura tiene 1 o 2 profesores, con atributos rut, nombre y direccin; tambin tiene 0 o 1 ayudante que es un alumno. Al asignarse un profesor a una asignatura se le asigna un sueldo mensual. Toda asignatura tiene un alumno que es el contacto que tiene el profesor si desea enviar alguna informacin al curso. Se tienen 4 clases: Alumno, Profesor, Carrera y Asignatura.

Ejercicio
Con solo el enunciado principal podemos ya construir un esbozo del modelo del dominio. PERO RECUERDEN: LO MS PROBABLE ES QUE TENDREMOS QUE HACER VARIAS ITERACIONES! Para estar seguros que entendemos lo que el cliente quiere.

Diagrama de Anlisis
Alumno RUT Matrcula * Nombre Fono * 1 0..1
Sueldo

Carrera 1 Cdigo Nombre CantidadSemestres

Asignatura
Es ayudante Es contacto Cursa

Profesor *
Bono

* Cdigo * Nombre * Crditos

1..2

RUT Nombre Direccin

Notas

Ejercicio
Creo que eso soluciona todo el problema, releyendo no veo que falte ningn relacionamiento, as que es tiempo de pasar todo eso a diagrama de diseo 1. Prcticamente se mantiene todo igual, solo que ahora aparecen las listas y la visibilidad. Por defecto haremos todo protegido.

Visibilidad
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.

Las asignaturas que cursa el alumno. Las notas finales del alumno en cada asignatura. La carrera de un alumno. Los profesores de una asignatura. Los crditos de una cierta asignatura. Los alumnos de una asignatura. Las asignaturas que dicta un profesor. Total de crditos que cursa un alumno en el semestre. Datos del ayudante de una asignatura, incluyendo su sueldo. Los alumnos de una determinada carrera. Datos del alumno que es contacto en una asignatura. Total en bonos que tiene un profesor. Bono que tiene un profesor en una asignatura determinada.

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.

Un alumno ve sus asignaturas. Un alumno ve sus notas. Un alumno debe ver su carrera. Una asignatura ve a sus profesores. Una asignatura sabe sus crditos. Una asignatura ve a sus alumnos. Un profesor ve sus asignaturas. Calculable O(n) Una asignatura ve a su ayudante y su respectivo sueldo. Una carrera ve sus alumnos. Una asignatura ve su contacto. Calculable en O(n). Calculable en O(1).

Diagrama de Diseo 1
En rojo estn las traducciones de los requerimientos a visibilidad.
ListaAlumnos #Alumnos 1 Alumno * #RUT #Matrcula * #Nombre #Fono * 1 0..1 Carrera * 1 ListaCarreras #Carreras

10

1 #Cdigo #Nombre 3 #CantidadSemestres

6 11 9

Sueldo

Asignatura

Profesor

Es ayudante Es contacto Cursa

Notas

* #Cdigo * #Nombre * #Crditos * 1

7
*
Bono

1..2

#RUT #Nombre #Direccin

ListaProfesores #Profesores

2. Atributo de Relacionamiento (Diseo 2) 5. Ya cubierto. 8. Calculable O(n) (Diseo 2) 12. Calculable O(n) (Diseo 2) 13. Calculable O(1) (Diseo 2)

ListaAsignaturas #Asignaturas

FALTAN LOS TIPOS DE LOS ATRIBUTOS. Ej: #Nombre: String

Ejercicio
Si es que no me ha faltado alguna relacin o algo es tiempo de traducir a diseo 2. (Por supuesto que lo ms probable es que haya que hacer varias iteraciones para terminar correctamente el diagrama) Ahora desaparecen los relacionamientos y visibilidades y todo se traduce a clases separadas. Por qu desaparecen? Porque en el diagrama de diseo 1 los atributos permitidos solo son PRIMITIVOS. Los relacionamientos y visibilidades representan PUNTEROS, por lo tanto, ahora en diseo 2 estos se escriben dentro de las clases como atributos, que tienen la forma de punteros a objetos (o a listas con estos punteros). Luego las flechas que antes representaban los atributos no primitivos son reemplazadas por atributos punteros.

Clase de Interseccin
Clase de interseccin! Se produce por relacionamiento NN.
Asignatura #Cdigo: String #Nombre: String #Crditos: int #Docente: Profesor* #Alumnos: list<Alumno*> #Ayudante: Alumno* #Contacto: Alumno* #Notas: list<Nota*>

Nota

Alumno

#NotaFinal: double #Alumno: Alumno* #Asignatura: Asignatura*

1
#Flojera #Notas: list<Nota*>

NO ESTOY SEGURO SI ES NECESARIO COLOCAR ESTO EN DISEO 1 O DISEO 2. Y no tengo un cuaderno ordenado como para comprobarlo, pero aqu simplemente puse este mini diagrama para explicar como funciona.

Diagrama de Diseo 2
ListaAlumnos
#Alumnos: list<Asignatura*>

Asignatura #Cdigo: String #Nombre: String #Crditos: int #Docente: Profesor* #Alumnos: list<Alumno*> #Ayudante: Alumno* #Contacto: Alumno* #Notas: list<Nota*>

Carrera

#Flojera

ListaCarreras
#Carreras: list<Carrera*>

Profesor

ListaProfesores
#Profesores: list<Profesor*>

#Flojera Nota

ListaAsignaturas
#Asignaturas: list<Asignatura*>

#NotaFinal: double #Alumno: Alumno* #Asignatura: Asignatura*

Alumno
#Flojera #Notas: list<Nota*>

Fin
Ustedes terminen el diagrama UML con lo que falta, pero noten como desaparecieron las flechas y se convirtieron en atributos no primitivos. xD (Ya sea un nico puntero si era relacionamiento tipo ..1 o una lista si era ..*. Ya, me da flojera seguir, adis. xD Brian Keith N.