Giter Club home page Giter Club logo

movida's Introduction

Progetto MOVIDA (Corso di Algoritmi e Strutture Dati 2019/2020)

Componenti gruppo:

  • Angelo Galavotti: 0000924743
  • Letizia Gorini: 0000924219

Algoritmi di ordinamento implementate:

  • Insertion Sort
  • Quick Sort

Strutture dati implementate:

  • HashTable a indirizzamento aperto
  • Lista non ordinata.

Istruzioni di Inizializzazione

Per inizializzare il programma, creare un istanza di tipo MovidaCore (specificando la struttura dati e l'algoritmo di ordinamento nel costruttore). Specificare il file da cui caricare i dati, e chiamare la funzione loadFromFile, inserendolo come parametro.


Note sull'implementazione

  • Map: La classe contiene delle funzioni astratte (ovvero che richiedono implementazione) che rispecchiano i metodi che si trovano solitamente nelle strutture dati di tipo dizionario. Elem rappresenta un record di una delle due strutture.

  • HashMap: Questa struttura dati permette di istanziare hashMap a indirizzamento aperto con diverse funzioni di hashing. In movidaCore (e in generale per chiavi di tipo stringa) si fa uso della funzione hashCode di Java. Oltre a ciò, se non si specifica la dimensione dell'hashTable al momento dell'istanziamento, la tabella viene ridimensionata in modo automatico.

  • UnorderedLinkedList: La classe implementa una lista bidirezionale non ordinata, e contiene il riferimento al primo elemento della lista (ovvero il campo root). Oltre all'inserimento in testa, è possibile sfruttare una funzione di inserimento in coda.

  • MovidaGraph: La classe contiene l'implementazione di un grafo attraverso una HashMap avente per chiave un oggetto di tipo 'Persona' e per valore un ArrayList contentente tutte le collaborazioni che interessano quell'attore. Oltre a ciò, in MovidaGraph c'è anche la classe PrimDistElem, che associa a un nodo (appunto, l'oggetto di tipo persona) con il punteggio massimo associato (ovvero la distanza massima del nodo dalla source). Questa classe in particolare viene usata nelle Coda Priorità per l'algoritmo di Prim, a sua volta chiamato in maiximiseCollaboration.

  • MovidaCore: Nella classe MovidaCore abbiamo 3 strutture dati, una per i film, una per le persone e una per le collaborazioni. Mentre per le strutture dei film e delle persone si può scegliere fra HashTable e UnorderedLinkedList, la struttura delle collaborazioni è limitata a MovidaGraph. In MovidaCore inoltre abbiamo la classe MovieCount, che associa a un attore il numero di film a cui ha partecipato. Anche qui, la sua esistenza è dovuta all'uso delle Code Priorità in searchMostActiveActors().

  • Sort: La classe Sort contiene le funzioni degli algoritmi di ordinamento (nel nostro caso InsertionSort e QuickSort) ed alcune classi statiche che permettono di filtrare l'ordinamento in base agli attributi della classe Movie (quindi titolo, anno, voti etc).


Note sulle funzioni

  • MovidaCore:

    • setMap(), oltre che a riassegnare il tipo di strutture dati, ricarica anche tutti i dati nella nuova struttura.
    • reload(), ricarica i dati nelle strutture della classe.
    • rmvWhiteSpaces(String) permette di rimuovere gli spazi in eccesso da una stringa, sia in mezzo a due parole separate, che alle estremità della stringa stessa.
  • UnorderedLinkedList e HashMap:

    • Queste classi contengono funzioni che nonostante non vengano utilizzate per gli scopi del progetto, sono state comunque incluse per rendere l'implentazione più completa e generale.

Note sulle eccezioni

Le classi delle eccezioni si trovano nella cartella movida.exceptions. Segnalano errori di HashTable Overflow (se si fa uso di tabelle hash senza ridimensionamento automatico) e di UnknownMap e UnknownSort in caso si inizializzasse un oggetto di tipo MovidaCore facendo uso di algoritmi o strutture non supportate.

movida's People

Contributors

angelogalav avatar leti15 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.