Ha problemi con le strutture dati comuni per i principianti? [chiuso]

17

Sto seguendo il mio secondo corso su Java. Stiamo entrando nella struttura dei dati. Ho eseguito un compito su un elenco collegato e ora uno stack. Ho avuto un momento difficile con la lista collegata. Lo stack mi ha dato un piccolo problema, ma era molto più semplice.

Dovrei essere preoccupato di avere difficoltà con questi algoritmi e strutture dati? Mi sento come se non l'avessi davvero capito.

    
posta Brock 02.10.2011 - 18:31
fonte

8 risposte

44

Penso che non devi accettare di non capire queste cose, perché sono davvero fondamentali. Detto questo, non comprenderli non è niente di cui sentirsi male. Puoi spiegare un elenco collegato a un bambino. Quindi se il tuo insegnante non ti ha spiegato, è colpa loro. Quindi non dovresti perdere tempo a preoccuparti, ma piuttosto cercare di trovare persone che possano spiegartelo. Spesso un compagno di studi è un insegnante molto migliore di un accademico a tempo pieno.

Pensa ai treni

Immagina, hai una serie di vagoni ferroviari, dove ogni carrozza ha una capacità sufficiente, per contenere un pezzo di dati. Ogni carrozza ha una specie di gancio all'estremità, che può essere attaccato al davanti di un'altra vettura.
Questo infatti ti dà un elenco collegato:

  • la lista vuota: il treno senza carrelli (e quindi senza dati)
  • aggiunta di un elemento: aggiungi un nuovo carrello contenente l'elemento davanti al treno e collegalo al resto del treno
  • rimozione di un elemento: trova il carrello contenente l'elemento. Rimuovilo (potresti aver bisogno di una gru qui :)), aggancia il carrello prima con il carrello dopo.
  • sostituzione di un elemento: trova il carrello contenente il vecchio elemento. Scambia il vecchio elemento con il nuovo elemento.
  • inserendo un elemento subito dopo l'altro: trova il carrello contenente l'elemento dopo il quale desideri inserirlo. Inserisci una nuova carrozza dopo di essa, che è agganciata di conseguenza (non vogliamo che il treno si sfaldi) e inserisca il nuovo elemento in essa.

Al contrario, potresti pensare a un array come a un treno con un determinato numero di carrelli, che non può essere riorganizzato in alcun modo. Tutto quello che puoi fare è cambiare i dati al loro interno. Questo modello spiega anche molti degli array dei problemi:

  • Se vuoi inserire un elemento prima di un altro, dovrai spostare tutti i seguenti elementi al prossimo carrello.
  • Se vuoi rimuovere un elemento, devi spostare tutti i seguenti elementi di un carrello in primo piano.
  • Se hai bisogno di un treno con più carrozze, dovrai costruirne uno nuovo, perché non puoi anteporre una carrozza. D'altro canto, trovare carrelli in un array è molto più semplice, perché puoi semplicemente numerarli in modo permanente (il loro ordine non cambierà mai).

Per quanto riguarda lo stack: uno "stack" è meno una struttura dati, piuttosto che un'idea. L'idea dello stack è che funziona come una pila di libri. Puoi mettere i libri solo in cima allo stack e puoi sempre prendere il primo libro in pila (almeno se i libri sono sufficientemente pesanti).
Detto questo, una lista concatenata può essere usata come una pila, se pensi ai dati nei carrelli come libri, e il libro nella prima mossa più in vetta della cima della pila.

Quindi spero che questo ti abbia aiutato. Forse no. Forse sei più di un tipo visivo. In tal caso, ti suggerisco di trovare qualcuno, che è bravo a dare spiegazioni visive e spiegarlo a te. Non ci vorrà molto, ma ne varrà assolutamente la pena.

È ok a lottare con questo ora. Ma accettarlo semplicemente non è un'opzione a lungo termine.

    
risposta data 02.10.2011 - 19:27
fonte
12

Non direi che "dovresti essere preoccupato" a riguardo, ma il semplice fatto che tu riconosca i tuoi punti deboli mostra che sai esattamente dove studiare più duramente. Penso che sarai ben servito da quell'atteggiamento e andrà bene a lungo termine.

    
risposta data 02.10.2011 - 18:35
fonte
6

Per citare il mio insegnante CSCI preferito:

"Panic, but panic early."

Strutture dati suona duro, giusto? Per me lo fa, suona astratto e un po 'complesso e soprattutto ... importante!

Le strutture dati sono un corso vitale. Ed è comune lottare, ma continua! Finché mantieni i tuoi Wheaties e tieni premuto, raggiungerai l'arcobaleno con un bag riempito con generic items sotto.

    
risposta data 03.10.2011 - 01:57
fonte
3

Punti molto buoni in altre risposte, solo una nota da aggiungere: le liste collegate IMO possono essere più difficili di ad es. stack per molte persone perché si basano su indirection (espresse tramite riferimenti / puntatori ). E questi concetti sottostanti potrebbero essere difficili da comprendere .

    
risposta data 02.10.2011 - 18:50
fonte
3

Data Structures è stata la prima classe "difficile" che ho preso; abbiamo usato Fortran 77 invece di Java, ma i concetti sono in gran parte gli stessi.

Mi ci è voluta una settimana in più rispetto ai miei compagni di classe per unire il concetto di una lista collegata; Ho biffato il compito, ma dopo un paio di sessioni un po 'frustranti con il mio professore, alla fine ha fatto clic (letteralmente, ho sentito un "clic" nella mia testa quando ho finalmente capito).

Ognuno ha problemi da qualche parte nel proprio curriculum CS (a meno che non siano matti). Se capisci dove sono i tuoi punti deboli e come affrontarli, non hai davvero nulla di cui preoccuparti.

    
risposta data 02.10.2011 - 20:26
fonte
2

Hai avuto problemi a capire l'elenco collegato, o hai solo problemi con la tua implementazione?

Non è insolito che un nuovo programmatore abbia difficoltà lì, perché potrebbe essere la prima volta che devi pensare a ciò che veramente significa quando scrivi:

list.head = null;
Element e = new Element(...);
e.next = list.head;
list.head = e;

Sono stato contorto in ALGOL / W nello stesso esercizio, perché non avevo capito bene la semantica della lingua. Un anno dopo, riuscivo a malapena a ricordare perché avevo delle difficoltà.

    
risposta data 03.10.2011 - 01:10
fonte
1

Ci sono alcune aree dello sviluppo del software che trovi più difficili di altre. Sia che si tratti di determinati algoritmi, o di determinati schemi di progettazione o di determinate procedure, varieranno da persona a persona. Trovo che devo usare qualcosa su un programma reale prima di comprenderlo appieno.

Sarei più preoccupato se qualcuno affermasse di sapere tutto e non avesse mai avuto problemi nell'apprendere qualcosa.

Personalmente non ho mai avuto problemi con le liste collegate, ma poi ho lavorato su un programma per 8 anni che li usavo ovunque , quindi lavoravo quotidianamente con loro. Finché sai dove trovare le informazioni necessarie per aggiornare la tua memoria e conoscere le aree in cui hai "problemi", dovresti essere OK.

    
risposta data 02.10.2011 - 18:46
fonte
0

Ho avuto problemi con il calcolo e ho dovuto prenderlo una seconda volta. La seconda volta ho scoperto che ero intelligente, ma il primo insegnante di matematica era praticamente inutile:)

Troverai molte persone nell'IT che non sanno comunicare bene, anche gli insegnanti. D'altra parte alcune persone nell'IT sono veramente grandi scrittori e maestri comunicatori.

A volte leggere fuori può davvero aiutare. I libri informatici variano enormemente nella qualità. Vai su Amazon e guarda che cosa piace alla gente del libro.

Buona fortuna.

    
risposta data 11.10.2011 - 10:35
fonte

Leggi altre domande sui tag