GithubHelp home page GithubHelp logo

lucagrammer / relation-tracker Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 5.88 MB

Final Project - Algoritmi e Strutture Dati. Politecnico di Milano, A.A. 2018-2019

C 100.00%
relation-tracker data-structures optimization-algorithms

relation-tracker's Introduction

Relation Tracker

Project for the Algoritmi e Principi dell'informatica course at Politecnico di Milano.

The problem

Si vuole implementare un meccanismo di monitoraggio di relazioni tra entità (per esempio persone) che cambiano nel tempo Si immagini, per esempio, un social network, in cui nuovi utenti possono registrarsi, e utenti esistenti possono cancellare il proprio account, diventare “amici” di altri utenti, rompere la relazione di amicizia, ecc. Le relazioni tra entità non sono necessariamente simmetriche. Per esempio, Alice può essere “amica” di Bruno, ma l’amicizia non è reciprocata (Bruno non è amico di Alice)

In maniera più astratta, il meccanismo monitora i seguenti fenomeni:

  • Una nuova entità comincia ad essere monitorata
  • Una entità monitorata smette di esserlo
  • Una nuova relazione viene stabilita tra 2 entità monitorate
  • Una relazione esistente tra 2 entità monitorate cessa di esistere
  • Ogni entità ha un nome identificativo (per esempio "Alice", "Bruno", "Carlo")
  • Ci possono essere diversi tipi di relazioni tra entità, ognuna identificata da un nome (per esempio, "amico_di", "segue", "coetaneo_di")
  • Ogni relazione ha un verso (per esempio, se Alice è "amico_di" Bruno, il verso della relazione è da Alice a Bruno, quindi Bruno è il “ricevente” della relazione), e non è necessariamente simmetrica
  • A seguito di un apposito comando, il sistema restituisce, per ogni relazione, l’entità che “riceve” più relazioni (se ci sono più entità il cui numero di relazioni ricevute è massimo, queste vengono stampate in ordine crescente di identificativo)
  • L’applicativo dovrà essere ottimizzato per gestire un grande numero di entità e istanze di relazioni, ma generalmente pochi tipi (identificativi) di relazione

Implementazione in linguaggio C standard (con la sola libc) di un programma che legge da standard input una sequenza di comandi, ognuno corrispondente ad un cambiamento nelle entità o nelle relazioni tra entità e, quando richiesto, produce su standard output, per ogni tipo di relazione monitorata, l'identificativo dell'entità che è il ricevente del maggior numero di istanze di quella relazione, e il numero di relazioni che l'entità riceve

Authors

relation-tracker's People

Contributors

lucagrammer 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.