Wie würde man ein zufälliges Element aus einem Baum auswählen? Ist es notwendig, die Tiefe/Größe des Baumes vorher zu kennen?So wählen Sie einen zufälligen Knoten aus einem Baum
Antwort
Tun Sie einfach für jeden Knoten einen zufälligen Anruf im Bereich 0 bis (Anzahl der Kinder) -1 und wählen Sie das nächste Kind nach dieser Nummer.
Wiederholen Sie dies, bis Sie in einem Blatt sind.
Es ist nicht. Um einen Knoten gleichmäßig nach dem Zufallsprinzip zu wählen, durchlaufen Sie den Baum einfach in beliebiger Reihenfolge. Sei der untersuchte n-te Knoten der Auserwählte mit der Wahrscheinlichkeit 1/n. Das heißt, notieren Sie den Knoten, den Sie in einer Variablen zurückgeben, und wenn Sie den n-ten Knoten betrachten, ersetzen Sie den aktuellen Knoten durch den n-ten mit der Wahrscheinlichkeit 1/n. Sie können durch Induktion zeigen, dass dies einen Knoten gleichmäßig nach dem Zufallsprinzip zurückgibt, ohne vorher wissen zu müssen, wie viele es sind.
Wenn Sie Ihre Blätter strukturiert haben in einem Index-fähigen Datentyp gespeichert, sich selbst zu sein, wie ein Array, dann können Sie leicht (Pseudo-Code):
random_leaf = leaf_pile[ random(size of leaf pile) ]
Das ist eine schöne, erfrischende O (1) :-)
Natürlich kann es Löcher geben, also müssen Sie möglicherweise von dort iterieren. Wenn es als verknüpfte Liste gespeichert ist, können Sie es iterieren.
Nur eine Alternative zum Offensichtlichen bieten. Es hängt wirklich von Ihrer Datenstruktur und Ihrem häufigsten Anwendungsfall ab.
- 1. Wählen Sie einen zufälligen Artikel aus einer Tabelle
- 2. Java: Wählen Sie einen zufälligen Wert aus einer Enum?
- 3. Wählen Sie einen zufälligen Wert von einem Go Slice
- 4. Wählen Sie zufällig einen Knoten in XSLT
- 5. So wählen Sie einen zufälligen Wert aus dem iOS-Picker-Rad mit Selenium
- 6. So wählen Sie einen Wert aus Dropdown
- 7. Erstellen Sie einen Baum aus Oracle Tabellen
- 8. So implementieren Sie einen nicht binären Baum
- 9. Wann wählen Sie RB-Baum, B-Baum oder AVL-Baum?
- 10. Ermitteln Sie die Entfernung zwischen zwei zufälligen Knoten in einem Baum
- 11. So wählen Sie Text zwischen zwei Knoten aus
- 12. Wählen Sie einen bestimmten Knoten und seinen Wert aus XElement
- 13. So weisen Sie einen zufälligen Int einem JButton zu
- 14. Wählen Sie Zeilen aus der Tabelle mit Baum um
- 15. So wählen Sie XML-Knoten mit XML-Namespaces aus einem XmlDocument aus?
- 16. Wählen Sie XML-Knoten aus einem Namespace Powershell mit
- 17. Wählen Sie einen bestimmten Knoten neben einem anderen - C# - SelectSingleNode
- 18. Wählen Sie die Kinder eines Knotens aus einem Baum in d3.js
- 19. C# wählen Sie Knoten aus XML
- 20. Wählen Sie einen bestimmten Knoten in XPath
- 21. Java Drucken Baum aus Knoten mit Zweigen
- 22. So wählen Sie einen Status in Rails aus Carmen state_select
- 23. So entfernen Sie einen Knoten aus XmlDocument geladen XML
- 24. So wählen Sie einen Dienst in Grails dynamisch aus
- 25. Erhalten Sie einen Buchstaben aus einem Wort
- 26. Wählen Sie * aus Wählen Sie
- 27. So führen Sie ein Skript in zufälligen Intervallen aus
- 28. So wählen Sie einen bestimmten Artikel aus einer benutzerdefinierten Listenansicht
- 29. Knoten im Domino-Baum
- 30. So wählen Sie einen Map-Pin programmgesteuert aus
Dies wird auf Knoten in den oberen Ebenen des Baumes ausgerichtet sein. Zum Beispiel die Wahrscheinlichkeit, dass der rootNode = 1/3 gewählt wird (unter der Annahme von maximal 2 Kindern). Die Wahrscheinlichkeit, den am weitesten links liegenden Blattknoten zu wählen = (1/3)^k, wobei k = Tiefe des Blattknotens. –
das ist wahr, aber in einigen Fällen ist es egal, aber thx für das Aufzeigen dieser – Quonux