Applicazioni delle strutture dati Alberi Bilanciati

di il
3 risposte

Applicazioni delle strutture dati Alberi Bilanciati

Salve a tutti...Mi sono iscritto al forum perchè a parte un compagno di scuola che non vedo da anni non conosco persone che lavorano nel campo della programmazione software.
Il mio titolo di studio è laurea in Fisica..e da tempo mi interesso di programmazione C-C++.
Avendo implementato tanti algoritmi famosi ed anche alcuni progettati da me...che mi danno ottimi risultati ..in particolare quelli sugli alberi RED-BLACK..mi piacerebbe di sapere le loro principali applicazioni e quali enti, aziende e istituti ne fanno largo uso.
Grazie.

3 Risposte

  • Re: Applicazioni delle strutture dati Alberi Bilanciati

    Le 'strutture dati', come liste, alberi, grafi, vettori, o i diversi algoritmi di ordinamento, ecc, sono l'equivalente della carta e della penna, per chi scrive programmi. Chiedersi 'quali aziende/enti/...' le usano, non ha senso: TUTTI!
    Esempio? in Java il TreeMap, implementazione dell'interfaccia Map, e' implementato mediante un RBTree!
    Stessa cosa in C++ per il std::map...

    E quello che ti serve sapere non sono tanto le 'applicazioni' che li usano, ma le proprieta' della struttura dati, la complessita' computazionale, ed n-mila altre cosette.
    Perche' sono queste le informazioni che ti servono per decidere quale struttura dati, tra le N possibili, utilizzare nell'implementazione del tuo algoritmo.

    Farti qui' una descrizione delle proprieta' dei RBTree e' decisamente eccessivo. Ci sono libri che trattano specificatamente queste problematiche.
  • Re: Applicazioni delle strutture dati Alberi Bilanciati

    Grazie per avermi risposto....Per quanto riguarda le applicazioni delle strutture dati nel software di sistema io sapevo che gli alberi RB sono utilizzati anche nel Kernel di LINUX...invece non ho informazioni precise sul loro utilizzo per la gestione dati, archivi elettronici..in altre parole l'utlizzo diretto della struttura dati RB per la ricerca di informazioni. Siccome ho sviluppato una implementazione particolare, che mi semplifica tutte le operazioni tipiche della struttura RB -posso inserire milioni di dati in 5 secondi, visualizzarli e cancellarli in 3 secondi, posso selezionare e visualizzare tutti i dati di un qualunque livello, e visualizzare anche la struttura a livelli dell'albero, sia localmente che ,(grafica permettendo) completa, e costruire sottoalberi a partire da un nodo qualunque dell'albero in modo da poter gestire contemporaneamente due alberi indipendenti- ho chiesto dove sono maggiormente utilizzati in questo senso, per capire se la mia implementazione della struttura puo' semplificare e velocizzare la gestione dati in un archivio elettronico .Grazie.
  • Re: Applicazioni delle strutture dati Alberi Bilanciati

    Allora andiamo sul tecnico:

    un RBtree, e anche la tua specifica implementazione, non e' niente altro che un albero binario bilanciato, mantenuto in memoria.

    La sua utilita' (non la tua specifica implementazione, ma in generale), come specifica implementazione, e' tale nel momento in cui implementa una interfaccia, inerfaccia comune a una categoria di strutture dati aventi specifiche proprieta'.

    Questo fa si che un'applicazione, che richiede l'utilizzo di quella specifica interfaccia, possa beneficiare di una o dell'altra implementazione, in base alla tipologia di operazioni prevalenti.

    Ora, in una struttura dati come un albero binario, indipendentemente dalla sua implementazione, le principali operazioni che vengono fatte sono:

    1) inserimento
    2) rimozione
    3) ricerca
    4) iterazione (scansione di tutti gli elementi)

    Nella ricerca, ci sono diverse possibilita':

    3.1) ricerca di uno specifico elemento
    3.2) ricerca del minimo/massimo
    3.3) ricerca di un range di valori

    Stessa cosa per l'iterazione:

    4.1) scansione di tutti gli elementi
    4.2) scansione di un sottoinsieme ordinato degli elementi

    Ad esempio, la ricerca del massimo/minimo e' inefficiente in una struttura dati basata su una hasmap, perche' richiede scandire la struttura dati sequenzialmente. Invece puo' essere estremamente efficiente in una struttura ad albero, se bilanciato.
    Poi, ovviamente, ci possono essere altre operazioni.

    E' ovvio che il bilanciamento non e' di competenza dell'applicazione che usa l'interfaccia.

    Quindi, per dimostrare che la tua speciica implemetazione e' piu' meglio dell'implementaione classica, o di quella di default, devi dimostrarne quale e' la complessita' computazionale media e massima. Ed informazioni sulla quantita' di memoria allocata, sempre in riferimento all'implementazione classica.

    Ovviamente non sto' parlando di secondi o megabyte!

    A questo punto, devi fare delle statistiche, confrontando la tua implementazione con altre implementazioni, e fare dei diagrammi che mostrano le migliori/peggiori performance della tua implementazione rispetto alle altre.

    Fatto questo, puoi proporre la tua implementazione come valida alternativa all'implementazione standard. Ci sono diversi siti in cui puoi esporre la tua soluzione, ma dipende dal linguaggio di programmazione usato.
    Ad esempio:

    stackoverflow
    boost
    codeguru

    i primi che mi sono venuti in mente.

    Ripeto: non si fa MAI un uso diretto di una specifica implementazione di una struttura dati di basso livello, ma si passa sempre attraverso un'interfaccia, perche' quella stuttura dati potrebbe presentare dei problemi durante l'evoluzione del programma che la usa.
    E comunque e' buona pratica di programmazione non dipendere mai direttamente da una specifica implementazione di qualsiasi cosa.
Devi accedere o registrarti per scrivere nel forum
3 risposte