9

これは私には少し混乱します。制約が次の場合、特定の問題を解決するための私のアプローチはどうあるべきですか。

1)余分なスペースを使用しない:例:特定の配列を並べ替える場合、いくつかの方法があります。スワップを続けるバブルソート(ループのみ、再帰なし)。余計なスペースを使わないということだと思います。再帰を使用して要素を並べ替えるとどうなりますか。「余分なスペースを使用しない」と同じですか、それとも使用されたスタックがアルゴリズムのスペースの複雑さでカウントされますか?

2)O(1)スペースの場合:O(1)スペースの意味は何ですか?それは一定のスペースを意味しますか?一定のスペースの場合は、次の場合についてコメントしてください。

a)3番目の変数を使用してバブルソートでスワップしている場合。それは余分なスペースではなく、入力のサイズに依存しないため、一定のスペースにあります。

b)さらに、自然数に適用されるカウントソートを使用している場合、実際には総数に比例するスペースの量を必要としないので、定数スペースO(1)にあると見なしますか?

違いがあれば説明してください。ありがとう

4

3 に答える 3

4

Fortnow&Homer(2003)によると、

計算のスペースの複雑さは、[...]ワークテープで使用されるスペースの量と見なされます。

並べ替えアルゴリズムは、すべての入力を格納するためのスペースを必要とするため、少なくともすべてO(n)スペースです(メモリ上またはディスク上に関係なく)。したがって、バブルソートの場合でも、スペースの複雑さはO(n)のままです。

ただし、全体的なスペースの複雑さ(特に上記の場合)には関心がない場合もありますが、アルゴリズムで使用される追加のスペースを知りたい場合があります。バブルソートの場合、一定量の追加スペースを使用していると言えます。

再帰は、スタックを考慮する必要がある非常に特殊なケースです。再帰するときの状態を格納しており、入力に基づいて再帰関数を何度も呼び出します。再帰レベルの数は入力サイズに依存するため、スペースの複雑さはスタックスペースの使用量を考慮する必要があります。

O(1)空間アルゴリズムが一般的かどうかはわかりませんが、循環検出アルゴリズムはそのような例の1つです。アルゴリズム自体は、正確に2つの「ポインタ」にのみスペースを使用します。サイクルが検出される関数によって使用される余分なスペースは、個別にカウントする必要があります。

ソートをカウントする場合、スペースの複雑さは入力n(カウント)のサイズと最大入力値kに依存します。2つのパラメーターは互いに独立しているため、スペースの複雑さはO(n + k)です。使用される追加のスペースは、O(k)として定義できます。

于 2012-06-01T04:28:13.590 に答える
2

「余分なスペースがない」とは、入力を介してある程度のスペース(通常は正確にn)が利用可能であることを意味し、これ以上使用しないでください。ただし、面接では、候補者がO(1)余分なスペースを使用するかどうかは気にしません。正直なところ、現代語では、実行できるほとんどすべての些細なアクションのためにO(1)の余分なスペースを避けるのは難しいでしょう。

スタックは、アルゴリズムのスペースの複雑さに限界を与えるときにカウントされます。

O(1)は定数を意味します。

ソートのカウントでは、最小のO(k)スペースを使用します。ここで、kは可能な最大のキーの大きさです。したがって、理論的には、固定ビット数の整数について話している場合、それは定数です。基数ソートが線形時間ソートと呼ばれることもあるのもそのためです。

于 2012-06-01T04:10:06.600 に答える
1

O(1):これは、入力が固定定数で囲まれていると定義されます。これは、入力する整数の範囲が-10^5から10^5の場合と比較できます。したがって、breifでは、入力される値にバインドされていることを意味すると言えます。

O(n):入力に条件がない場合は上記とは正反対です。例として、文字列を入力する必要がある場合、入力した文字列の長さには条件がありません。

于 2020-01-13T11:55:50.000 に答える