Comment mettre en place une file d'attente avec trois piles?

Je suis tombé sur cette question dans un des algorithmes de livre (Algorithmes, 4e Édition par Robert Sedgewick et Kevin Wayne).

File d'attente avec trois piles. Mettre en œuvre une file d'attente avec trois piles de sorte que chaque file d'attente, l'opération prend une constante (dans le pire des cas), le nombre de pile opérations. Avertissement : degré de difficulté élevé.

Je sais comment faire une file d'attente avec 2 piles mais je ne peux pas trouver la solution avec 3 piles. Une idée ?

(oh, et, ce n'est pas de devoirs 🙂 )

  • Êtes-vous vraiment sûr que votre 2 pile solution est vraiment une file d'attente, et que la queue de la file d'attente n'est pas l'alternance de son ordre?
  • Oui mes 2 pile solution est une file d'attente. Une pile est utilisée pour mettre en file d'attente, les autres à la file d'attente. Si la sortie de la pile est vide, l'entrée de la pile est poussé vers la sortie de la pile, de manière efficace de l'inverser.
  • Je suppose que c'est un Tour de Hanoi variante.
  • Je pense que vous avez raison, mais ce que signifie "constante ops" dans le TOH?
  • Ah en effet !
  • Si vous avez compris, vous pouvez écrire votre propre réponse et de l'accepter;)
  • utilisez votre 2 approche de la pile avec une pile sans utilisation, vous pourrez l'étendre pour n > 2 de la file d'attente 😀
  • double possible de la Conception d'une pile qui peut également retirer en O(1) amorti temps?
  • ...ou peut-être pas. En tout cas, la référence est algs4.cs.princeton.edu/13stacks article 43.
  • Cette question n'est pas un doublon, car il demande O(1) amorti temps tandis que celui-ci demande O(1) le pire des cas pour chaque opération. DuoSRX deux-pile solution est déjà en O(1) amorti temps par opération.
  • Pour les trois piles, je pense que le troisième ajout d'une pile de mise en œuvre est pour inserts qui seraient normalement rester vide et quand itérer seraient retirés, & ajouté à l'une des deux autres, mais dans le cas de plusieurs insertions et pas de l'itération dans / à travers l'un des deux autres, vous feriez courir dans des problèmes. Bonne question.
  • BTW, pouvez-vous citer le titre du livre c'est?
  • c'est à partir des "Algorithmes" 4ème Édition de Robert Sedgewick et Kevin Wayne.
  • Le texte ici dire que seule la "file d'attente" de l'opération doivent être des constantes de temps? c'est à dire, file d'attente peut être O(n)? Je suppose que non, car cela peut être résolu avec seulement 2 piles.
  • Tout d'abord, votre solution à deux pile cas a amorti (pas "normal") d'un coût de O(1) pour chaque opération - est-ce acceptable pour votre question? Si oui, alors quel est l'inconvénient de l' @Saeed son idée? 🙂 Juste Essayer de undertand la question.
  • L'auteur assurer de ne plaisantait pas quand il a dit "Avertissement : degré de difficulté élevé."
  • Je ne suis pas sûr de ce que l'auteur veut dire par cette déclaration-> prend constante (dans le pire des cas), le nombre de pile de l'exploitation. Veut-il dire qu'il veut dans le pire des cas, les délais de complexité, ou veut-il dire que dans le pire des cas , la complexité du temps doit être constante??Si le cas est le dernier de la de deux, puis de l'hôpital d'ottawa semble être une solution pour moi.
  • Pire-cas du temps de la complexité désigne le pire moment de la complexité pour toutes les entrées possibles. Par exemple, si une opération a été constante, et la plupart du temps, mais linéaire, à certains moments, son pire des cas est linéaire. Le "pire" dans ce contexte signifie "moins efficace". Ainsi, l'auteur demande une file d'attente mis en œuvre à l'aide de trois piles telles que toutes les opérations de mise en attente peut être fait dans un constant nombre de mesures, comme quelque chose de moins performant que celui, par définition, être le pire des cas.
  • Donc ce qu'il fait dire , qu'il veut que l'opération peut se faire en O(1) le temps de la complexité.. j'.e constante de temps.Ou je me trompe encore?
  • Oui, c'est ma compréhension de la question.
  • malheureusement, la complexité du temps de la Tour de Hanoï est nulle part près de la constante de temps!
  • Le nombre de piles de vraiment aider? Je ne suis pas convaincu que si le fait d'avoir 100 piles de même rendre le problème plus facile (ou valide)
  • Peut-être qu'il est temps d'écrire au prof. Sedgewick et lui demander comment résoudre cette question.
  • Je viens de le premier (allemand) édition de la Sedgewick-il cette cession n'est pas dans. C'est que l'exacte et complète libellé, ou est-il comme "et dans le cas où il n'est pas possible, la preuve il"?
  • Quand il dit "file d'attente" de l'opération, est-ce que signifie "mettre en file d'attente" et de la "file d'attente" ou seulement l'un d'eux? Je sais que c'est un daft question, mais à la file d'attente de quelque chose est de le placer dans une ligne ou "mettre en file d'attente", auquel cas ce serait problème trivial.
  • la file d'attente de l'opération". Si toutes les méthodes d'une classe de File d'attente: mettre en file d'attente, file d'attente, vide, etc.
  • Jason S. du lien dans le commentaire n ° 9 va vous prendre pour le texte complet du problème.
  • elle peut être faite avec 6 piles
  • Je pense que c'est un jeu de mots, par les auteurs des livres...
  • Pourquoi? Parce que vous ne pouvez pas le résoudre?
  • Non... parce que quand vous regardez la littérature académique fonctionnelles pour les implémentations de la file d'attente, qui sont basés généralement sur immuable contre-structuré listes, j'.e des piles, du mieux que je peux trouver est un avec 6 piles. J'imagine que si une solution avec 3 piles existé, il aurait été publié quelque part, comme un 6-pile solution a été au-dessus de la publication académique seuil. Je ne peux pas résoudre le problème, soit, mais qui n'a pas d'importance ici.
  • Capot–Melville, qui est essentiellement rien de plus qu'une note de bas de page Leong–Seiferas, a été publié en tant que tech rapport et dans le journal de Traitement de l'Information des Lettres, ce qui n'est pas à distance prestigieux maintenant (et n'était probablement pas à l'époque). Il n'y a aucune raison de penser qu'une établi académique comme Sedgewick se donne la peine d'écrire un trois-pile de solution.
  • Bien sûr, je n'ai pas de problèmes avec ça. Espérons que les trois-pile solution est trouvée à partir de quelque part, ou que quelqu'un obtient à partir de Sedgewick. Il nous serait cool d'apprendre comment il fonctionne, et comment il a été dérivé.
  • Comme @Leonel a dit il y a quelques jours, j'ai pensé qu'il serait juste de vérifier avec le prof. Sedgewick si il connaissait une solution ou il y avait une erreur. J'ai donc fait de lui écrire. Je viens de recevoir une réponse (qui n'est certes pas de lui-même mais à partir d'un collègue à Princeton) donc je tiens à partager avec vous tous.Il a dit essentiellement qu'il ne connaissait aucun des algorithmes à l'aide de trois piles ET les autres contraintes imposées (comme de ne pas utiliser d'évaluation différée). Il n'a connaissance d'un algorithme à l'aide de 6 piles comme nous le savons en regardant les réponses ici. Donc je suppose que la question est encore ouverte pour trouver un algorithme (ou à prouver que l'on ne peut pas être trouvé).
  • Merci beaucoup --- je suppose que c'est près de s'installer ensuite. 6 piles solution existe (j'en référence dans ma solution) et les personnes proches de l'original de l'auteur de la question ne sont pas conscients de 3 piles solution.
  • J'ai changé ma réponse à une communauté wiki
  • Et copié @gusbro commentaire il
  • Remarque: La question posée dans le texte a été mis à jour à: mettre en Œuvre une file d'attente avec un constant nombre de piles [pas de "3"] de sorte que chaque file d'attente des opérations prend une constante (dans le pire des cas), le nombre de pile opérations. Avertissement: degré de difficulté élevé. (algs4.cs.princeton.edu/13stacks - Section 1.3.43). Il semble que le prof. Sedgewick a concédé le défi d'origine.

InformationsquelleAutor DuoSRX | 2011-04-04