1
ログスペースで2つのログスペースプログラムの連結をシミュレートする
私は2つの対数空間プログラムとを持っています。FFFGGG プログラムは配列入力を取得し、出力配列を作成します。FFFA[1..n]A[1..n]A[1..n]B[1..n]B[1..n]B[1..n] プログラムは、によって作成された入力として取得し、そこから出力配列を作成します。GGGBBBFFFC[1..n]C[1..n]C[1..n] 入力配列を取得し、それに対応する配列を作成するログスペースプログラムが存在することの証明を作成する必要があります。しかし、私はそれを書く正しい方法を見つけることができません。これはどのように行われますか?HHHAAACCC ログスペースプログラムは、ビットのメモリを使用するプログラムです。守らなければならないいくつかの条件を次に示します。O(logn)O(logn)O(\log n) 単純な整数型の変数のみを使用する必要があります(intC ++、longintPascalなど)。 整数の許容範囲が定義されていますが入力のサイズである場合、変数に保存できるのは、基づいてポリモニアルサイズの値のみです。nnnnnn 例えば:私たちは、缶がで値を取る変数持つことができます、またはも値「、しかし、我々はできます値を取る変数があります。他のタイプの変数、および配列と反復子は許可されていません。[−n...n][−n...n][-n...n][−3n5...3n5][−3n5...3n5][-3n^5...3n^5][−4...7][−4...7][-4...7][0...2n][0...2n][ 0...2^n] ルールに関する例外は入力と出力です。入力は、プログラムが読み取ることができる特殊変数(主に配列)で使用でき、出力は他の特殊変数にのみ書き込むことができます。したがって、出力から読み取ったり、入力変数の値を増やしたりすることはできません。 プログラムは再帰を使用できません。 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 …