Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_2-Analiz.doc
Скачиваний:
15
Добавлен:
28.08.2019
Размер:
389.63 Кб
Скачать

2.5. Інша класифікація алгоритмів

Інша, не залежна від попередньої, класифікація алгоритмів у класі NPR передбачає виділення в функції gp(D) адитивних компонент в множини D, пов'язаних зі значеннями елементів - gv(D), та їх порядком - gs(D). Будемо припускати, що функція gp(D) представлена у вигляді:

gp(D) = gv(D) + gs(D).

Виділимо в множини підмножину однорідних по суті задачі елементів — Dе , що складається з елементів

Визначимо Dp як множину всіх впорядкованих послідовностей з елементів di. Зауважимо, що в загальному випадку

Якщо і відповідні їм множини , тоді порядкова залежність gs(D) для функції трудомісткості має місце, якщо fА(D1) ≠ fА(D2) хоча б для однієї пари .

Залежність від значень gv(D) припускає, що

В залежності від ступіня впливу gv(D) та gs(D) на gp(D) визначають наступні підкласи в класі NPR:

3.а. Підклас NPRS (Sequence) – підклас алгоритмів з кількісною та порядково-залежною функцією трудомісткості:

gs(D)=Ω(gv(D))

У цьому випадку трудомісткість залежить від розмірності входу і від порядку розташування однорідних елементів; залежність від значень не може бути повністю виключена, але вона не є суттєвою. У цьому випадку можна говорити про кількісно-порядковий характер функції трудомісткості.

Прикладами можуть служити більшість алгоритмів сортування порівняннями, алгоритми пошуку мінімуму та максимуму в масиві.

3.b. Підклас NPRV (Value) –підклас алгоритмів з функцією трудомісткості, що залежить від довжини входу і значень елементів в D; залежність від порядку не є визначальною:

gv(D)=Ω(gs(D))

Прикладом може слугувати алгоритм сортування методом індексів, трудомісткість якого визначається кількістю вхідних чисел і значенням максимального з них. При цьому порядок чисел у масиві взагалі не має впливу на трудомісткість, за винятком фрагмента пошуку максимального елемента, що відноситься до класу NPRS.

Відзначимо, що об'єднання цих підкласів не утворює клас NPR:

NPR \ (NPRS U NPRV) ≠ 0.

Існують алгоритми, в яких і значення, і порядок розташування однорідних елементів мають реальний і істотний вплив на функцію трудомісткості. Наприклад, такими є ітераційні алгоритми розв'язання систем лінійних рівнянь. Очевидно, що як перестановка значень у вхідній матриці, так і зміна самих значень істотно міняють власні числа матриці, які визначають збіжність ітераційного процесу одержання рішення.

2.6. Елементарні операції в процедурній мові високого рівня

Для того, щоб одержати значення функції трудомісткості, необхідно визначити які є операції в моделі обчислень.

Практичні реалізації обчилювальних алгоритмів на мові програмування високого рівня зазвичай містять у собі такі програмні фрагменти:

- діалогове або файлове введення вхідних даних;

  • перевірка вхідних даних на допустимість;

  • власне розв'язання поставленого завдання;

  • представлення (вивід) отриманих результатів.

При аналізу алгоритмів по трудомісткості можна вважати, що обслуговуючі фрагменти програмної реалізації, такі як введення, перевірка та вивід, є загальними або еквівалентними для різних алгоритмів розв'язання даної задачі. Такий підхід приводить до необхідності аналізу тільки безпосереднього розв'язання поставленого завдання. При цьому припускається, що вхідні дані і отримані результати будуть розміщені в «оперативній» пам'яті, включаючи в це поняття як власне оперативну пам'ять, так і кэш пам'ять, регістри і буфери реального процесора. Таким чином, множина "елементарних" операцій, що враховуються в функції трудомісткості, не включає операції введення/виведення даних на зовнішні носії.

Для мови програмування С++ такими "елементарними" операціями будемо вважати наступні:

  1. просте присвоювання: = ;

  2. одновимірна індексація: a[i] (адреса початку масиву + і * довжину елемента);

  3. арифметичні операції: { * , / , - , + };

  4. операції порівняння: < , <= , > , >= , = = , != ;

  5. логічні операції: && (логічне AND), | | (логічне OR), & (порозрядне AND), | (порозрядне OR),

^ (порозрядне XOR) ;

  1. операції адресації в складних типах даних: -> (посилання на член структури за допомогою

вказівника), . (посилання на член структури)

Кілька зауважень стосовно введеного набору "елементарних" операцій:

  • з набору елементарних операцій виключається команда переходу, оскільки її можна вважати пов'язаної з операцією порівняння в конструкції розгалуження або циклу за умовою. Таке виключення виправдане забороною використання оператора переходу на мітку в ідеології структурного програмування;

  • операції доступу до простих іменованих комірок пам'яті вважаються пов'язаними з операціями, операнди яких вони зберігають.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]