Tôi đã có hai chương trình log-không gian và .
- Chương trình sẽ nhận đầu vào trong mảng và sẽ tạo mảng đầu ra .
- Chương trình sẽ nhận đầu vào như được tạo bởi và tạo từ đó mảng đầu ra .
Tôi phải viết một bằng chứng rằng có tồn tại chương trình không gian log , sẽ nhận được mảng đầu vào và tạo từ mảng tương ứng . Nhưng tôi không thể tìm ra cách viết chính xác. Làm thế nào được thực hiện?
Chương trình không gian nhật ký là chương trình sử dụng các bit bộ nhớ . Dưới đây là một số điều kiện bạn phải giữ:
Bạn chỉ phải sử dụng các biến có kiểu số nguyên đơn giản (ví dụ
int
trong C ++,longint
trong Pascal).Phạm vi số nguyên được phép được xác định: nếu là kích thước của đầu vào, chúng ta có thể lưu vào các biến chỉ các giá trị có kích thước đa hình dựa trên .
Ví dụ: chúng ta có thể có các biến có thể nhận các giá trị trong , hoặc cả các giá trị , nhưng chúng ta có thể ' t có các biến sẽ đảm nhận các giá trị trong . Không có loại biến nào khác được cho phép, cũng không phải là mảng và vòng lặp.
Ngoại lệ từ các quy tắc về là đầu vào và đầu ra. Đầu vào sẽ có sẵn trong các biến đặc biệt (chủ yếu là mảng) mà chương trình của bạn chỉ có thể đọc được và đầu ra chỉ có thể được ghi vào các biến đặc biệt khác. Vì vậy, bạn không thể đọc từ đầu ra và bạn không thể tăng giá trị của các biến đầu vào, v.v.
Chương trình của bạn không thể sử dụng đệ quy.
Ví dụ về chương trình không gian log được viết bằng Pascal (để mọi người có thể hiểu nó) sẽ tìm thấy số lớn nhất trong mảng số nguyên
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;
Hai biến duy nhất ở đây là j
và i
rõ ràng chúng lấy các giá trị trong . Do đó, tất cả các điều kiện được đáp ứng và nó thực sự là một chương trình không gian log.