Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > КАК ПОСЧИТАТЬ ЁМКОСТНУЮ СЛОЖНОСТЬ?


Автор: OOMPH 18.3.2006, 13:39
Подскажите, пожалуйста, что такое емкостная сложность и как её расчитать. Как я понял, это размер памяти, занимаемый программой, но ведь это не просто сумма размеров переменных. smile smile
Спасибо! smile

Если надо, могу программу выложить.

Автор: maxim1000 18.3.2006, 16:16
память можно разделить на три типа:
1. глобальные переменные
2. стек (локальные переменные)
3. куча
например, если считать факториал с помощью рекурсии
int f(int x) {return (x==0)?1:(x*f(x-1));}
то количество используемой памяти будет пропорционально x, т.к. на каждый шаг тратится память (хранение x+адрес возврата)

Автор: OOMPH 18.3.2006, 20:59
Как бы это чуть-чуть поподробнее...
Допустим, есть функция

Код

float func1 (float *dP)
{
float F=0;
for(int n=0;n<16;n++)
F+=dP[n]*dP[n];
f/=16;
return(F);


В этом случае будет выделяться память под переменные F, n и массив dP соответственно 8, 2 и 8 байт. Как это правильно записать?

Автор: En_t_end 19.3.2006, 13:13
OOMPH,
Цитата(OOMPH @ 19.3.2006, 00:59 Найти цитируемый пост)
В этом случае будет выделяться память под переменные F, n и массив dP соответственно 8, 2 и 8 байт. Как это правильно записать?

smile Покажи в своем коде МАССИВ dP smile
Добавлено @ 13:18
OOMPH
Чтобы вообще без проблем всё автоматически подсчитать, перегрузи new, в перегруженном операторе сделай увиличение какого-нибудь статического счетчика и переведи все переменные на динамическую память. Кстати, если мне не изменяет память, то указатели - это теже переменные и под них также выделяется память, что-то около одного байта(для хранения адресса), но для каждого типа указатели разные.
Добавлено @ 13:21
Кстати в приведенном тобой куске помимо синтаксических ошибок, есть и очень противная ошибка переполнения, учти, что положив в переменную типа float произведение двух переменных типа float ты можешь запросто вылезти за границы допустимых значений(в итоге получишь в твоем случае отрицательное значение, ибо у тебя signed float).

Автор: BreakPointMAN 19.3.2006, 13:46
Цитата(En_t_end @ 19.3.2006, 13:13 Найти цитируемый пост)
указатели - это теже переменные и под них также выделяется память, что-то около одного байта(для хранения адресса), но для каждого типа указатели разные.

Ну, конечно, в зависимости от компилятора, ОС и платформы... но 1 - думаю, маловато будет... скорее 2 или 4... smile

Автор: OOMPH 19.3.2006, 18:34
Цитата(En_t_end @ 19.3.2006, 13:13 Найти цитируемый пост)
Покажи в своем коде МАССИВ dP


dP[16] позже в main'e расчитывается.


Цитата(En_t_end @ 19.3.2006, 13:13 Найти цитируемый пост)
Кстати в приведенном тобой куске помимо синтаксических ошибок, есть и очень противная ошибка...


К сожаленью, да (и это только в первой функции smile , а их много ), т.к. писал эту прогу не я (вот по этому и понять ничего не могу smile ); попросили посчитать емкостную сложность вместо курсовика, вот по этому не смог отказаться smile
В нете ничего, кроме определения и нескольких ответов по паскалю не нашел, если б хорошенький примерчик, да на Си, глядишь и всё понял бы smile
Вот поэтому и помощи прошу smile smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)