Code Monkey home page Code Monkey logo

heaptree_cytoscape's Introduction

Leonardo Luigi Pepe

ITIS C. Zuccante A.S. 2018/2019

Classe 4^IB

Documentazione HeapTree With Cytoscape.js

Struttra del progetto

  • La seguente classe permette di creare un HeapTree e di effettuare una serie di azioni su di esso
  • È possibile effettuare operazioni di ordinamento dell'HeapTree decidendo pure se deve essere ordinato per valori decrescenti (maxHeapSort) o valori crescenti (minHeapSort)
  • È possibile aggiungere uno o più nodi alla fine dell'HeapTree (aggiunta di foglie)
  • L'intera struttura dati è contenuta all'interno di un array di oggetti Node
  • Ogni Node è un oggetto definito dalla libreria Cytoscape.js

Descrizione algoritmi di sorting

  • In questi esempi vengono visualizzati i metodi maxHeapify e minHeapSort, quindi visualizzeremo in questo esempio un algoritmo in cui dopo il sorting l'HeapTree sarà ordinato in modo crescente

alt text

  • Come primo step dobbiamo piazzarci in quello che viene definito il Floor di un HeapTree. Si parte dalla posizione size/2 per poi sfruttare il metodo maxHeapify in maniera ricorsiva su tutti i nodi precedenti

alt text

  • A questo punto si procede allo swapping e heapify dei valori all'interno dell'HeapTree.
  • Lo swapping avviene tra il primo e l'ultimo elemento dell'HeapTree il cui indice corrisponde a size (variabile che in questo momento viene modificata per poi essere ripristinata)
  • Dopo aver effettuato lo swapping si procede con il maxHeapify del primo elemento all'interno dell'HeapTree
  • I precedenti due passaggi verranno eseguiti fino a quando non si arriverà al primo elemento dell'HeapTree
  • Di seguito verrà visualizzato il codice della funzione minHeapSort (il codice sarà riportato nuovamente all'interno della documentazione dei metodi pubblibi )
  • Viene riportata solo una parte della funzione essendo che, all'interno di essa, vengono eseguite funzioni di manipolazione del DOM
for(let i = Math.floor(size/2)-1;i>=0;i--){
        maxHeapify(i);
      }
    let oldSize = size;
    for(let i = heap.length-1;i>0;i--)
    {
        [heap[0], heap[i]]=[heap[i], heap[0]]
        size--
        maxHeapify(0);
    }
    size = oldSize

Main Class HeapTree

Variabili

  • r = Oggetto di tipo Random (contenente seed=50) che permette la generazione casuale di numeri (usato principalmente per test)
  • size = Variabile di tipo int che contiene la lunghezza dell'HeapTree
  • heap[] = Array di Node che rappresenta l'HeapTree

Metodi pubblici di HeapTree

HeapTree(int n )
  • Metodo costruttore che crea l'heap casualmente dato un numero di nodi
HeapTree(int[] arr )
  • Metodo costruttore che crea l'heap dato un array di valori interi
printHeap()
  • Metodo che stampa l'heap per livelli

maxHeapify(int i)

  • Metodo che, in caso il nodo figlio sia più grande del genitore, scambi i due nodi e successivamente procede in maniera ricorsiva con i nodi sucessivi fino a quando un genitore non sarà più grande dei figli
Node largest = heap[i];

if (i*2+1 < size && heap[i*2+1].val > heap[i].val){
    largest = heap[i*2+1];
}
if (i*2+2 < size && heap[i*2+2].val > heap[i].val &&heap[i*2+2].val>largest.val ) {
    largest = heap[i*2+2];
}
if (largest.pos != i) {
    swap(heap[i], largest);
    maxHeapify(largest.pos);
}

minHeapify(int i)

  • Metodo che, in caso il nodo figlio sia più piccolo del genitore, scambi i due nodi e successivamente procede in maniera ricorsiva con i nodi sucessivi fino a quando un genitore non sarà più piccolo dei figli
Node largest = heap[i];

if (i*2+1 < size && heap[i*2+1].val < heap[i].val){
    largest = heap[i*2+1];
}
if (i*2+2 < size && heap[i*2+2].val < heap[i].val &&heap[i*2+2].val>largest.val ) {
    largest = heap[i*2+2];
}
if (largest.pos != i) {
    swap(heap[i], largest);
    minHeapify(largest.pos);
}

maxHeapSort()

  • Metodo che, sfruttando minHeapify, riordina l'heap dal valore più grande al più piccolo
for(int i = size/2-1;i>=0;i--)
    minHeapify(i);
int oldSize = size;
for (size-=1; size>=0; size--)
{
    swap(heap[0], heap[size]);
    minHeapify(0);
}
size = oldSize;//essendo che lavoro con un parametro dell'heap e voglio comunque mantenerlo nel tempo per altre operazioni, sfrutto questa variabile di supporto

minHeapSort()

  • Metodo che, sfruttando maxHeapify, riordina l'heap dal valore più piccolo al più grande
for(int i = size/2-1;i>=0;i--)
    maxHeapify(i);
int oldSize = size;
for (size-=1; size>=0; size--)
{
    swap(heap[0], heap[size]);
    maxHeapify(0);
}
size = oldSize;//essendo che lavoro con un parametro dell'heap e voglio comunque mantenerlo nel tempo per altre operazioni, sfrutto questa variabile di supporto

addNode(int nodeVal)

  • Metodo che aggiunge un nodo alla fine dell'heap

addNode(int[] nodeVal)

  • Metodo che aggiunge una serie di nodi alla fine dell'heap

deleteNode()

  • Metodo che elimina l'ultimo nodo (nonché foglia) dell'heap

Metodi privati di HeapTree

swap(Node i, Node j)

  • Metodo che scambia il valore contenuto nei due nodi

Nested Class Node

Variabili

  • val = Variabile di tipo int che contiene il valore del nodo
  • pos = Variabile di tipo int che contiene la posizione all'interno dell'HeapTree

Metodi pubblici di Node

Node(int val, int pos)
  • Metodo costruttore che dato il valore e la posizione di un nodo all'interno di un heap, crea il nodo
Node(Node n)
  • Metodo costruttore che, dato un nodo, ne crea uno uguale
Node()
  • Meotodo costruttore standard

getVal()

  • Restituisce il valore contenuto in un nodo

heaptree_cytoscape's People

Contributors

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