logo

Алгоритм мовою Сі

Алгоритм — це послідовність інструкцій, які виконуються в заздалегідь визначеній послідовності з метою вирішення проблеми або завершення роботи. Функція — це блок коду, який можна викликати та виконувати з інших частин програми.

Набір інструкцій для вирішення питання або здійснення певної діяльності. В інформатиці алгоритми використовуються для широкого діапазону операцій, від фундаментальної математики до складної обробки даних.

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

Існує багато алгоритмів сортування, кожен з яких має переваги та недоліки. Найпоширенішими алгоритмами сортування в C є швидке сортування, злиття та сортування.

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

Одним із відомих прикладів програмної бібліотеки, реалізованої на C, є стандартна бібліотека шаблонів (STL). Ця бібліотека надає широкий спектр алгоритмів для таких завдань, як сортування, пошук і маніпулювання структурами даних.

Особливості алгоритму

Він визначає кілька важливих особливостей алгоритму, зокрема:

    Вхідні дані: Алгоритми повинні отримувати вхідні дані, які можуть бути представлені у вигляді значень або даних.Вихід: Алгоритм повинен давати певні результати. Це може бути наслідком проблеми або рішенням, спрямованим на її вирішення.Ясність: Алгоритми мають бути точно визначені з використанням однозначних інструкцій, яким комп’ютер або інша система може однозначно слідувати.Скінченність: Алгоритм вимагає обмежених кроків. Це означає, що з нього потрібно вийти після виконання певної кількості команд.Термін дії: Алгоритм має бути дійсним. Іншими словами, він повинен бути в змозі створити рішення проблеми, яку розроблено алгоритмом, за розумний проміжок часу.Ефективність:Алгоритм має бути ефективним, а це означає, що він має бути здатний виробляти рішення проблеми, яку він розв’язує, за розумний проміжок часу.загальність:Алгоритм має бути загальним, що означає, що його можна застосовувати до широкого кола проблем, а не бути специфічним для однієї проблеми.

Аналіз алгоритму

Алгоритмічний аналіз – це процес оцінки продуктивності алгоритму з точки зору ефективності, складності та інших критеріїв. Як правило, це робиться для оцінки багатьох алгоритмів і вибору оптимального рішення для певної проблеми чи програмного забезпечення.

Аналіз алгоритмів зазвичай передбачає вимірювання їх часової та просторової складності.

Подібно до просторової складності, яка описує необхідний обсяг пам’яті або дискового простору, часова складність описує, скільки часу алгоритм визначає для виконання завдання.

Існують різні способи аналізу складності алгоритмів у часі, наприклад нотація Big O та Omega. Символ Омега визначає верхню межу складності алгоритму в часі, а символ Омега — нижню межу.

На додаток до вимірювання часової та просторової складності, аналіз алгоритму також включає інші критерії, такі як стабільність, паралелізм і масштабованість.

    Стабільність:- Це стосується здатності алгоритму підтримувати відносний порядок елементів у наборі даних.Розпаралелювання:- Це стосується здатності виконувати операції паралельно на кількох процесорах.Масштабованість:- З іншого боку, це стосується здатності алгоритму обробляти великі обсяги даних та інші вхідні дані.

Вони включають два види аналізу.

вони є:-

  1. Попередній аналіз.
  2. Задній аналіз.

Попередній аналіз

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

Цей підхід дозволяє аналізувати часову та просторову складність алгоритмів та інших показників без необхідності впровадження та запуску алгоритмів.

Задній аналіз

Апостеріорний аналіз, з іншого боку, — це метод аналізу алгоритму, який фактично виконує алгоритм і вимірює його продуктивність.

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

Складність алгоритму

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

У складності алгоритму використовуються два фактори.

вони є:-

  1. Фактор часу.
  2. Фактор простору.

Фактор часу

  • Час, необхідний алгоритму для виконання завдання, називається часовою складністю. Зазвичай вона вимірюється кількістю операцій або кроків, які алгоритм повинен виконати, щоб вирішити проблему.
  • Часова складність алгоритму важлива, оскільки вона визначає, скільки часу потрібно для виконання, і може мати значний вплив на продуктивність програми та системи.
  • Часову складність алгоритму можна виразити за допомогою нотації Big O, способу вираження верхньої межі часової складності алгоритму.
  • Алгоритм із часовою складністю O(n) означає, що час, необхідний для виконання алгоритму, прямо пропорційний розміру вхідних даних (n).
  • Іншими поширеними часовими складностями є O(n^2) квадратична складність і O(log n) логарифмічна складність.

Аналіз простору

  • З іншого боку, складність простору стосується обсягу пам’яті або місця для зберігання, необхідного для виконання алгоритму.
  • Це важливо, оскільки визначає кількість ресурсів, необхідних для запуску алгоритмів, які можуть вплинути на загальну продуктивність вашої програми чи системи.
  • Якщо просторова складність алгоритму дорівнює O(n), він використовує обсяг пам’яті, який лінійно зростає з розміром вхідних даних.
  • Якщо алгоритм має просторову складність O(1), він використовує фіксований обсяг пам’яті незалежно від розміру вхідних даних.

Як написати алгоритм

1. Спочатку визначте проблему, яку потрібно вирішити за допомогою алгоритму.

Наприклад, припустімо, що ми хочемо написати алгоритм для знаходження максимального значення зі списку чисел.

2. Розбийте проблему на більш дрібні, керовані кроки.

  • Ініціалізуйте змінну 'max' першим значенням у списку.
  • Для кожного наступного значення в списку порівняйте з «max».
  • Якщо значення більше за 'max', установіть це значення для 'max'.
  • Продовжуйте робити це, доки не буде порівняно кожне значення в списку.
  • Повертає кінцеве максимальне значення.

3. Напишіть свій алгоритм псевдокодом або мовою програмування.

переключити java

Алгоритм, написаний у псевдокоді:

 MAX (list) max = list[0] For i = 1 the length of the list list IF[i] > max max = list[i] End for Maximum return Maximum end 

4. Перевірте свій алгоритм, щоб переконатися, що він правильний і ефективний.

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

Приклад:-

Вхідні дані: [1, 5, 2, 7, 3]

Вихід: 7.

Пояснення: 7 — це максимальне значення в списку.

5. Оптимізувати алгоритм.

Шукайте способи оптимізації алгоритмів, щоб зробити їх швидшими та ефективнішими. Це може включати модифікацію псевдокоду або реалізацію більш ефективних структур даних або алгоритмів.

Основи написання алгоритмів

Приклад: - Сума двох цілих чисел.

Крок 1 - Почати

Крок 2 - Оголосити три цілі числа a, b, c

Крок 3 — Визначте значення a і b

Крок 4 - Складіть значення a і b

Крок 5 - Збережіть результат кроку 4 у c

Крок 6 - Друк c

Крок 7 - СТІЙ

Тип алгоритмів, які використовуються в мові Сі.

1. Алгоритми сортування

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

Ці алгоритми корисні в багатьох програмах, оскільки їх можна використовувати для сортування даних різних розмірів і типів.

Існують різні алгоритми сортування.

вони є:-

(i) Бульбашкове сортування: Нескладний алгоритм сортування, який багаторазово порівнює сусідні компоненти та вимикає їх, якщо вони не в порядку.

алгоритм швидкого сортування

Алгоритм бульбашкового сортування:

  1. Почніть із несортованого списку елементів.
  2. Порівняйте перші два елементи в списку. Якщо перший елемент більший за другий, поміняйте їх місцями.
  3. Перейдіть до наступної пари елементів і повторіть крок 2, доки не буде досягнуто кінець списку.
  4. Для кожного елемента списку повторіть кроки 2 і 3 ще раз. які називають пропусками.
  5. Повторіть кроки 2-4 для всього списку. У міру того, як ви повторюєте проходи, елементи будуть «згортатися» на правильну позицію в сортованому списку.
  6. Після завершення проходження і жодних замін не зроблено, список сортується, і алгоритм може зупинитися.
  7. Повертається остаточний відсортований список.

(ii) Сортування вставкою : метод сортування, який створює відсортований список по одному окремому елементу, розміщуючи кожен у відповідному місці.

Алгоритм сортування вставки такий:

  1. Ініціалізуйте порожній відсортований список і невідсортований список елементів, які потрібно відсортувати.
  2. Перший член із невідсортованого списку слід взяти та розмістити у відповідній позиції у відсортованому списку.
  3. Повторіть крок 2 для кожного наступного елемента в несортованому списку.
  4. Порівняйте поточний елемент з елементами у відсортованому списку, починаючи з елемента безпосередньо ліворуч.
  5. Поміняйте місцями два елементи, якщо поточний елемент менший за елемент ліворуч від нього.
  6. Якщо поточний елемент більший за елемент ліворуч від нього, вставте його у правильне місце у відсортованому списку.
  7. Повторіть кроки 4-6 для кожного наступного елемента в несортованому списку.
  8. Після обробки всіх елементів відсортований список міститиме всі елементи в правильному порядку.
  9. Процес сортування завершено.

(iii) Сортування вибору : метод сортування, який постійно починає відсортований список із найменших деталей із невпорядкованого списку.

Алгоритм сортування вибору такий:

  1. Почніть із встановлення основного елемента списку як елемента min.
  2. Повторіть решту пунктів у списку, порівнюючи кожен із поточним мінімумом.
  3. Встановіть новий мінімум, якщо елемент виявиться меншим за існуючий.
  4. Змінюйте поточний мінімум на перший елемент списку кожного разу, коли він досягає свого завершення.
  5. Для решти невідсортованої частини списку повторіть кроки 2-4, але починайте з другого елемента списку (оскільки перший елемент уже відсортовано).
  6. Продовжуйте сортувати список таким чином, доки він не буде відсортований.

(iv) Швидке сортування : Алгоритм сортування за принципом «розділяй і володарюй», який вибирає опорний елемент і розбиває список на підсписки залежно від того, менше чи більше елементів, ніж опорний. Після цього підсписки сортуються неодноразово, доки не буде відсортовано повний список.

Алгоритм швидкого сортування:

  1. Виберіть опорний елемент зі списку. Зазвичай це перший елемент, але він також може бути випадковим елементом або медіаною списку.
  2. Розділіть список на два підсписки: один містить елементи, менші за опорну, а інший містить елементи, більші за опорну.
  3. Рекурсивно відсортуйте підсписок, що містить менше елементів, ніж зведений, використовуючи той самий процес.
  4. Використовуйте ту саму процедуру, щоб рекурсивно відсортувати підсписок записів, розмір яких перевищує зведену.
  5. Об’єднайте відсортовані підсписки зі зведеним елементом між ними, щоб сформувати повністю відсортований список.
  6. Повернути повністю відсортований список.

(v) Жереб йде : Алгоритм сортування «розділяй і володарюй» ділить список на дві половини, сортує кожну половину, а потім об’єднує дві половини в порядку сортування.

Алгоритм сортування злиттям:

  1. Створіть два підсписки зі списку: один з елементами під опорою, а другий – над опорою.
  2. Створює новий відсортований підсписок шляхом ітеративного об’єднання підсписків, доки не залишиться лише один підсписок. Це буде ваш відсортований список.
  3. Кроки для об’єднання двох підкаталогів:-
  4. Створіть порожній список для зберігання відсортованих елементів.
  5. Порівнює перший елемент кожного підсписку.
  6. Додає менший елемент до нового списку та видаляє його з батьківського підсписку.
  7. Повторюйте кроки 2 і 3, доки список не стане повністю порожнім.
  8. Додає решту елементів з інших підсписків до нового списку.
  9. Замінює об’єднаний підсписок новим відсортованим списком.
  10. Повторюйте цей процес, доки всі підсписки не буде об’єднано в один відсортований список.

(vi) Сортування купи : Алгоритм сортування, який сортує елементи за допомогою структури даних, яка називається купою.

Ось алгоритм класифікації:

    Створіть максимальну купу: Починаючи з першого нелистового вузла, порівняйте кожен вузол з його дочірніми вузлами та замініть вузли найбільшими з дочірніх вузлів, щоб задовольнити властивість максимальної купи.Поміняти місцями корінь з останнім елементом: замінити корінь (найбільший елемент) на останній елемент у стеку.
  1. Укладіть решту елементів. Починаючи з кореня, кожен вузол порівнюється зі своїми дочірніми вузлами, міняючи місцями вузли з їхніми старшими дочірніми вузлами, поки не буде задоволено властивість максимальної купи.
  2. Повторіть кроки 2 і 3 з щойно складеними елементами, за винятком останнього елемента в правильному положенні.
  3. Повторюйте цей процес, доки в стеку не залишиться лише один елемент. Тепер це впорядковано.
  4. Heapify Down: Починаючи з кореневого вузла, він порівнює елементи з дочірніми елементами та міняється місцями з більшим із двох, доки не буде задоволено властивість максимальної купи.Heapify Up: Почніть з останнього елемента в купі, порівняйте його з батьківським і поміняйте його з батьківським, щоб задовольнити властивість максимальної купи.

(vii) Сортування за коренем : Алгоритм сортування, який сортує елементи на основі цифр або цифр їхнього двійкового представлення.

Алгоритм сортування Radix такий:-

  1. визначити, скільки цифр міститься в найбільшому елементі списку вхідних даних.
  2. Ініціалізуйте змінну, скажімо, розряд цифри, рівним 1, що представляє поточну розряду цифри.
  3. Створіть порожній список для кожного можливого значення цифри від 0 до 9.
  4. Переглядайте вхідний список і додавайте кожен елемент до відповідного списку на основі значення поточного розряду цифри.
  5. Об’єднайте всі списки, щоб сформувати новий список у порядку списків цифр.
  6. Помножте digitPlace на 10, щоб перейти до наступного розряду.
  7. Повторюйте кроки 4-6 для кожного розряду цифр, доки не будуть враховані всі цифри в найбільшому елементі.
  8. Остаточний список буде відсортований у порядку зростання за цифрами елементів.
  9. Повернути остаточний відсортований список.

2. Алгоритми пошуку

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

Існує багато типів пошукових алгоритмів.

Вони є:-

(i) Лінійний пошук : базовий алгоритм пошуку, який перевіряє кожен елемент у списку один за одним, доки не знайде потрібний елемент.

Алгоритм лінійного пошуку: -

  1. Визначте вхідні дані для алгоритму: вхідними даними для алгоритму лінійного пошуку є список елементів (або масив) і цільовий елемент, який ми шукаємо.
  2. Ініціалізуйте змінну під назвою «індекс» на -1: ця змінна використовуватиметься для зберігання індексу цільового елемента, якщо його буде знайдено.
  3. Перегляньте список елементів: починаючи з першого елемента, перевірте кожен елемент у списку один за іншим.
  4. Порівняйте поточний елемент із потрібним для оцінки: збережіть індекс поточного елемента в змінній index і вийдіть із циклу, якщо сучасний елемент і цільовий елемент ідентичні.
  5. Повернути індекс цільового елемента: після завершення циклу поверніть значення, збережене в змінній індексу. Якщо цільовий елемент не знайдено, значення індексу буде -1.

(ii) Двійковий пошук : Алгоритм пошуку, який працює шляхом поділу списку на половини та пошуку в межах цих половин, швидше за все, включить елемент.

Алгоритм бінарного пошуку: -

  1. Вхід: відсортований список із n елементів і цільового елемента x.
  2. Ініціалізація змінних: встановіть низький індекс на 0, високий індекс на n-1 і середній на (низький+високий)/2.
  3. Почніть цикл: поки низький індекс менший або дорівнює високому індексу, повторіть наступні кроки.
  4. Порівняйте середній елемент із x: якщо середній елемент дорівнює x, поверніть середній індекс.
  5. Оновіть низький або високий індекс: якщо x більше середнього елемента, встановіть низький індекс на mid + 1. Інакше встановіть високий індекс на mid - 1.
  6. Оновіть середній індекс: Середній = (низький+високий)/2.
  7. Кінець циклу: якщо низький індекс більший за високий, то x немає в списку, і алгоритм повертає помилку.
  8. Вихід: індекс x у списку або повідомлення про помилку.

(iii) Пошук в глибину : Алгоритм пошуку, який перевіряє кожну гілку, наскільки це можливо, перш ніж повернутися.

Наступні вказівки застосовуються до пошуку в глибину:

  1. виберіть початкову вершину або вузол графа для початку.
  2. Додайте позначку відвідування до першої вершини.
  3. Безпосередньо помістіть початкову вершину в стек.
  4. Поки стек не буде порожнім, повторюйте наступні дії: -
    • Видаліть верхню вершину стека.
    • Позначте як відвідані та вставте в стек кожного невідвіданого сусіда висунутої вершини.
  5. Продовжуйте цей процес, доки не відвідаєте всі вершини графа.
  6. Коли всі вершини відвідано, алгоритм завершено, і на графі виконується пошук у глибину.

(iv) Пошук вшир : Алгоритм пошуку, який досліджує всіх сусідів вузла перед переходом на наступний рівень.

Алгоритм пошуку вшир:

  1. Почніть з кореневого вузла або початкового стану.
  2. Додайте кореневий вузол до черги.
  3. Перевірте, чи черга порожня; якщо так, то завершіть роботу алгоритму.
  4. Візьміть перший елемент із черги та позначте його як відвіданий.
  5. Розширте сучасний вузол, додавши до черги всіх його невідвіданих сусідів.
  6. Повторюйте кроки 3–5, доки не буде знайдено потрібний вузол або поки черга не буде порожньою.
  7. Повертає шлях із попереднього стану до цільового, якщо цільовий вузол знайдено.
  8. Припиніть набір правил і повідомте, що цільовий стан не визначено, якщо черга порожня.

(v) Інтерполяційний пошук : Алгоритм пошуку, який використовує значення шуканих елементів для оцінки позиції в індексі.

Важливо, щоб масив був рівномірно розподілений. В іншому випадку це алгоритм.

Він працює, як очікувалося.

Алгоритм можна підсумувати таким чином.

  1. Отримайте список вхідних даних і значення ключа для пошуку.
  2. Ініціалізуйте нижню та верхню змінні за першим та останнім індексами списку.
  3. Якщо нижче значення менше або дорівнює більшому значенню, тоді:-
    1. Розрахуйте приблизне розташування за такою формулою:
      pos = low + ((high - low) / (arr[high] - arr[low])) * (x - arr[low]).
    2. Повертає позицію, якщо оцінене значення позиції є ключовим значенням.
    3. c) Якщо оцінене значення позиції менше ключового значення, установіть його нижче.
      Позиція +1.
    4. г) Якщо значення розрахункової позиції більше значення ключа Set, позиція - на 1 вгору.
  4. Якщо значення ключа не знайдено, поверніть -1, щоб вказати, що значення немає в списку.

(vi) Перехідний пошук : метод пошуку, який повторює список кроками постійної довжини, поки не знайде відповідний елемент або не визначить, що його більше немає.

Алгоритм пошуку стрибка такий:

  1. Спочатку встановіть розмір переходу на квадратний корінь із кількості елементів масиву.
  2. Встановлює змінну з назвою «current» на перший елемент масиву.
  3. Виконує ітерацію по масиву, стрибаючи на розмір переходу, одночасно збільшуючи змінну під назвою «стрибок».
  4. Перейдіть до наступного стрибка, якщо наявний елемент менший за потрібний.
  5. Якщо поточний елемент більший за цільовий елемент, виконайте лінійний пошук між поточним елементом і попереднім елементом переходу, щоб знайти цільовий елемент.
  6. Якщо цільовий елемент не знайдено в масиві, він повертає -1, щоб вказати, що його немає в масиві.
  7. Якщо елемент знайдено, він повертає індекс елемента в масиві.

3. Графові алгоритми

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

Існують різні типи графових алгоритмів.

вони є:-

    Алгоритм Дейкстри: Алгоритм, який знаходить найкоротший шлях між двома вузлами на графіку шляхом постійного оновлення найкоротшої відстані від кожного вузла.Алгоритм A*: метод, який постійно оновлює найкоротший шлях до кожного вузла на графіку, щоб визначити найкоротший маршрут між ними.Алгоритм Прима: підхід до визначення найменшого остовного дерева зваженого зв’язного графа.Алгоритм Крускала: підхід до ідентифікації найнижчого остовного дерева пов’язаного зваженого графа.Алгоритм Беллмана-Форда: Алгоритм, який, навіть коли граф має від’ємні ваги ребер, відображає найкоротший шлях між певним вузлом постачання та будь-яким іншим вузлом у мережі.

4. Криптографічні алгоритми

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

Існують різні типи алгоритмів шифрування.

Мадхурі сказав

Вони є:-

    Хеш-алгоритми: ці алгоритми створюють вихідні дані фіксованого розміру (хеш) із вхідних даних довільного розміру. Приклади включають MD5, SHA-1 і SHA-2.Симетричні ключові алгоритми: Етапи шифрування та дешифрування в таких алгоритмах використовують той самий закритий ключ. AES, DES і Blowfish є кількома прикладами.Асиметричні ключові алгоритми: Відкритий і невідкритий ключі використовуються цими методами як окремі ключі для шифрування та дешифрування. Деякі приклади включають RSA, ECC і DSA.Алгоритми обміну ключами: ці алгоритми дозволяють двом сторонам безпечно обмінюватися ключами через незахищений канал. Наприклад, можна згадати Діффі-Хеллмана та еліптичну криву Діффі-Хеллмана.

Переваги алгоритму

Алгоритми мають багато переваг.

вони є:-

    Швидкість і ефективність: Алгоритми можуть швидко й точно обробляти великі обсяги даних, що робить їх корисними для завдань, які потребують багато часу або надто схильні до помилок.Послідовність: Алгоритми дотримуються набору заздалегідь визначених вказівок. Він може давати стійкі результати без впливу особистих упереджень і емоцій.автоматизація: Алгоритми можуть виконувати завдання автоматично, дозволяючи людям зосередитися на більш складних або творчих завданнях.Підвищена точність: Алгоритми часто можуть досягти вищого рівня точності, ніж люди, особливо коли працюють із великими обсягами даних.Краще прийняття рішень: Алгоритми допомагають нам приймати обґрунтованіші та об’єктивніші рішення, аналізуючи дані та виявляючи закономірності та тенденції, які людям важко помітити.Масштабованість: Алгоритми можна легко збільшити або зменшити відповідно до мінливих вимог і навантажень.

Недоліки алгоритму

Алгоритми дуже корисні для програмування, але алгоритми мають недоліки.

вони є:-

    Обмежена сфера застосування: Алгоритми можуть вирішувати лише проблеми в межах їхньої сфери і можуть бути не в змозі розв’язувати складні чи абстрактні проблеми.Упередженість: Алгоритми можуть підтримувати та посилювати упередження в даних, які використовуються для навчання, що призводить до несправедливих результатів.Недостатня прозорість: багато алгоритмів приховують процес, за допомогою якого вони приходять до своїх висновків. Це може ускладнити обмірковування або перевірку результатів.Залежність від точності даних:Правильність набору правил значною мірою залежить від точності та застосовності даних, які використовуються в інструкції. Неточні або неточні ефекти можуть бути результатом неправильних даних.стримана адаптивність:Алгоритми розроблені для дотримання вказівок і не адаптуються до мінливих обставин і умов.