[c++]dizionario con alberi redblack e distanza di levensthein la classica "forse cercavi" di google

di il
10 risposte

[c++]dizionario con alberi redblack e distanza di levensthein la classica "forse cercavi" di google

Salve , sono uno studente di informatica...
e devo consegnare un progetto in c++ di Algoritmi e strutture dati ,
Da premettere non cerco aiuti di codice o altro ,
voglio solo porgervi un quesito e vedere se potete aiutarmi,

In pratica devo realizzare un classico dizionario con funzioni di ricerca ,eliminazione e in caso di parola non trovata deve restituire la parole simile , ottenuta grazie alla distanza di levensthein

Per implementare questo dizionario devo usare sia le hash table , e sia la struttura dati Red&Black
quindi in realtà devo creare due dizionari....


Il mio problema è questo ,ragionando sul discorso della ricerca fallita e nel trovare le parole simili....devo per forza di cose scorrere tutte le parole presenti nel dizionario?
e da li verificare la distanza di levensthein con tutte ?

non diventa poi decisamente costoso come programma?
esiste un idea migliore che non riesco magari al momento ad afferrare?

10 Risposte

  • Re: [c++]dizionario con alberi redblack e distanza di levensthein la classica "forse cercavi" di google

    Crossposting con html.it
  • Re: [c++]dizionario con alberi redblack e distanza di levensthein la classica "forse cercavi" di google

    Si non credevo fosse vietato.. sono duie forum.. cercavo una mano da più parti scusa.,..
  • Re: [c++]dizionario con alberi redblack e distanza di levensthein la classica "forse cercavi" di google

    Francamente il tuo "classico dizionario" mi è un pochino oscuro, così come l'uso di un albero e di una tabella hash.
    inizia per gradi a indicare cosa vuoi fare.
  • Re: [c++]dizionario con alberi redblack e distanza di levensthein la classica "forse cercavi" di google

    Allora da traccia :

    1. Costruire un vocabolario V utilizzando un Hash Table con il metodo
    della concatenazione, che abbia le seguenti funzioni:
    { Inserimento del termine
    { Cancellazione
    { Ricerca del termine. In caso di fallimento deve restituire una
    lista delle parole piu prossime, utilizzando un approccio basato
    sulla Distanza di editing(o di Levenshtein) .

    2. Costruire un vocabolario V 0, utilizzando un albero RED BLACK
    che abbia le stesse funzioni, dell' esercizio precedente. Nell' imple-
    mentazione di entrambi i quesiti si faccia uso delle Classi Astratte.


    Non so tu vuoi sapere completamente come lo voglio implementare?
    Intendo fare una classe WORD che contenga come membri parola e descrizione

    E una classe VOcabolario dove all interno oltre alle funzioni di ricerca ed eliminazione è presente una struttura dati(albero o tabella hash ) della classe WORd


    il mio dubbio era se quando devo verificare le parole più prossime , debba per forza scorrere tutto il vocabolario.. cioe tutte le parole presenti all 'interno o se c'era un idea per evitare di controllare tutte le parole..
    ho chiesto magari un indirizzamento.. non la soluzione
  • Re: [c++]dizionario con alberi redblack e distanza di levensthein la classica "forse cercavi" di google

    pceweb ha scritto:


    Allora da traccia :

    1. Costruire un vocabolario V utilizzando un Hash Table con il metodo
    della concatenazione, che abbia le seguenti funzioni:
    { Inserimento del termine
    { Cancellazione
    { Ricerca del termine. In caso di fallimento deve restituire una
    lista delle parole piu prossime, utilizzando un approccio basato
    sulla Distanza di editing(o di Levenshtein) .

    2. Costruire un vocabolario V 0, utilizzando un albero RED BLACK
    che abbia le stesse funzioni, dell' esercizio precedente. Nell' imple-
    mentazione di entrambi i quesiti si faccia uso delle Classi Astratte.
    ....
    il mio dubbio era se quando devo verificare le parole più prossime , debba per forza scorrere tutto il vocabolario.. cioe tutte le parole presenti all 'interno o se c'era un idea per evitare di controllare tutte le parole..
    ho chiesto magari un indirizzamento.. non la soluzione
    La traccia ovviamente è scritta male, ma è normale che sia abborracciata.
    "lista delle parole più prossime", è questo l'elemento-chiave.
    LA parola più prossima? e cosa significa "prossima"? Per la distanza, intendo.
    2? 3? 5?
    Le k-esime più vicine ?
    Un ml, con m coefficiente <1 e l lunghezza della stringa?
  • Re: [c++]dizionario con alberi redblack e distanza di levensthein la classica "forse cercavi" di google

    Scritta male?
    da un professore universitario?... la vedo dura.....
  • Re: [c++]dizionario con alberi redblack e distanza di levensthein la classica "forse cercavi" di google

    pceweb ha scritto:


    scritta male?
    da un professore universitario?... la vedo dura.....
    la vedo normale
  • Re: [c++]dizionario con alberi redblack e distanza di levensthein la classica "forse cercavi" di google

    +m+ ha scritto:


    pceweb ha scritto:


    scritta male?
    da un professore universitario?... la vedo dura.....
    la vedo normale
    @+m+ non capisco da dove venga questa tua sicurezza sul fatto che TUTTI i docenti universitari (vabbe', riduciamoci alle materia relative alla Computer Scienze) siano degli incompetenti!

    La domanda sorge spontanea: sei un laureato? Ed in quale facolta'?

    La traccia da abbastanza informazioni per permettere una implementazione, ed e' sufficentemente incompleta da da forzare lo studente a ragionare!

    Se non sai che cosa e' una metrica (in questo caso distanza di Levenshtein), e' un tuo problema!

    @pceweb: parti sempre dalla soluzione piu' semplice (banale ricerca sequenziale), anche perche' non dovrai gestire 1.000.000.000 di parole, ma al piu' 10, o 100, e scandire 10/100 parole e' questione di microsecondi

    Un'alternativa, e' quella di mantenere delle strutture dati di servizio che tengono, per ogni parola, l'elenco delle parole piu' somiglianti, entro una distanza prefissata.

    Ovviamente, la soluzione al dubbio su quale distanza usare di @+m+, e' banale: un parametro aggiuntivo nella funzione/metodo di ricerca, utile per indicare quale distanza massima usare!

    Regola fondamentale: se c'e' un dubbio su una possibile implementazione, allora aggiungere un parametro o una chiave di configurazione per poter fare la scelta .
  • Re: [c++]dizionario con alberi redblack e distanza di levensthein la classica "forse cercavi" di google

    migliorabile ha scritto:


    @+m+ non capisco da dove venga questa tua sicurezza sul fatto che TUTTI i docenti universitari (vabbe', riduciamoci alle materia relative alla Computer Scienze) siano degli incompetenti!
    Dove avrei affermato ciò?
    La domanda sorge spontanea: sei un laureato? Ed in quale facolta'?
    Sì, in scienza del tortellino in quel di Bologna
    La traccia da abbastanza informazioni per permettere una implementazione, ed e' sufficentemente incompleta da da forzare lo studente a ragionare!
    Tu dici? E' una opinione che non condivido affatto.
    Se non sai che cosa e' una metrica (in questo caso distanza di Levenshtein), e' un tuo problema!
    In effetti è un concetto estramamente difficile, di cui non ho mai letto nelle ricette per stendere la sfoglia. Immagino si riferisca allo spessore dello strato di farina prima di impastare le uova
    @pceweb: parti sempre dalla soluzione piu' semplice (banale ricerca sequenziale), anche perche' non dovrai gestire 1.000.000.000 di parole, ma al piu' 10, o 100, e scandire 10/100 parole e' questione di microsecondi
    Interessante: un esercizio che involve una tabella hash e un albero binario (tra l'altro del tipo piuttosto rognoso da bilanciare, senza fare il copia-incolla di uno snippet, ovviamente), per gestire 10 o 100 parole.
    In tal caso, visto che la traccia è (a tuo parere) del tutto irrilevante, e lo studente può cambiarla come vuole, un normalissimo array a dimensione fissa.
    Un'alternativa, e' quella di mantenere delle strutture dati di servizio che tengono, per ogni parola, l'elenco delle parole piu' somiglianti, entro una distanza prefissata.
    Interessate come suggerimento, in effetti sarei curioso di sapere quale sia questa distanza "prefissata". Penso bisognerebbe fare delle simulazioni con l'angolo massimo che un cono di farina riesce a fare sul tagliere.
    Penso, vaghe reminiscenze, che esistano metodi geologici per valutare questa circostanza
    Ovviamente, la soluzione al dubbio su quale distanza usare di @+m+, e' banale: un parametro aggiuntivo nella funzione/metodo di ricerca, utile per indicare quale distanza massima usare!
    Davvero un'ottima idea! Certo però... cosa ci metti?
    Regola fondamentale: se c'e' un dubbio su una possibile implementazione, allora aggiungere un parametro o una chiave di configurazione per poter fare la scelta .
    Caspita. Pensavo invece che la regola fosse: chiedi al docente di specificare per bene cosa vuole, altrimenti bisogna fondare un Comitato per la Standardizzazione tra gli studenti che completi le porzioni di specifiche tralasciate.


    Bon, fuori dalle facezie, evidentemente il docente non ha voluto, o potuto, specificare esattamente i termini dell'esercizio.
    D'altronde è del tutto irrilevante, immagino che voglia vedere come lo studente
    - fa il copia-incolla da qualche parte dell'algoritmino, magari senza spiegargli il perchè e il percome si usa, o non si usa, per certe lingue (esempio: italiano)
    - fare una tabellina hash, giusto perchè una volta nella vita possa vederlo
    - fare il copia-incolla di un albero binario, sempre perchè nella vita si convinca di essere in grado di scrivere un programmello siffatto.
    Direi che di "applicativo", cioè qualcosa di effettivamente utilizzabile in concreto nel futuro, tanto da dover "addirittura" prevedere parametri che lo rendano flessibili, non c'è nulla, è un esercizietto didattico al 100% (almeno per quanto mi riguarda, ma non mi intendo tanto di queste cose).

    Nulla di male, ma almeno avere un'aderenza vagamente realistica al "mondo reale" io (sottolineo io, non certo un professore universitario, ammesso che ci sia differenza) l'avrei fatto.
  • Re: [c++]dizionario con alberi redblack e distanza di levensthein la classica "forse cercavi" di google

    Grazie dei consigli migliorabile...

    , +m+ UN esame di ASD (ALGORITMI E STRUTTURE DATI) , E' OVVIO CHE PREVEDE IMPLEMENTAZIONI DI APPUNTO STRUTTURE DATI TRA QUELLE STUDIATE
    ESISTONO ALTRI ESAMI ALTRE SITUAZIONI ALTRI CORSI CHE PREVEDONO UN IMPLEMENTAZIONE DI PROBLEMI REALI........
    c

    In ogni caso.. credere che il saper fare senza una conoscenza teorica delle cose... è il più grande errore che si possa fare..
    In bocca al lupo per il tortellino scaldato in brodo...
Devi accedere o registrarti per scrivere nel forum
10 risposte