web-dev-qa-db-fra.com

Application de la mise en œuvre de 3 piles en tableau unique

Eh bien, il y a beaucoup de discussions sur la mise en œuvre de 3 (ou 2 piles) dans un seul tableau. Mais quel est le besoin réel ou application pour la mise en œuvre de piles comme ça?

Ne pouvons-nous pas allouer la mémoire comme 3 piles séparées [tableau] elle-même? Quoi qu'il en soit, nous allons allouer array[size * 3] Dans ce tableau unique.

quelques liens qui en discutent:

3
Dineshkumar

De nombreuses questions d'entrevue ne servent aucun but pratique. Ils sont un défi de voir si vous pouvez penser à travers quelque chose de difficile. Les personnes qui leur demandent croient qu'ils servent de bonne substitut aux défis véritablement difficiles dans leur codage qui ne peuvent pas être expliqués dans une telle période aussi courte (et dont les solutions ne peuvent être évaluées aussi rapidement.)

En physique, il y a une histoire sur la question "Comment mesureriez-vous la hauteur d'un bâtiment avec un baromètre?" La réponse "droite" consiste à mesurer la pression d'air en haut et en bas et en appliquant une formule. Mes réponses préférées "mauvaises" impliquent le déposer du haut, mesurant le temps qu'il frappe le sol et appliquent une formule, ou recherchant l'architecte/concierge/propriétaire du bâtiment et offrant un commerce: je vais vous donner ceci Baromètre coûteux si vous me dites quelle est la taille de ce bâtiment.

Le point de la question n'était pas que les gens ont besoin de mesurer régulièrement la hauteur des baromètres (ou jamais), mais de voir si le candidat connaissait la formule de pression et de hauteur. De même, votre question va tester si vous savez gérer la mémoire, restructurer une approche simple (piles) pour gérer une contrainte étrange et penser à des choses intelligentes comme ne pas déplacer l'élément de la pile à empiler, mais simplement mettre à jour les liens. Bien qu'il puisse y avoir un cas étrange de bord, comme "chaque pile peut avoir jusqu'à un million d'articles, mais quand on développe les autres, les autres se contractent de sorte que l'espace total ne change jamais" qui se produisent dans le monde réel, ce n'est pas pourquoi vous êtes demandé résoudre le problème.

4
Kate Gregory

La mise en œuvre de plusieurs piles dans une seule matrice (liste liée) peut utiliser la mémoire plus efficacement.

Si vous avez trois piles dans trois tableaux distincts, chacun aurait besoin d'espace préalablement alloué pour permettre aux éléments futurs, et chacun aurait besoin de nouvelle mémoire à affecter s'il se remplit. Les combiner à un seul tableau réduirait la quantité de mémoire "supplémentaire" préalablement allouée pour les opérations futures et vous devrez attribuer une nouvelle mémoire moins de fois.

Cependant, les piles d'un seul tableau seraient également plus compliquées à gérer. Les éléments des trois piles seront entrecoupés les uns avec les autres. Lorsque des éléments sont retirés d'une pile, il peut laisser des lacunes. Vous devez ensuite pouvoir rechercher et remplir ces lacunes plus tard lorsque vous ajoutez un nouvel élément.

Avec la quantité de mémoire typiquement disponible ces jours-ci, combiner des piles de cette manière serait une optimisation assez extrême. Voulez-vous rarement penser à faire cela. Mais cela pourrait être utile occasionnellement.

Mise à jour : Il serait très utile dans certains cas spécialisés. Si vous avez une situation dans laquelle vous déplacerez fréquemment des éléments entre les piles, le stockage des piles dans un seul tableau serait plus efficace. L'élément mobile x de la pile A à empiler B ne devrait que changer les liens.

1
user82096