Если алгоритм:
а) рекурсивен несколько уровней глубокого который зависит от N, или
б) распределяет объем памяти, которая зависит от N
то это не является постоянным Память. В противном случае, вероятно, это: формально это постоянная память, если существует постоянная верхняя граница объема памяти, которую использует алгоритм, независимо от того, какой размер/значение вводится. Память, занятая входом, не включается, поэтому иногда для того, чтобы быть понятным, вы говорите о постоянной «дополнительной» памяти.
Итак, вот алгоритм постоянной памяти, чтобы найти максимум массива целых чисел в C:
int max(int *start, int *end) {
int result = INT_MIN;
while (start != end) {
if (*start > result) result = *start;
++start;
}
return result;
}
Вот непостоянная алгоритм памяти, поскольку он использует пространство стека, пропорциональное числу элементов во входном массиве. Тем не менее, он может стать постоянной памятью, если компилятор каким-то образом способен оптимизировать его к нерекурсивному эквиваленту (которые компиляторы C обычно не беспокоят, за исключением иногда с оптимизацией хвостового вызова, которая не будет выполнять эту работу здесь):
int max(int *start, int *end) {
if (start == end) return INT_MIN;
int tail = max(start+1, end);
return (*start > tail) ? *start : tail;
}
Вот алгоритм постоянного пространства сортировки (в C++ это время), который является O (N) времени или около этого (может быть O (N * N!)):
void sort(int *start, int *end) {
while (std::next_permutation(start,end));
}
Ниже приведен алгоритм сортировки пространства O (N), который является O (N^2):
void sort(int *start, int *end) {
std::vector<int> work;
for (int *current = start; current != end; ++current) {
work.insert(
std::upper_bound(work.begin(), work.end(), *current),
*current
);
}
std::copy(work.begin(), work.end(), start);
}
На самом деле использование памяти является важным фактором при разработке алгоритмов. Это одно из важных различий между mergesort и quicksort. Получите лучший учебник. – Artelius
Чтобы быть справедливым, я не думаю, что учебники действительно упоминают об этом «столько же». Возможно, потому что это обычно более очевидно, особенно если вы предпочитаете итеративные рекурсивные решения. Даже довольно славный учебник по алгоритму упоминает его достаточно, чтобы определить, что это значит и почему это важно. –