Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3_Вимоги_1 / 09.10.12 / 0_Проблемы БС / ! / Понятие сложности является многоплановым понятием

.doc
Скачиваний:
65
Добавлен:
08.06.2015
Размер:
43.01 Кб
Скачать

Понятие сложности является многоплановым понятием. Оно рассматривалось ранее применительно к оценке сложности алгоритма решения задачи (см. п. 1.2 юниты 1). При анализе программ с целью проверки их работоспособности различают два аспекта их сложности [1]:

 сложность процесса разработки программ;

 сложность самой программы и ее компонент.

Оценку сложности программы можно выполнять с точки зрения сложности процесса разработки программ, тогда под сложностью понимается трудоемкость проектирования программы (первый аспект). Однако чаще для оценки сложности используется второй аспект, который определяет сложность программы через количество вычислительных ресурсов, необходимых для реализации алгоритма решения соответствующей задачи [ 1 ].

Ресурсы, необходимые для реализации программы (например, тактовая частота процессора, размер кэш-памяти 1-го и 2-го уровней, объем оперативной и внешней памяти и т.п.), определяют три типа сложности [ 1 ]:

 временную сложность;

 сложность самой программы;

 информационную сложность.

Временная сложность определяется временем ее реализации на определенном компьютере и зависит от двух основных факторов:

1) вычислительной сложности алгоритма решения задачи (определяется, например, числом шагов алгоритма, необходимых для получения результата);

2) производительности компьютера, который используется для выполнения программы решения задачи (определяется, например, количеством подобного типа задач, решаемых в единицу времени).

Для оценки вычислительной сложности алгоритма используются различные характеристики. Например, для оценки количества шагов реализации алгоритма используется “сигнализирующая времени”, а для оценки числа ячеек памяти, к которым хотя бы раз происходит обращение в процессе реализации алгоритма, используется “сигнализирующая емкости”. Более подробная информация по оценке вычислительной сложности с помощью различных характеристик приведена в п.1.2 юниты 1.

Производительность компьютера в значительной степени влияет на временную сложность программы. Однако это утверждение справедливо только для программ, алгоритмы которых являются легкоразрешимыми, то есть решают любую задачу из этого класса за число шагов, не превышающее некоторый полином от размерности задачи. Несмотря на высокую производительность современных ЭВМ, для ряда задач, алгоритмы которых не являются легкоразрешимыми, нельзя получить точное решение в приемлемые сроки [1]. Более подробно вопросы оценки вычислительной сложности, а также особенности машинной реализации легкоразрешимых и трудноразрешимых алгоритмов приведены в п.1.2 юниты 1.

Программная сложность определяется через характеристики самой программы. В простейшем варианте оценить программную сложность можно по [ 1 ]:

 числу символов в тексте исходного модуля программы;

 числу операторов, необходимых для полного описания програм­мы на выбранном языке программирования;

 числу машинных команд, необходимых для реализации програм­мы на выбранной архитектуре ЭВМ и т.п.

Оценка собственно программной сложности и сравнительный анализ программной сложности различных программных средств вызывает определенные трудности. Обусловлены эти трудности не только разнообразием языков программирования, но и различием машинных архитектур (для различных типов процессоров используется разная система команд).

Например, в процессорах фирмы Intel, начиная с Intel Pentium MMX (1997 г.), используется “мультимедийный” набор команд MMX (57 машинных команд для обработки целочисленных данных в графических приложениях). В то же время, в процессорах фирмы AMD, начиная с AMD K6-2 MMX (1998 г.), используется другой “мультимедийный” набор команд 3DNow (24 машинные команды для обработки вещественных данных в графических приложениях). Для приближенной оценки программной сложности в инженерной практике достаточно часто используется такая характеристика, как число машинных команд в программе [ 1 ].

Информационная сложность зависит от количества данных, используемых программой, и “разнообразия” их типов [ 1 ]. Чем больше исходных, промежуточных и итоговых данных использует программа, тем больший объем информации обрабатывается в программе и тем выше информационная сложность программы. Кроме того, информационная сложность непосредственно связана с типами используемых данных. Данные могут быть как простых типов (целые, вещественные, символьные и т.п.), так и сложных структурированных типов (массивы, множества, записи, файлы т.п.). Очевидно, что информационная сложность структурированных типов данных выше, чем данных простых типов. Но для любых типов данных оценка информационной сложности в конечном итоге сводится к количеству байт памяти, занимаемых данными программы. Поэтому в качестве меры информационной сложности при приближенных оценках достаточно часто используется емкость памяти, необходимая для оперативного хранения сегмента данных программы [ 1 ].

В качестве примера программы, сложность которой предлагается оценить, используется программа PRV “перевода” значения угла из градусов в радианы и наоборот.

PROGRAM PRV;

VAR

GR, N : INTEGER;

RD : REAL;

BEGIN

WRITELN(‘Введите направление перевода’);

WRITELN(‘0 – из градусов в радианы; 1 – из радиан в градусы ‘);

READLN(N);

CASE N OF

0:

begin

WRITE(‘Значение угла в градусах GR= ‘);

READLN(GR);

RD:=PI*GR/180;

WRITELN(‘Значение угла в радианах RD= ‘,RD:7:3);

end;

1:

begin

WRITE(‘ Значение угла в радианах RD= ‘);

READLN(RD);

GR:=trunc(RD*180/PI)+1;

WRITELN(‘Значение угла в градусах GR= ‘,GR:3);

end

ELSE

WRITELN(‘Ошибка в задании направления перевода ‘);

END;

READLN;

END.

Временная сложность программы PRV определяется максимальным количеством шагов реализации алгоритма с учетом определенных значений исходных данных. Алгоритм, реализуемый при правильном задании исходных данных, состоит из следующих пяти шагов:

1. Ввод “направления” N перевода величины угла.

2. Выбор варианта значения N.

3. Ввод значения угла.

4. Перевод в выбранном “направлении” по формуле.

5. Вывод результата перевода и его задержка на экране.

Программную сложность можно определить двумя характеристиками – количеством строк программы (29 строк) и объемом исходного модуля программы (650 байт).

Информационную сложность можно определить количеством байт, занимаемых переменными, описанными в разделе VAR. Как известно из юниты 2, данным типа INTEGER в памяти выделяется два байта, а данным типа REAL – шесть байт. Таким образом, для размещения всех трех переменных потребуется десять (2+2+6=10) байт. Сегмент данных (date size) программы с учетом размещения указанных переменных и служебной информации занимает 678 байт.

Примечание. Оценку сложности ПС можно проводить с учетом анализа структурной сложности программы, которая определяется числом взаимосвязанных компонент программы, количеством их связей и сложностью взаимодействия [ 1 ]. Методики оценки структурной сложности программы и примеры их использования достаточно подробно рассматриваются в [ 1, 2 ].