Está en la página 1de 25

Práctica 1 de la asignatura:

Programación y Estructuras de Datos


Avanzadas
Curso 2020/21
UNED
Grado en Ingeniería Informática
Centro Asociado de Vitoria-Gasteiz
Jerónimo Quesada
jquesada@gasteiz.uned.es

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.
ENUNCIADO
Planificar torneo de tenis.

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 2
Enunciado
Necesitamos organizar un torneo de tenis con n jugadores en donde
cada jugador ha de jugar exactamente una vez contra cada uno de sus
posibles n–1 competidores, y además ha de jugar un partido cada día,
teniendo a lo sumo un día de descanso en todo el torneo. Se supone que
hay campos de tenis suficientes para jugar cada día todos los partidos
necesarios.

Se pide diseñar para resolverlo un algoritmo basado en el esquema de


Divide y Vencerás.

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 3
Diseño del algoritmo
La práctica constará de una memoria y de un programa en java original que
resuelva el problema aplicando el esquema indicado.

Habrá dos opciones de realización a elegir por el alumno:

a) Se supondrá que n es potencia de 2 mayor que 1. Se impondrá la


realización del torneo en
n-1 días.

b) Se supondrá que n es cualquier número natural mayor de 1. El torneo se


realizará en n-1
días si n es par o en n días si es impar.

NOTA: La modalidad a) solo podrá ser calificada hasta con un Notable.

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 4
Argumentos y parámetros
La práctica se invoca usando la siguiente sintaxis:

java torneo [-t][-h] n

java –jar torneo.jar [-t][-h] n

Los argumentos son los siguientes:

• -t: traza cada invocación recursiva de manera que se describa la parametrización de cada
llamada recursiva.
• -h: muestra una ayuda y la sintaxis del comando. Por ejemplo:

$ java torneo -h <ENTER>

SINTAXIS: torneo [-t][-h] n [fichero entrada]


-t Traza la selección de clientes
-h Muestra esta ayuda
n Número de jugadores
[fichero entrada] Listado de los nombres de los jugadores del torneo

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 5
Datos de entrada y salida
Datos de entrada
El dato de entrada es el número de jugadores que deben realizar la liga de partidos. El fichero opcional lis
nombres de los jugadores. Debe contener uno por línea y debe tener n entradas (líneas).

Datos de salida
La salida es una tabla que indique en qué día juegan cada uno de los jugadores. Por ejemplo:

Donde Jx hace referencia al jugador x, y el valor de la tabla indica con qué jugador se enfrenta x
en el día dy n caso de que haya nombres, se sustituye J1, J2,… y el valor interno en la tabla por
el nombre del jugador.

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 6
Entrega por correo
electrónico en
fichero *.zip

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 7
Entrega El programa se ha de
poder abrir, compilar
y ejecutar desde BlueJ

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 8
Calificación

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 9
Fechas
• Dia 21 de Octubre de 2020: Sesión orientativa Práctica 1
• Día 18 de Noviembre de 2020: Sesión orientativa Práctica 2
• Día 16 de Diciembre de 2020: Sesión de control Práctica 1
• Día 13 de Enero de 2021: Sesión de control Práctica 2
• La fecha límite para entrega de informes finales para calificación en convocatoria ordinaria es
el 20 de Enero de 2021.
• No es obligatoria la asistencia a las sesiones, pero se ha de realizar al menos un control
previo a la entrega final de ambas prácticas. Ese control se puede hacer por webconferencia
o correo electrónico (jquesada@gasteiz.uned.es)
• Si el equipo docente sigue el método de otros cursos habilitará en su momento un enlace en
este entorno en el que será posible inscribirse para prácticas en este centro asociado. Es
imprescindible la inscripción en ese entorno para poder ser calificados.
• En relación con la convocatoria extraordinaria en Septiembre se fijarán fechas límite en su
momento tras conocer el calendario de evaluación, pero en todo caso para que se puedan
entregar para esa convocatoria ha de haberse contactado durante el cuatrimestre y expresar
la intención de realizar las prácticas para entrega en esa convocatoria.
• Entregas por correo electrónico dirigido a jquesada@gasteiz.uned.es e indicando en el
asunto que se trata de entrega de práctica para curso 20/21 de la asignatura PREDA (tengo
más asignaturas )
Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 10
ALGORITMO APLICABLE
Divide y vencerás

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 11
Ejemplo n=8=23 . Llamadas
recursivas

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 12
Ejemplo n=8=23 . Casos triviales

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 13
Ejemplo n=8=23 . Combinar

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 14
IMPLEMENTACIÓN

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 15
Sujerencia de diagrama de clases

Esta clase resuelve el


problema concreto

Esta clase es
análoga en todos
lo algoritmos que
se programen
para prácticas

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 16
Clase Practica_2021(es solo una sugerencia …)
En un método principal lee argumentos, luego
lee datos y lanza ejecución del algoritmo
concreto que soluciona el problema (Que puede
ser el constructor de la clase Torneo.

Método que lee los nombres


desde fichero de entrada, se
recomienda utilizar las clases
FileReader, BufferedReader,
Scanner …

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 17
Clase Torneo (solo es una sugerencia de cómo plantear)

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 18
Coste asintótico

• Recurrencia:
• Solución:

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 19
Orientaciones para caso en que n no es
potencia de 2

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 20
Caso en que n es par pero no es potencia de 2
En este caso puede suceder que al dividir el problema en el
proceso recursivo los subproblemas resultantes sean con
número de participantes impar, esto no permitiría división por
dos sucesiva y por tanto se ha de buscar alternativa.

Una sugerencia es considerar que cuando en una llamada


recursiva el número de equipos sea tal que al dividir por dos
resulte un número impar, se complete la tabla con equipos
ficticios hasta completar una tabla con número de equipos
potencia de dos. Luego se procesa el resultado de las llamadas
recursivas para reducir la tabla de nuevo a su tamaño original
haciendo que compitan entre sí los participantes que competían
contra participante ficticio. Por otra parte se ha de completar la
tabla teniendo en cuenta los participantes ya asignados.

Se ilustra con un ejemplo


Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 21
Ejemplo de proceso de tabla de 6 participantes,
n/2 = 3 impar

Se amplía la tabla con


dos participantes
ficticios X e Y

Se sigue el proceso
recursivo normal

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 22
Ejemplo de proceso de tabla de 6 participantes,
n/2 = 3 impar Reducción de tabla
Reasignación de
partidos con X e Y y
ampliación con el resto
de equipos

(se cicla eliminando el


equipo repetido en fila)

Ejemplo 4 5 6 fuera 4
5 6 4 fuera 5
Etc.

Proceso habitual tras


llamada recursiva

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 23
Comentarios sobre implementación

Mientras que en la
solución recursiva para n
potencia de 2 es posible
que se pase referencia a
una tabla global y sobre
ella se va completando la
solución, en el caso
general esto resulta más
complicado. Es
aconsejable crear tablas
locales en cada llamada
recursiva (tabla1, tabla2),
estas tablas luego se
combinan para completar
la tabla que entra como
parámetro (tabla p)

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 24
¿Y qué pasa si n es impar?

Cuando el problema de organización de


partidos se plantea para un número de
participantes impar la solución es realmente
simple: se amplía el problema añadiendo un
participante ficticio X y se soluciona totalmente
con ese participante. La solución final es válida
considerando que el participante que compita
cada día con X realmente lo que hace es tener
día de descanso

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las
posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

10/24/2020 jquesada@gasteiz.uned.es 25

También podría gustarte