2017-10-12 13 views
-2

与えられたn:頂点の数、n個の頂点を持つツリーをランダムに生成したい。 現在、random_shuffle()を使用して、n個の頂点のランダムシーケンスを生成し、線形ツリーのみを生成しています。しかし、C++で他のツリータイプを含めるにはどうすればそれをランダムに作ることができますか?あなたの目標を想定C++でn個の頂点を持つツリーをランダムに生成する方法は?

+1

"純粋にランダムな"ツリーのようなものはありません。あなたは、n個の頂点を持つツリーのセットに対して、一様な確率分布に従う擬似ランダムツリーを生成する方法を意味しますか? –

+0

@MassimilianoJanesはい。 – user3243499

答えて

2

はn個の頂点を持つルートと標識された木の集合上均一確率分布に従う擬似乱数ツリーを生成することで、溶液は、いわゆるPrüferコードを生成することである、それは一様に生成されたランダムであります[1、n]内の(n-2) - タプルの数である。 ;

https://en.wikipedia.org/wiki/Pr%C3%BCfer_sequence

しかし、私は十分にそれがランダムな方法を行うことができます

なものは、「十分にランダム」としてありません。

のwikiの記事は、擬似コードを使用する準備ができていますは、ツリーの配布に必要なプロパティを指定する必要があります(そのような配布が複数存在する可能性があります)。 (頂点がn個のすべての木の集合などの)有限集合の特殊なケースでは、常に一様分布を一意に定義することができますが、これは決して「よりランダム」でも「より自然」でもなく、何か...それが正しい流通であるかどうかはあなた(そしてあなたの究極の目標)によって決まります。

+0

これはまた、Pythonの[networkx](https://networkx.github.io/documentation/stable/reference/generated/networkx.generators.tree.random_tree.html#networkx.generators.tree.random_tree)で '' ' 'generators.tree.random_tree'''(それは実用的な重要性をいくらかサポートしています)。 – sascha

関連する問題