Les débutants ont-ils des problèmes avec les structures de données? [fermé]

17

Je prends mon deuxième cours sur Java. Nous entrons dans les structures de données. J'ai fait une affectation sur une liste chaînée, et maintenant une pile. J'ai eu du mal avec la liste chaînée. La pile m'a donné un peu de mal, mais c'était beaucoup plus facile.

Dois-je m'inquiéter d'avoir du mal avec ces algorithmes et structures de données? J'ai juste l'impression de ne pas l'avoir vraiment compris.

Brock
la source
Exemple réel de la liste liée - stackoverflow.com/questions/644167/…
pramodc84

Réponses:

44

Je pense que vous ne devez pas accepter de ne pas comprendre ces choses, car elles sont vraiment fondamentales. Cela étant dit, ne pas les comprendre ne vous fait pas de mal. Vous pouvez expliquer une liste chaînée à un enfant. Donc, si votre professeur ne vous les a pas expliquées, c'est tout autant de leur faute. Vous ne devez donc pas passer du temps à vous inquiéter, mais plutôt essayer de trouver des gens qui peuvent vous l'expliquer. Souvent, un camarade de classe est un enseignant bien meilleur qu'un universitaire à temps plein.

Pensez aux trains

Imaginez, vous avez un ensemble de wagons de chemin de fer, où chaque wagon a une capacité suffisante, pour contenir une seule donnée. Chaque chariot a une sorte de crochet à son extrémité, qui peut être attaché à l'avant d'un autre chariot.
Cela vous donne en fait une liste de liens:

  • la liste vide: le train ne contenant pas de wagons (et donc ne transportant pas de données)
  • ajout d'un élément: ajoutez un nouveau wagon contenant l'élément devant le train et accrochez-le au reste du train
  • suppression d'un élément: recherchez le chariot contenant l'élément. Retirez-le (vous pourriez avoir besoin d'une grue ici :)), accrochez le chariot avant avec le chariot après.
  • remplacement d'un élément: recherchez le chariot contenant l'ancien élément. Échangez l'ancien élément avec le nouvel élément.
  • insérer un élément juste après un autre: recherchez le chariot contenant l'élément après lequel vous souhaitez insérer. Insérez un nouveau wagon après celui-ci, qui est accroché en conséquence (nous ne voulons pas que le train se désagrège) et placez-y le nouvel élément.

Contrairement à cela, vous pourriez considérer un réseau comme un train avec un nombre donné de wagons, qui ne peuvent être réarrangés en aucune façon. Tout ce que vous pouvez faire est de modifier les données qu'ils contiennent. Ce modèle explique également de nombreux problèmes rencontrés par les tableaux:

  • Si vous souhaitez insérer un élément avant un autre, vous devrez déplacer tous les éléments suivants vers le chariot suivant.
  • Si vous souhaitez supprimer un élément, vous devrez déplacer tous les éléments suivants d'un chariot vers l'avant.
  • Si vous avez besoin d'un train avec plus de wagons, vous devrez en construire un nouveau, car vous ne pouvez pas simplement ajouter un wagon. En revanche, trouver des chariots dans un tableau est beaucoup plus facile, car vous pouvez simplement les numéroter de façon permanente (leur ordre ne changera jamais).

Quant à la pile: Une «pile» est moins une structure de données qu'une idée. L'idée de la pile est qu'elle agit un peu comme une pile de livres. Vous ne pouvez mettre que des livres sur le dessus de la pile et vous ne pouvez jamais retirer le livre du haut de la pile (du moins si les livres sont suffisamment lourds).
Cela étant dit, une liste chaînée peut être utilisée comme une pile, si vous considérez les données dans les chariots comme des livres, et le livre dans le premier chariot comme le haut de la pile.

J'espère donc que cela vous a aidé. Peut-être que non. Vous êtes peut-être plutôt du type visuel. Dans ce cas, je vous suggère de trouver quelqu'un qui sait bien donner des explications visuelles et vous l'expliquer. Cela ne prendra pas longtemps, mais cela en vaudra la peine.

C'est ok de lutter avec ça maintenant. Mais simplement l'accepter n'est pas une option à long terme.

back2dos
la source
2
Cool réponse! Je me suis rendu compte que l'on pouvait enseigner les structures de données de base aux enfants à travers un jeu flash / autre avec une série d'objectifs à remplir. La même idée de train peut également aider les enfants à saisir les nombres binaires, si chaque wagon est 2x plus grand et plus petit que son voisin.
Job du
1
Ok, maintenant que vous avez cela, passons aux structures de données avec plusieurs liens. Le train a donc un attelage sur le côté, qui peut s'accrocher à un autre ensemble de voitures. Mais le rail pour ces voitures glisse le long de la première piste ...
Philip
12

Je ne dirais pas que vous "devriez vous en inquiéter", mais le simple fait que vous reconnaissez vos points faibles montre que vous savez exactement où étudier plus. Je pense que vous serez bien servis par cette attitude et que tout ira bien à long terme.

Dave Nay
la source
6

Pour citer mon professeur préféré du CSCI:

"Panic, but panic early."

Les structures de données semblent difficiles, non? Pour moi, cela semble abstrait et un peu complexe et surtout ... important!

Les structures de données sont un cours essentiel. Et il est courant de lutter, mais continuez! Tant que vous mangez vos Wheaties et continuez, vous atteindrez l'arc-en-ciel avec un bagrempli de generic items dessous.

Adel
la source
La panique précoce impliquerait l'abandon? Après les structures de données, il y a aussi des exigences mathématiques, des algorithmes, des systèmes d'exploitation, de l'IA, des compilateurs, la théorie du calcul ... cela ne facilite pas la panique, mais peut-être que le fait que l'on ne soit plus un étudiant de première année ou un étudiant en deuxième année aide même bien que les choses deviennent plus difficiles.
Job du
3

Très bons points dans d'autres réponses, juste une note à ajouter: les listes liées IMO peuvent être plus difficiles que par exemple les piles pour beaucoup de gens car elles s'appuient sur l' indirection (exprimées via des références / pointeurs ). Et ces concepts sous-jacents peuvent être difficiles à saisir .

Péter Török
la source
3

Les structures de données ont été la première classe «difficile» que j'ai suivie; nous avons utilisé Fortran 77 au lieu de Java, mais les concepts sont largement les mêmes.

Il m'a fallu une semaine de plus que mes camarades de classe pour comprendre le concept d'une liste chaînée; J'ai biffé le devoir, mais après quelques séances légèrement frustrantes avec mon professeur, il a finalement cliqué (littéralement; j'ai entendu un "clic" dans ma tête quand j'ai finalement compris).

Tout le monde a des problèmes quelque part dans son programme CS (sauf s'ils sont des monstres). Si vous comprenez où sont vos faiblesses et comment y remédier, vous n'avez vraiment rien à craindre.

John Bode
la source
1
Ne paniquez pas, continuez à travailler et attendez le clic ...
NWS
2

Avez-vous eu du mal à comprendre la liste chaînée, ou tout simplement des problèmes avec votre implémentation?

Il n'est pas inhabituel pour un nouveau programmeur d'avoir des difficultés, car c'est peut-être la première fois que vous devez réfléchir à ce que cela signifie vraiment lorsque vous écrivez:

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

Je me suis tout tordu dans ALGOL / W sur le même exercice, parce que je ne comprenais pas vraiment la sémantique du langage. Un an plus tard, je pouvais à peine me rappeler pourquoi j'avais des difficultés.

Kevin Cline
la source
1

Il y a forcément des domaines de développement logiciel que vous trouvez plus difficiles que d'autres. Que ce soit certains algorithmes, certains modèles de conception ou certaines procédures varient d'une personne à l'autre. Je trouve que je dois utiliser quelque chose sur un vrai programme avant de bien le comprendre.

Je serais plus inquiet si quelqu'un prétendait tout savoir et n'avait jamais eu de problèmes pour apprendre quelque chose.

Personnellement, je n'ai jamais semblé avoir de problèmes avec les listes chaînées, mais j'ai ensuite travaillé sur un programme pendant 8 ans qui les utilisait partout, donc je travaillais avec eux quotidiennement. Tant que vous savez trouver les informations dont vous avez besoin pour rafraîchir votre mémoire et connaître les zones où vous avez des "problèmes", vous devriez être OK.

ChrisF
la source
Je pense également qu'il serait utile que je puisse interagir avec un programme qui utilise également ces structures de données. J'en suis au stade où je me pose la question: pourquoi ces informations seraient-elles utiles?
Brock
0

J'ai eu des problèmes avec le calcul et j'ai dû le reprendre une deuxième fois. La deuxième fois, j'ai découvert que j'étais intelligent, mais le premier professeur de mathématiques était pratiquement inutile :)

Vous allez trouver beaucoup de personnes en informatique qui ne peuvent pas bien communiquer, même des enseignants. D'un autre côté, certains informaticiens sont de véritables grands écrivains et maîtres communicateurs.

Parfois, la lecture à l'extérieur peut vraiment aider. Les livres informatiques varient énormément en qualité. Montez sur Amazon et voyez ce que les gens aiment vraiment aimé.

Bonne chance.

Glen P
la source