Якщо ви не займаєтесь математикою чи програмуванням, слово "алгоритм" може бути грецьким для вас, але воно є одним із основних елементів усього, що ви використовуєте для читання цієї статті. Ось коротке пояснення того, що вони є і як вони працюють.
Застереження: я не вчитель математики та інформатики, тому не всі терміни, якими я користуюся, є технічними. Це тому, що я намагаюся пояснити все просто англійською мовою, тому що людям не зовсім зручно мати математику. З огляду на це, є певна математика, і цього не уникнути. Математичні виродки, не соромтеся виправляти або краще пояснити в коментарях, але будь ласка, будьте простішими для математично непохитних серед нас.
Зображення Ян Руоцала
Що таке алгоритм?
Слово «алгоритм» має етимологію, подібну до «алгебри», за винятком того, що це стосується самого арабського математика, аль-Хварізмі (просто цікавий шматок). Алгоритм для непрограмістів серед нас - це набір інструкцій, які беруть вхід A і забезпечують вихід B, який певним чином змінює задіяні дані. Алгоритми мають широке застосування. У математиці вони можуть допомогти обчислити функції з точок у наборі даних, серед набагато більш досконалих речей. Окрім їх використання в самому програмуванні, вони відіграють головну роль у таких справах, як стиснення файлів та шифрування даних.
Основний набір інструкцій
Скажімо, ваш друг зустрічається з вами в продуктовому магазині, а ви ведете його до себе. Ви кажете такі речі, як "зайти через праві двері", "пройти рибну секцію ліворуч" і "якщо ви бачите молочну ферму, ви пройшли повз мене". Алгоритми працюють так. Ми можемо використовувати блок-схему, щоб проілюструвати інструкції на основі критеріїв, про які ми знаємо заздалегідь, або з’ясувати їх під час процесу.
(зображення під назвою “ Процедура криголаму ”EDIT: люб’язно Курок та вільний ход )
Починаючи зі СТАРТ, ви рухаєтесь вниз по шляху, і залежно від того, що відбувається, ви будете слідувати за «потоком» до кінцевого результату. Блок-схеми - це візуальні інструменти, які більш зрозуміло можуть представляти набір інструкцій, що використовуються комп’ютерами. Подібним чином алгоритми допомагають зробити те саме з іншими математичними моделями.
Графіки
Давайте використаємо графік, щоб проілюструвати різні способи, якими ми можемо дати вказівки.
Цей графік ми можемо виразити як зв’язок між усіма його точками. Для того, щоб відтворити це зображення, ми можемо дати набір інструкцій комусь іншому.
Спосіб 1
Ми можемо представити це як ряд точок, і інформація буде відповідати стандартній формі графіку = {(x1, y1), (x2, y2), …, (xn, yn)}.
графік = {(0,0), (3,0), (3,3), (5,5), (7,10), (8,7), (9,4), (10,1)}
Досить легко побудувати графік кожної точки, одну за одною, і зв’язати їх із попередньою точкою. Однак уявіть собі графік з тисячою точками або декількома відрізками, які рухаються в будь-який бік. Цей список містив би багато даних, правда? І тоді необхідність зв’язувати кожного, по одному, може бути болем.
Спосіб 2
Ще одне, що ми можемо зробити, це вказати початкову точку, нахил лінії між нею та наступною точкою, та вказати, де очікувати наступну точку, використовуючи стандартну форму графіку = {(starting point}, [m1, x1, h1],…, [mn, xn, hn]}. Тут змінна «m» представляє нахил лінії, «x» - напрямок, в якому потрібно рахувати (будь то x чи y), а «h» - вам вказати, скільки потрібно врахувати у вказаному напрямку. Ви також можете пам’ятати будувати точку після кожного руху.
графік = {(0,0), [0,x,3], [0,y,3], [1,x,2], [2.5,x,2], [-3,x,1], [-3,x,1], [-3,x,1]}
Ви отримаєте той самий графік. Ви бачите, що останні три терміни в цьому виразі однакові, тому ми можемо зменшити це, просто сказавши «повторити це тричі» якимось чином. Скажімо, що кожного разу, коли ви бачите змінну «R», це означає повторити останнє. Ми можемо зробити це:
графік = {(0,0), [0,x,3], [0,y,3], [1,x,2], [2.5,x,2], [-3,x,1], [R=2]}
Що робити, якщо окремі точки насправді не мають значення, а має значення лише сам графік? Ми можемо консолідувати ці три останні розділи так:
графік = {(0,0), [0,x,3], [0,y,3], [1,x,2], [2.5,x,2], [-3,x,3]}
Це трохи скорочує речі від того, де вони були раніше.
Спосіб 3
Спробуймо зробити це по-іншому.
y = 0, 0≤x≤3
x = 0, 0≤y≤3
y = x, 3≤x≤5
y = 2,5x-7,5, 5≤x≤7
y = -3x + 29, 7≤x≤8
y = -3x + 29, 8≤x≤9
y = -3x + 29,9≤x≤10
Тут ми маємо це в чисто алгебраїчному плані. Ще раз, якщо самі точки не мають значення, а значення має лише графік, ми можемо об’єднати останні три елементи.
y = 0, 0≤x≤3
x = 0, 0≤y≤3
y = x, 3≤x≤5
y = 2,5x-7,5, 5≤x≤7
y = -3x + 29, 7≤x≤10
Тепер, який метод ви оберете, залежить від ваших можливостей. Можливо, ви чудово володієте математикою та графіком, тому ви обираєте останній варіант. Можливо, ви добре орієнтуєтесь, тому ви обираєте другий варіант. Однак у сфері комп’ютерів ви виконуєте багато різних видів завдань, і здатність комп’ютера насправді не змінюється. Тому алгоритми оптимізовані під завдання, які вони виконують.
Ще один важливий момент, на який слід звернути увагу, полягає в тому, що кожен метод покладається на ключ. Кожен набір інструкцій марний, якщо ви не знаєте, що з ними робити. Якщо ви не знаєте, що ви повинні побудувати кожну точку та з’єднати крапки, перший набір точок нічого не означає. Якщо ви не знаєте, що означає кожна змінна у другому методі, ви не будете знати, як їх застосовувати, подібно до ключа до шифру. Цей ключ також є невід'ємною частиною використання алгоритмів, і часто цей ключ можна знайти в спільноті або за допомогою "стандарту".
Стиснення файлів
Завантажуючи файл .zip, ви витягуєте вміст, щоб можна було використовувати все, що знаходиться всередині нього. На сьогоднішній день більшість операційних систем можуть занурюватися у .zip-файли, як звичайні папки, роблячи все у фоновому режимі. На моїй машині Windows 95 більше десяти років тому мені довелося витягувати все вручну, перш ніж я міг побачити щось більше, ніж імена файлів всередині. Це тому, що те, що зберігалося на диску як .zip-файл, не було придатним для використання. Подумайте про висувний диван. Коли ви хочете використовувати його як ліжко, вам доведеться зняти подушки і розкласти, що займає більше місця. Коли він вам не потрібен або ви хочете його транспортувати, ви можете скласти його назад.
Алгоритми стиснення налаштовані та оптимізовані спеціально для типів файлів, на які вони призначені. Наприклад, аудіоформати використовують різні способи зберігання даних, які при декодуванні аудіокодеком дають звуковий файл, схожий на вихідну форму сигналу. Щоб отримати додаткову інформацію про ці відмінності, перегляньте нашу попередню статтю, Які відмінності між усіма цими аудіоформатами? Аудіоформати без втрат та файли .zip мають одне спільне: вони обидва видають вихідні дані в точному вигляді після процесу декомпресії. Втрачені аудіокодеки використовують інші засоби, щоб заощадити місце на диску, наприклад, обрізання частот, які не чутні людськими вухами, і згладжування форми сигналу в розділах, щоб позбутися деяких деталей. Зрештою, хоча ми, можливо, не зможемо почути різницю між MP3 і CD-композицією, у першій, безумовно, дефіцит інформації.
Шифрування даних
Алгоритми також використовуються при захисті даних або ліній зв'язку. Замість того, щоб зберігати дані так, щоб вони зайняли менше місця на диску, вони зберігаються таким чином, що не виявляються іншими програмами. Якщо хтось викраде ваш жорсткий диск і почне його сканувати, він може забрати дані, навіть коли ви видаляєте файли, оскільки самі дані все ще є, хоча місце пересилання на нього вже немає. Коли дані шифруються, все, що зберігається, не схоже на те, що воно є. Зазвичай це виглядає випадковим, ніби фрагментація накопичилася з часом. Ви також можете зберігати дані та зробити їх такими, що відображаються як файл іншого типу. Файли зображень та музичні файли добре підходять для цього, оскільки, наприклад, вони можуть бути досить великими, не викликаючи підозр. Все це робиться за допомогою математичних алгоритмів, які беруть якийсь вхід і перетворюють його в інший, дуже конкретний тип виводу. Щоб отримати докладнішу інформацію про те, як працює шифрування, перегляньте статтю HTG пояснює: Що таке шифрування та як воно працює?
Алгоритми - це математичні інструменти, що забезпечують різноманітне використання в інформатиці. Вони працюють над тим, щоб забезпечити послідовний шлях між початковою та кінцевою точками та надають інструкції щодо його дотримання. Знаєте більше, ніж те, що ми виділили? Поділіться своїми поясненнями в коментарях!