Git Product home page Git Product logo

dag's Introduction

DAG

Semplice modulo per implementare DAG Directed Acyclic Graph. Lo scopo è dare una interfaccia semplice per avere dei grafi che mantengano questa proprietà a ogni arco che viene aggiunto.

Cosa non è

Questo progetto non:

  • E' una implementazione ottimizata di grafi direzionati aciclici
  • E' un framework di per algoritmi di grafi

Cosa è

Vuole essere solo una interfaccia generica per avere sotto controllo la proprietà che il grafo che stiamo costruendo è aciclico. Questo permette di costruire algoritmi che usano questa propietà senza preoccuparsi di doverla reimplementare.

Se poi si vuole usare i propri algoritmi chiedendo scalabilità e performance si può implementare un adapter a qualche libreria che implementa efficacemente i grafi e agganciarla al posto del backend di base.

Linguaggi

Prevedo di fare una implementazione in

  • Kotlin (in corso)
  • Python (ASAP)
  • C (a medio termine)
  • Pure Java 8 (a medio termine)
  • C++ (a medio termine)

Interfaccia

Kotlin

DAG<T>

Grafo direzionato aciclico

  • Costruttore di base può prendere una collection di T per costruire i nodi iniziali (costruttore alternativo con nunmero variabile di nodi in ingresso)
  • addNode(T) aggiunge il nodo (se non esiste) e lo rende
  • addEdge(from, to) aggiunge un arco da from a to e manda eccezzione se
    • from e to non fanno parte dello stesso grafo
    • il nuovo arco crea un ciclo
  • nodes() la collection di nodi
  • edges() la collection di archi
  • [T] il nodo
  • [T, T] l'arco se esiste

Node<T>

Nodo del grafo.

  • context property in lettura
  • edges() la colection di edge uscenti come Pair(from, to)
  • nodes() la colection di nodi collegati come valori
  • bfs() la lista dei nodi raggiungibili con una ricerca BFS dal nodo
  • bfsEdges() la lista degli archi raggiungibili con una ricerca BFS dal nodo
  • dfs() la lista dei nodi raggiungibili con una ricerca DFS dal nodo
  • dfsEdges() la lista degli archi raggiungibili con una ricerca DFS dal nodo
  • ends() Set dei nodi raggiungibili

Edge<T>

  • from, to nodi
  • Scompattabile (implementa component1 e component2)

dag's People

Contributors

la10736 avatar

Watchers

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