明らかに、長さバイナリ文字列があります。バイナリをトラバースするには、アルゴリズムは各ノードに1回アクセスする必要があります。つまり、
ステップ。4n2n
∑i=02n2i=22n+1−1=O(4n)
説明したツリーを走査するが、途中で1と0の数を数える再帰アルゴリズムを考えてみましょう。つまり、ツリーの適切な部分のみを走査します。
しかし、 0と 1を持つバイナリ文字列はいくつありますか?長さ文字列として 1 を選択し、ステップ2でスターリングの公式を使用し。
nnn2n
(2nn)=(2n)!(n!)2=4nπn−−−√(1+O(1/n))
編集
Peter Shorのコメントのおかげで、1と0をカウントする2番目のアルゴリズムで必要なステップ数も分析できます。私は彼のコメントを下から引用しています:
正確に 0と 1を持つすべてのバイナリシーケンスを見つけたいと考えています。各ノードが最大で 0と1のシーケンスであるバイナリツリーをトラバースします。 0 を超えるノードや 1 を超えるノードにアクセスする必要はありません。いくつのノードにアクセスする必要がありますか?ありと文字列 0と 1つのを。これをすべての合計するとは。ここで、ノードごとに一定の平均コストでこれらの各ノードにアクセスする必要があります。これを行うには、最初に左の子を訪問し、次に右の子を訪問します。nn2nnn(i+ji)iji,j≤n∑ni=0∑nj=0(i+ji)=(2n+2n+1)−1
スターリングの公式を再び使用して、
を新しいアルゴリズムの実行時間として。
(2n+2n+1)−1=4n+11n+1−−−−−√(1+O(1/n))−1=O(4nn−−√)