Grupo: Richard Vivanco Granda



Descargar 3,28 Mb.
Página1/9
Fecha de conversión10.04.2017
Tamaño3,28 Mb.
  1   2   3   4   5   6   7   8   9

.


ESCUELA POLITECNICA DEL LITORAL

Proyecto de Estructura de datos

Grupo:

Richard Vivanco Granda

Luis F Zuniga Rosado

Jamil Nagua Campi





Contenido


Diseño 2

Identificación de los TDA’s (Tipo de datos abstractos) 2

Abstracción – Descripción de los TDA’s 5

Marco Teórico (Estructura de datos Utilizados) 5

Objetos 5

Comparable y Comparator 6

Collections.sort 6

ArrayList 7

Que es una ArrayList? 7

Optimización del ArrayList 8

Errores encontrados 9

9

Uso de la Aplicación 10



Comparación de Rendimiento (ArrayList vs LinkedList) 15

Anexos 15




Diseño

Identificación de los TDA’s (Tipo de datos abstractos)


TDA NotaDeUsuario

(es la nota que dio un usuario a una película en una determinada fecha )
Atributos

public int idPelicula

public int rating

public String fecha
Metodos

NotaDeUsuario()

es el constructor vacío
NotaDeUsuario(int idPelicula, int rating, String fecha)

es el constructor con parametros
toString()

retorna un string
notaDePelicula(int idusuario,int idpeli,ArrayList notasPel )

retorna una lista de todas las películas que ha calificado un usuario
compareTo(Object o)

retorna un int


TDA Usuario



(es la id del usuario la nota que dio a una película y la fecha )
Atributos

public int idUser

public int rating

public String date
Metodos

Usuario()

es el constructor vacío
Usuario(int idUser, int rating, String date)

es el constructor con parametros
toString()

retorna un string
compareTo(Object o)

retorna un int
TDA Pelicula(es la id de la pelicula el año en que salió y su titulo en ingles )

Atributos

public int id;

public int año;

public String titulo;
Metodos

Pelicula()

es el constructor vacío


Pelicula(int id, int año, String titulo)

es el constructor con parametros
toString()

retorna un string
compareTo(Object o)

retorna un int
TDA LeerArchivos
Metodos

movies( String archivo)

retorna un ArrrayList

cargarUsuarios(String archivo)

retorna un Arraylist
buscarpalabra(ArrayList
listas,String palabra)


retorna ArrayList

TDA Reportes

(genera distintos reportes html)
Metodos

reporteCalificacionPorUsuario(ArrayList peliculasCalf, int id, ArrayList
pelicula)

reporteTopN(ArrayList listaDeEstrellas, ArrayList
pelicula, int nEstr)

reportePeliPorAnio(ArrayList
pelicula)

reportePorCalificaicon(ArrayList listaDeEstrellas, ArrayList
pelicula)

reportePorCoincidencia(ArrayList
concidencia, String palabra)

abrirHTML(String archivo)

TDA Estrellas
Atributos

int pelicula;

int estr5;

int estr4;

int estr3;

int estr2;

int estr1;

float promedio;
Metodos

listaEstrellas(int x, ArrayList rating, ArrayList usuarios){
toString()

retorna String


compareTo(Estrellas t)

retorna int
getEstr4()

retorna int
getEstr3()

retorna int
getEstr2()

retorna int
getEstr1()

retorna int
getPromedio()

retorna float
GenerarTop(int top,ArrayList rating)

Retorna ArrayList

Abstracción – Descripción de los TDA’s


Tipo de Dato Abstracto

Funcionalidad

NotaDeUsuario

El objeto NotaDeUsuario nos permite guardar la información de cada nota por usuario que es asignada a una película en específico, nos ayuda a llenar la lista de películas y obtener la calificación que le dio un usuario en un fecha especifica

Usuario

El dato Usuario nos permite tratar con cada usuario y que película ha calificado, a diferencia de NotaDeUsuario, aquí guardamos el Id del Usuario

LeerArchivo

LeerArchivo funciona como el lector que carga la cantidad de archivos fijos y llena listas para su uso posterior

GenerarReporte

GenerarReporte nos permite mostrar un reporte HTML, este tipo de dato se encarga del manejo del lenguaje HTML, donde va a ser guardado y lo ejecuta al instante

Estrellas

El objeto estrellas me permite contabilizar las calificaciones dadas por películas y generar las listas de Top5, Top4, etc, asi mismo como su nota promedio


Marco Teórico (Estructura de datos Utilizados)

Objetos


Durante todo el proyecto, se analizó con el paradigma orientado a objeto, creando múltiples objetos para la distribución de tareas, tales como NotaDeUsario, Usuario, Estrellas, etc.

Estos objetos se le asignaron las varios atributos y métodos creados por lo programadores y así distribuir la tareas y optimizar el tiempo. Esto se definió al momento del diseño de la solución, la cantidad de objetos necesarios para la correcta distribución de tareas.


Comparable y Comparator


Para el ordenamiento de las listas se utiliza la comparación implementada por dos interfaces, Comparable y Comparator.

Comparable, implementa en un objeto la función int CompareTo(Object o) la cual se recibe un objeto y lo compara con el objeto que esta funcionando como instancia

Por ejemplo:

Objetc1.CompareTo(Object2);

En este caso el Objetc1 es comparado con Object2, y dentro del código de la clase se implementa el criterio de comparación.

En cambio Comparator implementa la función int compare(Object o, Objecto1) la cual recibe dos objetos y los comparan entre sí. Pero para ello es necesario que sea creado en otra clase. Una clase que servirá para un ordenamiento a través de un Sort


Collections.sort


Para el ordenamiento de listas, usamos un método implementado en collections, llamado sort el cual esta sobrescrito para recibir la lista a ordenar o recibe la lista y una clase compare, la cual será el criterio de comparación

Collections.sort(listaAOrdenar);

Collections.sort(listaAOrdenad, new ClaseCompare());

A través de este método de ordenamiento usa el comparable o comparator, para comparar los datos y ordenarlos de mayor


ArrayList


Durante la creación de nuestro proyecto, tuvimos que analizar la cuestión del rendimiento, al tomar en cuenta el enunciado del ejercicio, llegamos a la conclusión que la estructura más óptima es la ArrayList.

Una lista del tipo ArrayList nos permite guardar en memoria grandes listas de información, durante el momento de cargar la lista se comparó el rendimiento entre ArrayList y LinkedList.

Una LinkedList es una lista doblemente enlazada la cual es óptima en momento de insertar un dato en medio del arreglo, ya que gracias a sus dobles enlaces este tiempo es muy corto, pero ArrayList demora mucho más si necesita insertar en medio del arreglo, puesto a que tiene que partir a la mitad el arreglo, copiarlo en otro arreglo, insertar el nuevo elemento y entonces volver a copiar el arreglo.

Pero en el anunciado del proyecto no se pide ingresar o eliminar ningún arreglo, se pide cargar en memoria y buscar, lo que hacemos iterando el archivo. En ese caso ArrayList (una lista simplemente enlazada) sería la solución más óptima.


Que es una ArrayList?


ArrayList ya se encuentra implementado en Java, con tamaño de una matriz variable. Una arrayList implementa todas las opciones de la clase List y permite la inserción de todos los elementos (incluyendo el null).

Ademas de los métodos implementados en List, la ArrayList tiene métodos propios que permiten controlar el tamaño de la ArrayList, parecido a un vector con la diferencia que a la ArrayList se le considera un objeto sincronizado o sincrónico.

Cada ArrayList tiene una capacidad, la cual es el tamaño de la matriz a utilizarse en la lista de datos. Siempre es al menos tan grande como el tamaño de la lista. A medida que se le agregan elementos en un ArrayList, su capacidad crece automáticamente. Este crecimiento tiene un costo constante.

Optimización del ArrayList


Entendemos que la adición de elementos en un arrayList tiene costo constante, lo cual lo hace óptimo para nuestro programa.

Así mismo algunas de sus funciones principales tienes un costo constante



.size()

.isEmpty()

.get()

.set()

.iterator


Tiempo lineal

O(1)

.add(n)

O(n)


Errores encontrados


Un error que encontramos fue en el archivo Movies, hay películas sin año, en el año existía la palabra Null y nos producía un error



Solución

Donde encontramos la palabra Null le agregamos un año estándar




Compartir con tus amigos:
  1   2   3   4   5   6   7   8   9


La base de datos está protegida por derechos de autor ©absta.info 2019
enviar mensaje

    Página principal