私は2つの対数空間プログラムとを持っています。
- プログラムは配列入力を取得し、出力配列を作成します。
- プログラムは、によって作成された入力として取得し、そこから出力配列を作成します。
入力配列を取得し、それに対応する配列を作成するログスペースプログラムが存在することの証明を作成する必要があります。しかし、私はそれを書く正しい方法を見つけることができません。これはどのように行われますか?
ログスペースプログラムは、ビットのメモリを使用するプログラムです。守らなければならないいくつかの条件を次に示します。
単純な整数型の変数のみを使用する必要があります(
int
C ++、longint
Pascalなど)。整数の許容範囲が定義されていますが入力のサイズである場合、変数に保存できるのは、基づいてポリモニアルサイズの値のみです。
例えば:私たちは、缶がで値を取る変数持つことができます、またはも値「、しかし、我々はできます値を取る変数があります。他のタイプの変数、および配列と反復子は許可されていません。
ルールに関する例外は入力と出力です。入力は、プログラムが読み取ることができる特殊変数(主に配列)で使用でき、出力は他の特殊変数にのみ書き込むことができます。したがって、出力から読み取ったり、入力変数の値を増やしたりすることはできません。
プログラムは再帰を使用できません。
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
、それらは明らかに値を取ります。したがって、すべての条件が満たされ、実際にはログスペースプログラムです。