7.3. Время и память вычисления 209
Такая ситуация, когда время вычисления превосходит память явля-
ется наиболее типичной в программировании.
Заметим, что в данных определениях мы приняли некоторые упро-
щения. Например, мы считаем, что время выполнения любой опера-
ции всегда равно 1, и не зависит от величины операндов, что являет-
ся абстракцией. Можно было бы, например, считать, что время выпол-
нения каждой операции o (x
1
, . . . , x
n
) описывается некоторой функцией
T
o
(
S
(x
1
) , . . . ,
S
(x
n
)).
Существует общая теория, которая изучает различные меры слож-
ности вычислений. Время и память являются, конечно, наиболее полез-
ными из мер сложности, но далеко не единственными. Вообще мера
сложности — это какая-либо частичная функция: Φ : Π, σ 7→ ϕ, кото-
рая удовлетворяет следующим двум условиям:
1. Φ (Π, σ) определена тогда и только тогда, когда Π (σ) определено.
2. Задача определения по заданным Π, σ и ϕ ∈ ω того, что Φ (Π, σ) ≤
ϕ, является алгоритмически разрешимой.
Можно доказать, что определенные нами функции Tm и Sp удовлетво-
ряют этому условию, поэтому являются мерами сложности.
Определение 7.7. (Длина входа) Если σ — начальное состояние,
то
S
(σ) будем называть длиной входных данных.
Обычно время и память вычисления рассматривают не как функции,
зависящие от начального состояния программы, а как функции от дли-
ны входных данных. Однако, тогда возможна вот какая ситуация: могут
существовать два состояния σ и τ такие, что
S
(σ) =
S
(τ), но в то же вре-
мя Tm (Π, σ) 6= Tm (Π, τ) и Sp (Π, σ) 6= Sp (Π, τ). Для примера можно
рассмотреть программу из примера 7.2 на стр. 204 и состояния:
τ = {(x, 200) , (y, 100)};
σ = {(x, 300) , (y, 50)}.
Очевидно, что
S
(σ) = 9 + 6 =
S
(τ) = 8 + 7 = 15.
В то же время
Tm (Π, τ) = 908; Tm (Π, σ) = 8 + 9 · 250 = 2258;