In meinem Software-Engineering-Kurs, stieß ich auf die folgende Eigenschaft eines Stapels, kondensiert von mir: Was Sie schieben, ist was Sie Pop. Die voll axiomatische Version I Uled here.
Als ein geborener Troll habe ich sofort den Troll Stack erfunden. Wenn bereits mehr als 1 Element vorhanden ist, führt Push zu einer zufälligen Permutation dieser Elemente. Prompt kam ich mit den Dozenten in Streit, ob diese Nonsense-Implementierung tatsächlich gegen die Axiome verstößt. Ich sagte nein, das oberste Element bleibt wo es ist. Sie sagten ja, irgendwie können Sie das Push-Pop-Axiom rekursiv anwenden, um "tiefer" zu werden. Was ich nicht sehe. Wer hat Recht?Stack-Implementierung der Trollface-Weg
Antwort
Das verletzte Axiom ist pop(push(s,x)) = s
. Nehmen Sie einen Stapel s
mit n > 1
eindeutigen Einträgen. Wenn Sie push
so implementieren, dass push(s,x)
ist s'x
mit s'
eine zufällige Permutation von s
ist, dann wird, da pop
eine Funktion ist, haben Sie ein Problem: Wie Reverse Sie random_permutation()
so dass pop(push(s,x)) = s
? Das Urbild von s'
könnte eine der n! > 1
Permutationen von s
gewesen sein, und egal, welchem Sie zuordnen, gibt es n! - 1 > 0
andere ursprüngliche Permutationen s''
für die pop(push(s'',x)) != s''
.
Wahrscheinlich ist mein Problem, wie das Axiom iteriert wird. Wenn Sie das Axiom erneut für x ... mmmh einfügen, denke ich jetzt, dass ich es sehe. –
@HaukeReddmann Soweit ich sehen kann, ist keine Iteration erforderlich. Selbst nach einem 'pop (push())' haben Sie höchstwahrscheinlich einen anderen Stapel als Sie begonnen haben (wenn das Invertieren einer Permutation deterministisch durchgeführt wird, gibt es einen Eingabestapel, der durch 'pop 'auf sich selbst zurückgemappt wird (push()) '). –
In Fällen wie diesem, die für jeden sehr leicht zu sehen sind, aber nicht für Sie (daher Ihre Verwendung des "Troll" -Wortes), hilft es immer, das "Programm" einfach auf einem Blatt Papier auszuführen.
Notieren Sie, was passiert, wenn Sie ein paar Mal drücken und pop, und Sie werden sehen.
Sie sollten auch sehen können, wie diese Axiome dem tatsächlichen Verhalten Ihres Stacks sehr ähnlich sind; Sie sind nicht nur zum Spaß da, sondern sie geben (in mehreren Bedeutungen des Wortes) die Datenstruktur mit ihren Methoden an. Man könnte sie sogar als ein "formales System" betrachten, das die Vor- und Nachteile von Stacks beschreibt.
Beachten Sie, dass es immer noch gut für Sie ist, skeptisch zu sein; Dies führt zu a) besseren Einblick und b) Erkennung von Fehlern Ihrer Vorgesetzten. In diesem Fall haben sie Recht, aber es gibt Fälle, in denen Sie viel Zeit sparen können (zB bei der Suche nach der Lösung für das "MU" Rätsel in "Gödel, Escher, Bach", was eine ausgezeichnete Lektüre für Sie wäre, Ich denke).
- 1. Ändern der Darstellung der Nummerierung der Latexabschnitte
- 2. Der Punkt der Bencodierung
- 3. Der Punkt der Handler?
- 4. Die Methode der Berechnung der Verzögerung zwischen dem Drücken der Taste und der Ausführung der Codezeile
- 5. Überprüfen der Sichtbarkeit der Bildlaufleiste
- 6. Gegenüber der Tabulatur der Seite?
- 7. Erweiterung der Standardkomponente der Feder
- 8. Ermitteln der Gesamtsumme der Rasteransicht
- 9. Der Zugriffsbereich der Cloud Shell
- 10. Vergleich der Summe der Quadratwurzeln
- 11. Änderung der Anzahl der Münzen
- 12. Prozentsatz der Gesamtsumme der Gruppe
- 13. Ändern der Farbe der Statusleiste
- 14. Anzeige der Zellinkonsistenz der Tabelle.
- 15. Umleiten der Standardeingabe der Konsolenanwendung
- 16. Ermitteln der Größe der UITableViewCell
- 17. Anpassen der Form der Begrenzungsrect
- 18. Laout der Zeile der Liste
- 19. Erfassen der Druck der Funktion
- 20. aus der Liste der Listen
- 21. Bestimmen der Geschwindigkeit der Erschütterung
- 22. Ändern der Standardbeschreibungssprache der Anwendung
- 23. Erhalt der Reihenfolge der Funktionsimplementierung
- 24. Einschränken der Anzahl der Funktionsiterationen
- 25. Der Datenquellwert in der Verbindungszeichenfolge
- 26. Ändern der Argumente der Prozesseingabeausgabe
- 27. Der Umfang der klassendefinierten Freundschaftsfunktion?
- 28. Entfernen der Spitze der PriorityQueue?
- 29. Berechnung der Anzahl der Kombinationen
- 30. Erhöhung der Genauigkeit der Gleitkommazahlen
Sie haben Recht. –
Das verletzte Axiom ist 'pop (push (s, x)) = s'. –