Je suis en train de créer une unité appelée Data Structures and Algorithms. Nous venons juste de commencer et mon professeur vient de nous enseigner les bases de ce qu'est la sémantique algébrique et de ce que sont les axiomes etc. Jusqu'à présent, je viens d'utiliser des arbres sous forme de tableaux. Ne pas utiliser la signature pour l'arbre précommandé comme arbre (valeur, arbre, arbre) où la valeur est la valeur dans le nœud, le nœud gauche est le premier arbre et le nœud droit est le deuxième arbre. Maintenant que je définis mon arbre comme arbre (valeur, arbre, arbre) ou Nul, je ne peux pas comprendre comment définir l'algèbre pour addNode (valeur, arbre).Tree Abstract Data Type
Cela devient de plus en plus compliqué à chaque niveau, en plus, je ne peux absolument pas penser à balayer un niveau comme une fois, en essayant depuis une heure maintenant. L'algèbre se ramifie de plus en plus en if-elses quand nous descendons dans l'arbre. Est-ce que je le fais bien? Pouvez-vous me pointer dans la bonne direction? Ou les arbres ne peuvent pas être implémentés comme arbre (valeur, arbre, arbre)?
Cela fait partie de mon tutoriel (ne vaut pas la moindre note, dans les questions supplémentaires), mais je ne cherche pas une réponse instantanée, j'aime le sujet, et j'aimerais en savoir plus.
Edit 1: J'ai vérifié Wikipedia, et je ne veux pas utiliser le manuel pour la réponse claire, je cherche juste un soupçon vers la bonne direction, que mon approche est juste ou il est tout à fait impossible de définir un arbre comme arbre (valeur, arbre, arbre). Je sais que vous pouvez représenter un arbre ADT sous la forme d'une liste. Mais je voulais vraiment y penser. J'espère que cela a du sens. Merci beaucoup les gars!
Édition 2: Euh, c'est difficile à expliquer sur internet. Disons que je définis une nouvelle structure de données appelée "arbre". Je peux le définir comme je veux, et il doit se comporter comme un arbre binaire équilibré (bien que les valeurs des parents et des enfants ne comptent pas) Donc je le définis comme arbre: arbre (valeur, arbre, arbre) OU nul Ce n'est pas code de programmation, c'est juste comment je le définis. Tree est une valeur + 2 autres arbres ou Arbre est nul. Maintenant, addNode (value, tree) ajoute un nœud à l'arbre tout en le maintenant équilibré. Ce n'est pas du code de programmation, c'est juste de la sémantique algébrique. Je ne sais pas si je peux l'expliquer correctement. Mais je suis arrivé à une solution que je peux atteindre en utilisant Queues ou Stacks, mais c'est un autre ADT que je vais devoir définir, ce qui n'est pas valide. Éditer 3: On dirait que j'avais supposé beaucoup de choses qui rendaient le problème plus difficile qu'il ne l'était censé être. Tout d'abord, d'après la petite explication que j'ai donnée, la réponse de Gamecat était parfaite. Mais je suis d'accord avec les commentaires, il est parfaitement possible d'inclure d'autres ADT. En fait, lorsque nous construisons quelque chose qui utilise un Int, nous utilisons un ADT pour cette structure. Je pensais que chaque ADT devait être unique. De toute façon, merci beaucoup les gars pour vos réponses!
Il n'est pas clair pour moi quel est le problème. Cela aide si vous êtes plus précis: que doit faire AddNode (ajouter la valeur en tant que root? Préserver l'équilibrage?) Et comment le faites-vous maintenant (par exemple, quels axiomes)? La seule chose que je peux dire maintenant est que la représentation est bonne (sauf pour utiliser 'tree' à la fois comme fonction et type). – mweerden
Je reçois la partie algébrique. Ce qui n'est pas clair, c'est où vous êtes coincé. Pouvez-vous donner un exemple de ce que vous avez obtenu jusqu'ici? Ce n'est pas grave si c'est totalement faux. En outre, quel est le problème avec la solution files d'attente/pile? Pourquoi un autre ADT n'est-il pas valide? – mweerden