Consiglio sulla struttura da utilizzare

di il
25 risposte

Consiglio sulla struttura da utilizzare

Salve a tutti,
vorrei un semplice consiglio:
Che tipo di strutture (lista concatenata, albero, tabella hash) mi consigliate per realizzare questo programma:
https://github.com/myblacksloth/javaPrograms/tree/master/WarehouseManagement
per i dispositivi mobili https://github.com/myblacksloth/javaPrograms/blob/master/WarehouseManagement/README.md
Io utilizzerei una lista concatenata oppure una tabella hash... ma sono più convinto per l'utilizzo di una lista.
Come dato della lista voi utilizzereste il magazzino o il prodotto?

Nel senso che:
MAGAZZINO ==> prodotto 1 -> prodotto 2 -> prodotto 3
PRODOTTO ==> magazzino 1 -> magazzino 2 -> magazzino 3

io opterei per prodotto perché così come dato della lista posso usare nome, indirizzo, quantità....

C'è qualcosa che mi dice di dover utilizzare più liste, una per i prodotti, una per i magazzini, etc.... non lo so....

Inoltre..... qualcuno saprebbe spiegarmi molto brevemente cosa è un filtro di ricerca? Da quello che ho capito è un metodo che restituisce l'oggetto cercato... ma se ci sono più oggetti che possono corrispondere ad un criterio di ricerca viene restituito un array di oggetti?

Fin ora per la ricerca ho sempre utilizzato delle stringhe che dovendo essere usate come testo delle JLabel includevano una formattazione HTML che mettesse in ordine i dati da stampare... es.:
| nome | quantità |
| tel | 123 |

un esempio di questo criterio di ricerca è visibile nei programmi che ho fin ora sviluppato ()

Spero che qualcuno possa aiutami!
Cordiali saluti

25 Risposte

  • Re: Consiglio sulla struttura da utilizzare

    Se e' un esercizio per scuola, allora DEVI riaprire il libro perche' stai percorrendo, sullo sterrato, una strada che ti sta' portando diritto diritto sul ciglio di un burrone

    Un primo modo per ragionare e' il seguente: immagina di avere UN MILARDO di magazzini ed un MILIARDO di prodotti distinti in ogni magazzino: la conoscenza dell COMPLESSITA' COMPUTAZIONALE delle operazioni sulle varie strutture dati ti da gia' una risposta.

    Un filtro di ricerca e' un concetto semplice: tu non vuoi cercare TUTTO, ma SOLO qualcosa che soddisfa un certo predicato/condizione.
    Il filtro e' proprio quel predicato/condizione.
    Ovviamente un predicato/condizione puo' essere composito:

    <cond> ::= <term> (OR <term>)*
    <term) ::= <fact> (AND <fact>)*
    <fact> ::= (NOT)? <simple_pred>
    <simple_pred> ::= <campo> (== | != | < | <= | ?= | >) <valore>

    (escludiamo le parentesi!)

    Se non hai idea di quello che ho scritto, allora, di nuovo, devi riaprire il libro.
  • Re: Consiglio sulla struttura da utilizzare

    Io la cosa la vedo così



    Una lista concatenata di magazzini i cui nodi contengano gli oggetti contenuti nel magazzino.

    Vorrei sapere se sono sulla buona strada...

    Il problema è che quando si impara un linguaggio di programmazione da solo perché chi te lo dovrebbe spiegare ne sa meno di te iniziano ad affiorare problemi di questo tipo (a buon intenditor poche parole )
  • Re: Consiglio sulla struttura da utilizzare

    Questo NON E' un problema legato al linguaggio di programmazione.

    Questo e' un problema legato al concetto di STRUTTURE DATI.

    Tra l'altro, sarebbe piu' un esercizio relativa alla progettazione di un DATABSE RELAZIONALE, ma ci puo' stare.

    NO: non sei sulla buona strada. Anzi, come ho scritto precedentemente, ti stai per suicidare

    Sia chiaro, con le liste CI PUOI FARE ASSOLUTAMENTE TUTTO.
    Esiste anche un linguaggio di programmazione basato TOTALMENTE sulle liste: il LISP (per gli amici: L)ista I)nfinita di S)tupide P)arentesi - non preoccuparti, chi sa, ha capito )

    Ma nel tuo caso, per come e' impostato l'esercizio, NON VA BENE.

    Nota: non ci crede nessuno che sia un problema di insegnamento. Qui' e' un banale problema di aprire il libro al giusto capitolo E STUDIARE
  • Re: Consiglio sulla struttura da utilizzare

    Allora puoi consigliarmi un Libro dove questi argomenti sono ben trattati? (Evidentemente quello che ho non è all'altezza visto che ci sono banali esempi di come realizzare strutture basilari)
  • Re: Consiglio sulla struttura da utilizzare

    @migliorabile L)ista I)nfinita di S)tupide P)arentesi non l'avevo ancora sentita!! Ma rappresenta alla perfezione il linguaggio!
    @antomau96 io ti consiglio questo libro https://www.ibs.it/programmazione-di-base-avanzata-con-libro-/e/9788865181904 mi sono trovato molto bene!
  • Re: Consiglio sulla struttura da utilizzare

    Non credo che le liste siano la soluzione migliore poiché dovendo essere iterate per intero per trovare un dato, se un oggetto si trova nell'ultima posizione dell'ultimo magazzino ci vuole un ora per trovarlo... Avrei pensato ad un arrayList o qualcosa di simile ma poi si banalizza estremamente la soluzione del programma (arrayList per poter utilizzare la ricerca binaria)... Non mi vengono in mente nuove idee... qualcuno può proporre qualche soluzione?
  • Re: Consiglio sulla struttura da utilizzare

    Liste ed array sono strutture dati molto conosciute, ma ne esiste un'altra ESTREMAMENTE IMPORTANTE, che fa ESATTAMENTE al caso tuo.
    La trovi descritta in QUALUNQUE libro sulle strutture dati!
  • Re: Consiglio sulla struttura da utilizzare

    La struttura che mette le cose in ordine è l'albero binario ed è anche, a mio avviso, la più efficiente in termini di ricerca perché sa dove andare a prendere un determinato dato.
    Le liste / array / arrayList le ho già menzionate prima e non credo che facciano al caso mio.
    Le tabelle prevedono sempre l'utilizzo di array e liste...
    Pile e code peggio che andar di notte vista la complessità nel rimuovere elementi di mezzo...

    Che la soluzione sia l'albero?
    Ma in che modo deve essere implementato?

    Ogni nodo dell'albero deve contenere un albero binario che contenga gli oggetti di tale magazzino?



    Viste le circostanze e avendo pensato a quante migliaia di oggetti possono essere sparsi in centinaia di magazzini è la scelta migliore che mi viene in mente per adesso...
  • Re: Consiglio sulla struttura da utilizzare

    L'albero potrebbe andare bene, ma c'e' di meglio.

    Gli alberi hanno un problema fondamentale, che e' NECESSARIO/OBBLIGATORIO gestire: che cosa succede se i dati sono ordinati?

    Ancora uno sforzo e ce la puoi fare
  • Re: Consiglio sulla struttura da utilizzare

    Che siano le mappe? (si, lo so che se non è zuppa è pan bagnato )
    La mappa è una struttura che associa un valore ad una chiave che in questo caso potrebbe essere
    magazzino : prodotto
    anche perché permette di associare un valore a più chiavi e in questo caso un oggetto a più magazzini...
  • Re: Consiglio sulla struttura da utilizzare

    Yeahhhh!

    Esattamente: la mappa, detta anche dizionario

    Ma attento: NON PUOI andare a tentoni.

    La conoscenza delle strutture dati e' importante tanto quanto saper programmare: i due concetti (ALGORITMI e STRUTTURE DATI) sono INSEPARABILI
  • Re: Consiglio sulla struttura da utilizzare

    Chiedo venia per la mia ignoranza ma la verità è che le mappe durante il corso di studi sono state talmente sottovalutate che non le avevo minimamente prese in considerazione per un esercizio che si prefigura come una specie di bestia nera per chi il Java lo deve imparare in 5 mesi tralasciando molti aspetti significativi...

    È vero, quelli da te citati, sono due aspetti fondamentali ma a dire la verità senza offendere nessuno, di conoscerli in Java poco mi interessa... Il mio linguaggio preferito è il C (Ansi) e mi duole il cuore solo a pensare che in C ho studiato solo le liste mentre in Java sto studiando tutti tipi di struttura...
  • Re: Consiglio sulla struttura da utilizzare

    Visto che i libri in mio possesso implementano le mappe come strutture già belle e fatte qualcuno potrebbe indicarmi qualche libro dove studiare in che modo è possibile implementare una struttura di tipo mappa partendo da zero?

    ad esempio per le liste si implementano i vari metodi per l'aggiunta, restituzione, eliminazione dei dati e poi si implementa un iteratore... per le mappe in che modo devo procedere?

    Non mi va di utilizzare strutture già esistenti ma voglio imparare in che modo si realizzano
  • Re: Consiglio sulla struttura da utilizzare

    L'implementazione di una mappa e' abbastanza complicata: ci sono MOLTE cose da prendere in considerazione (da COME implementarla, se mediante un albero o una tabella hash, a come ribilanciarla, quale tipo di albero usare - rb tree | avl ...- o quale funzione hash ...)
    Per il momento usa quelle gia' disponibili.

    Per poterla implementare da zero ti servono competenze che in questo momento non hai ancora, o, se le possiedi, non le hai ancora digerite adeguatamente.

    Dai tempo al tempo.

    Il C e' un linguaggio procedurale con una libreria di base risicatissima, e la necessita' di gestire la memoria.

    Java e' un linguaggio ad oggetti, strapotente, ipato, con gestione automatica della memoria, e con una libreria immensa!

    Non ci sono paragoni: c'e' la stessa differenza che c'e' tra un triciclo e una macchina di Formula 1!
Devi accedere o registrarti per scrivere nel forum
25 risposte