Як алгоритми формують ваше цифрове життя: посібник для непрограмістів

1

Ви натискаєте на екран. З’являється контент. Ви не бачили, як це сталося, але хтось чи щось вирішило, що саме вам показати.

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

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

Щоб зрозуміти, чому це важливо, потрібно подивитися, як працюють комп’ютери.

Покрокова логіка коду

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

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

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

Алгоритм «Таксі»
* Ідіть до стійки таксі.
* Сідайте в машину.
* Назвіть водієві свою адресу.

Алгоритм «Зателефонуй мені»
* Зателефонуйте на свій мобільний телефон, коли літак приземлиться.
* Зустрітися за зоною видачі багажу.

Алгоритм «Оренда авто»
* Сядьте на шатл до стійки прокату.
* Візьміть автомобіль напрокат.
* Рухайтеся до будинку за допомогою GPS.

Алгоритм «Автобус»
* Сідайте на автобус №70 за зоною видачі багажу.
* Пересадка на автобус №14 на Головній вулиці.
* Вийдіть на вулиці Ельм.
* Пройдіть два квартали на північ.

Усі чотири варіанти працюють. Жоден із них не «неправильний». Але вони сильно різняться за вартістю та часом. Таксі швидке, але дороге. Автобус дешевий, але повільний. Ви вибираєте алгоритм, залежно від обставин.

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

Чому сортування важливіше, ніж ви думаєте

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

Комп’ютери витрачають багато часу на сортування списків. Імена. Ціни. Дата. Результати пошуку. Якщо сортування неефективне, вся система уповільнюється.

Дослідники вивчають алгоритми сортування десятиліттями. Ось п’ять найпоширеніших підходів:

  • Блочне сортування (Bin sort)
  • Сортування злиттям (Merge sort)
  • Бульбашкова сортування (Bubble sort)
  • Сортування Шелла (Shell sort)
  • Швидке сортування (Quicksort)

Який із них ви використовуєте?

Якщо у вас є мільйон цілих чисел від 1 до 10, переможцем буде блочне сортування. Це швидко і просто для невеликих діапазонів. Якщо у вас є мільйон назв книг, швидке сортування, ймовірно, найкращий вибір. Він краще справляється з неструктурованими даними. Знання сильних і слабких сторін дозволяє розробникам вибрати правильний інструмент. Якщо ви виберете неправильний, ваша програма працюватиме повільно.

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

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

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

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

Алгоритми динамічного програмування

Цей підхід оптимізує складні завдання, розбиваючи їх на простіші підзадачі. Це дозволяє уникнути повторного обчислення тих самих даних. Приклади включають створення ряду Фібоначчі, вирішення проблеми ранця (максимізація вартості в обмеженому просторі) або знаходження найкоротшого шляху на графіку, наприклад, за допомогою алгоритмів Беллмана-Форда або Флойда-Воршелла.

Жадібні алгоритми

Жадібні алгоритми вибирають найкращий локальний варіант на кожному кроці. Вони не дивляться на загальну картину. Вони припускають, що найкращий негайний вибір призведе до найкращого загального результату. Це добре працює для таких проблем, як пошук мінімального охоплюючого дерева в мережі (алгоритми Крускала та Прима). Але іноді жадібність заводить вас у глухий кут.

Алгоритми з поверненням (Backtracking)

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

Алгоритми машинного навчання

Вони дозволяють комп’ютерам навчатися на даних, а не слідувати жорстко закодованим правилам. Вони передбачають результати або приймають рішення. Вони поділяються на контрольоване навчання (навчання з позначених даних), неконтрольоване навчання (пошук закономірностей у непозначених даних), навчання з підкріпленням (навчання через винагороду/покарання) і глибоке навчання (з використанням нейронних мереж).

Імовірнісні алгоритми

Іноді детермінізм надто повільний. Імовірнісні алгоритми вводять у свою логіку випадковість. Вони використовують імовірнісні підходи для вирішення проблем, де суворий покроковий метод неефективний. Яскравими прикладами є метод Монте-Карло та ймовірнісне швидке сортування.

Алгоритми грубої сили

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

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

Людський фактор

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

У цифровому житті ви рідко бачите код. Ви бачите лише результат. Стрічку, яка розуміє ваш настрій. Картку, яка уникає пробок. Результат пошуку, який відповідає на ваше запитання, перш ніж ви закінчите друкувати.

Не магія. Це просто кроки.

Але хто вирішує ці кроки? І хто визначає вагу кожного кроку?

Це справжнє питання.

Наступного разу, коли ви прокручуватимете стрічку, запитаєте себе: який алгоритм керує процесом? І чому він вибрав саме цей контент для вас?

Відповідь може змінити те, як ви дивитеся на екран.

Як алгоритми перетворять вхідні дані на результати реального світу

Алгоритм це просто набір інструкцій. Він приймає вхідні дані. Обробляє ці дані. Видає результат. Мова, якою ви його пишете — Python, C++, Java — не змінює основну механіку. Важливою є логіка. І ця логіка завжди прагне оптимального рішення, навіть якщо «оптимальний» означає щось різне залежно від завдання.

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

Розв’язання задач та класифікація

Деякі алгоритми призначені для пошуку конкретних відповідей. Уявіть, як Google Maps розраховує найкоротший шлях між двома точками. Або простий скрипт, що сортує невпорядкований перелік чисел. Це класичні результати розв’язання задач.

Але у машинному навчанні результатом часто є рішення. Фільтр спаму не просто сортує листи; він класифікує їх. Це спам? Так чи ні. Система рекомендацій непросто перераховує товари. Вона вирішує, які продукти ви, швидше за все, купите зараз. Вона робить вибір для вас.

Числа, структури та візуалізація

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

Потім є зорова сторона. Алгоритми комп’ютерної графіки беруть сирі числові дані і перетворюють їх на зображення. Двигуни рендерингу у відеоіграх генерують 2D-зображення з 3D-моделей. Без цих алгоритмів світи, у яких ми граємо, були просто лініями на екрані.

Текст, сигнали та фізичні дії

Алгоритми обробки природної мови виробляють текст. Вони генерують відповіді, схожі на людські, перекладають мови чи підсумовують довгі статті. Це вже не просто код; це спілкування.

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

Загальна картина

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

Питання не у тому, як вони працюють. Питання, що вони зможуть робити далі.

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

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

Ось кілька цікавих посилань:

  • Як штучний інтелект повністю змінює все
  • whatis.com: Алгоритм
  • Як працює Java
  • Як працює C
  • Як працюють ПК
  • Як працює шифрування
  • Як працює стиск файлів

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

Що таке алгоритм простими словами?
Коли ви кажете комп’ютера, що робити, ви також вибираєте, як він це робить. Це і є алгоритм. Це базова техніка або набір інструкцій для виконання завдання.

Який приклад алгоритму?
Рецепт – класичний приклад. Це кінцевий перелік інструкцій. Алгоритм може бути більш конкретним, але те ж концепція.

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

Яке використання алгоритмів у програмуванні?
Алгоритми є основою обробки даних. Більшість комп’ютерних програм – це просто набори алгоритмів, що наслідують конкретні інструкції для виконання простих завдань. Без них немає автоматизації. Нема логіки. Тільки сире залізо, яке очікує вказівок.