配列を入力として受け取る関数があります。配列を同じサイズの部分に分割しますは配列のサイズです。要素が2つだけ残るまで、各サブ配列を分割し続けます。この再帰の深さはどれくらいですか?
プロセスの例:
最初に要素があり、それらを同じサイズの部分に分割します。これらの各部分には、要素が含まれています。次のレベルの再帰では、各配列を同じサイズの部分に再度分割します。これらの各要素には、要素が含まれるようになります。そして、要素が2つしかないサブ配列に到達するまで、この方法で配列を分割し続けます。
配列を入力として受け取る関数があります。配列を同じサイズの部分に分割しますは配列のサイズです。要素が2つだけ残るまで、各サブ配列を分割し続けます。この再帰の深さはどれくらいですか?
プロセスの例:
最初に要素があり、それらを同じサイズの部分に分割します。これらの各部分には、要素が含まれています。次のレベルの再帰では、各配列を同じサイズの部分に再度分割します。これらの各要素には、要素が含まれるようになります。そして、要素が2つしかないサブ配列に到達するまで、この方法で配列を分割し続けます。
回答:
ましょ、およびによって表すのアプリケーションの数、それが取得するのにかかるいくつかの任意の定数を下回ります。一方で、なので、
上限を取得するには、である限り、なので、をに減らすには、最大で反復が必要です。同じ議論がをに削減するために適用されます
反復対数を参照しているようです。log関数とも呼ばれます。これは、1以下の数値が生成されるまで、数値の対数を何回取ることができるかを表す関数です。
関数は、非常にゆっくりと成長します。テトラションの逆です。
詳しくはこちらをご覧ください。
nを配列のサイズとします。k = log2(n)とします。最初のステップでは、kで割ります。配列のサイズが超える限り、k / 2以上で除算します。これはO(log n / log log n)だと思います。
(常にkの部分に分割する場合、log n / log kの分割が必要です。特別なケースk = log nを要求したため、log n / log log nを実行します。次に、kを縮小すると違いが生じるかどうかを判断する必要があります。)
以下のすべての対数は、底が2の対数、つまり意味します。
質問指定された関数に名前を付けます。(「強打」はから来るのでplitting ログ。また、「暗示できSよりmaller ログ」。)正確に言えば、 で、以下の条件によって定義されます。
の漸近的な振る舞いに関する次の命題を証明できます。
これが証明の基本的な考え方です。
当然です。。
をに定義し、をに定義し、を定義しても、同じ結論が成り立ちます。。
運動。の完全な証明を書き。