ログスペースで2つのログスペースプログラムの連結をシミュレートする


7

私は2つの対数空間プログラムとを持っています。FG

  • プログラムは配列入力を取得し、出力配列を作成します。FA[1..n]B[1..n]
  • プログラムは、によって作成された入力として取得し、そこから出力配列を作成します。GBFC[1..n]

入力配列を取得し、それに対応する配列を作成するログスペースプログラムが存在することの証明を作成する必要があります。しかし、私はそれを書く正しい方法を見つけることができません。これはどのように行われますか?HAC


ログスペースプログラムは、ビットのメモリを使用するプログラムです。守らなければならないいくつかの条件を次に示します。O(logn)

  1. 単純な整数型の変数のみを使用する必要があります(intC ++、longintPascalなど)。

  2. 整数の許容範囲が定義されていますが入力のサイズである場合、変数に保存できるのは、基づいてポリモニアルサイズの値のみです。nn

    例えば:私たちは、缶がで値を取る変数持つことができます、またはも値「、しかし、我々はできます値を取る変数があります。他のタイプの変数、および配列と反復子は許可されていません。[n...n][3n5...3n5][4...7][0...2n]

  3. ルールに関する例外は入力と出力です。入力は、プログラムが読み取ることができる特殊変数(主に配列)で使用でき、出力は他の特殊変数にのみ書き込むことができます。したがって、出力から読み取ったり、入力変数の値を増やしたりすることはできません。

  4. プログラムは再帰を使用できません。

Pascalで書かれた対数空間プログラムの例(誰もが理解できるようにするため)で、整数の配列で最大の数を見つける

    var n: integer;  //input variable the number of elements in A
    A: array [1..n] of integer; //input variable - the array of integers
    m: integer;      // output variable, the position of maximum
    i, j: integer;   //working variables
    begin
      j := 1;
      for i := 2 to n do
        if A[i] > A[j] then j := i;
      m := j;
    end;

ここにあるのは2つの変数だけでjありi、それらは明らかに値を取ります。したがって、すべての条件が満たされ、実際にはログスペースプログラムです。[1...n]


1
これは、計算の複雑さのコースへの学部紹介の標準的な課題です。
Kaveh

1
ヒント:B [i]の計算にはどのくらいのスペースが必要ですか?意のままにBを作成すると、実行にどのように役立ちますか?G
Yuval Filmus

回答:


3

ここでの考え方は、最初のアルゴリズムの出力を完全に計算することはできないということです。これは、対数空間(多項的には大きくなる)を超える可能性があるためです。しかし、私たちがインテリジェントであるかどうかは必要ありません。私たちができることは、2番目のアルゴリズムをシミュレートし、最初のアルゴリズムの出力からオンラインで必要なビットを生成することです。言い換えれば、我々はそれが少しを読みたいときには、第二のマシンをシミュレートします、すなわち、その入力からのビットを最初のマシンの出力から、我々は(第二マシンのシミュレーションを停止最初にシミュレートし、カウントが、保存しない)出力するまで出力するビットiiiこの時点で、最初のマシンのシミュレーションを停止し、2番目のマシンのシミュレーションを続行できます。これで、読み取りたい値の値が得られました。


この議論を指摘してくれてありがとう!たぶん、このシミュレーショントリックに標準的な名前があるかどうか、さらに詳しく説明されている標準的な教科書があるかどうか知っていますか?
a3nm 2017年

1
iircそれはAroraとBarakにあるはずです。証明の複雑さでは、をビットグラフと呼びます。中間結果のオンザフライ/オンデマンド計算と呼ばれることもあると思います。{(x,i,b)(f(x))i=b}f
Kaveh 2017年

1
どうもありがとう!実際、それはAroraとBarakの定義4.16にあり、「暗黙的にログスペース計算可能」と呼ばれています。
a3nm 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.