Що таке алгоритм?


12

Що саме є алгоритмом, як у тому, що означає Алгоритм? Я мало розумію це слово - це те, що воно не характерне для конкретної мови чи дизайнерського шаблону, скоріше це один із найосновніших принципів (тому я думаю, що це питання робить мене дурним).

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

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

(Я хотів би запитати тут, швидше, про Stackoverflow, оскільки мова не йде про конкретну проблему / мову, плюс я маю відчуття, що більшість людей тут знає "чому", або принаймні відповіді тут більш детальні, а не про Stackoverflow де це інакше, вибачте, якщо я мав би запитати там)



1
@Apalala: Я не думаю, що ці обмеження застосовуються.
Джош К

2
@Apalala: Кінцеве , невідомо .
Джош К

2
@Jonathan: "слова, які я повинен шукати"? Які слова? Будьте конкретні . Цей сайт не є магією. Ми вас не знаємо. Ми не знаємо, що ви читали. Ми не знаємо, що вас бентежило. Будь ласка, будьте конкретні .
С.Лотт

1
@Apalala: "Кінцеве" означає "обмежене", більше нічого. Алгоритм гарантовано зупинить колись. Набагато простіше довести скінченність, коли ти маєш якийсь спосіб передбачити, що він закінчиться, тому алгоритми, як правило, передбачувані, але передбачуваність не в звичайному визначенні алгоритмів.
Девід Торнлі

Відповіді:


19

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


1
+1. "Кінцеве, чітко визначене та ефективне" - це три критерії у статті Вікіпедії. Тут у вас є також усі троє.
С.Лотт

Я налаштований на перегляд відео, яке цитує @ Jörg, але моя теперішня точка зору полягає в тому, що не лише кроки повинні бути кінцевими. Якщо ресурси (включаючи час) не обмежені, то процедуру можна викликати або позначати як що-небудь, але не алгоритм .
Апалала

@Apalala - Я повертався до своїх підручників, і цього обмеження я не бачу ніде. Можливо, що для певного набору даних або введення алгоритм може не припинятися (такі алгоритми, як метод Ньютона-Рафсона для пошуку кореня, можуть застрягнути в нескінченному циклі), але це не робить алгоритм не алгоритмом.
Джон Боде

@John Коливання можна і звичайно виявляти в Ньютоні-Рафсоні.
Апалала

1
@Apalala: це більше схоже на визначення програми, ніж на алгоритм. Ця ідея дискретних кроків присутня в машинах Тьюрінга, машинах реєстрації, машинах з випадковим доступом, і, звичайно, в наших фактичних фізичних комп'ютерах, також майже в кожній мові програмування і навіть, хоча б явніше, в лямбдальному обчисленні. Але це довільне обмеження, яке не властиве алгоритмам. Наприклад, аналогові алгоритми не мають дискретних кроків (насправді це визначення аналогового алгоритму), і вони реально можуть бути реалізовані з аналоговим комп'ютером.
Йорг W Міттаг

15

Це насправді досить цікаве питання, а насправді все ще відкрите дослідницьке питання.

Юрій Гуревич, один з гігантів теорії алгоритмів, зараз веде серію відео лекцій на веб-сайті спільноти Microsoft Channel9:

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

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


2
Дякуємо за посилання. Ви помітите в тексті, що супроводжує перше відео, як частину визначення алгоритму: Припинення є важливою частиною визначення алгоритму. Ось чому операційні системи та сервери без закінчення не є алгоритмами.
LIProf

4

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

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


Існує безліч алгоритмів, які не обов'язково дають остаточний результат. Наприклад, операційна система або веб-сервер - це алгоритм, для якого надання остаточного результату зазвичай вважається помилкою.
Йорг W Міттаг

@ JörgWMittag, але ОС чи веб-сервер є "алгоритмом"? Я думаю, що це не так - вони можуть вирішувати підпрограми свого домену за допомогою алгоритмів - і в кожному випадку їм обов'язково потрібен кінцевий результат, - але вони також мають частини, які не є алгоритмами, і в цілому вони є ' t алгоритми. (Це як ви сказали в іншому коментарі - ОС і веб-сервери - це програми, але не обов'язково алгоритми ).
Андрес Ф.

2

Алгоритм - це набір правил або процесу (у розрахунку), використовуваних для вирішення проблем. В основному, є проблема, ви хочете вирішити, і процес цього рішення є алгоритмом. Алгоритм має кінцеві набори правил / процесу для досягнення рішення.

Якщо ви схожі на Edsger W. Dijkstra , ви напишете свій алгоритм на аркуші паперу і опрацюєте / вдосконалите алгоритм на папері, поки не будете задоволені своїми алгоритмами. В іншому випадку (особливо при написанні документацій) блок-схема використовується для діаграми представлення потоку алгоритму / процесу. Це дозволяє іншим критикувати блок-схему та покращувати її за потреби (не турбуючись про те, яка мова програмування потрібна).

Я не знаю, чи відповідає це на ваше запитання.


Мені не подобається набір слів, оскільки воно означає "не замовлено". Я вважаю за краще "послідовність", або подія, що залишиться в математиці,
BenjaminB

@ Ubiquité, Set не обов'язково означає "не замовлено". Ви можете класифікувати набір у бажаному порядку (наприклад, випадкове впорядкування). Тим не менш, це не вимагає голосування через тлумачення людьми слова "встановити". Крім того, ви можете мати складений набір, який представляє собою групування наборів, що також є частиною алгоритмів. Отже, "набір" може бути будь-яким, доки його належним чином використовувати як алгоритмічне рішення проблеми.
Buhake Sindi

Я не спровокував!
БенджамінB

Вибачте, я не мав на тобі звинувачувати вас в голосі. Спонсорувальник повинен чітко вказати причини виникнення протиправних дій.
Buhake Sindi

1

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


Приклад лічильника: операційна система. Це не дає результату взагалі , насправді, що зазвичай вважається помилкою.
Йорг W Міттаг

@ Jörg, добре, що ОС дає багато результатів, які разом узяли загальний результат надання системних послуг додаткам.
ThomasMcLeod

@ JörgWMittag Як я вже говорив в інших коментарях до вас, висновок до вашого зауваження буде, що операційна система насправді не є алгоритмом;)
Андрес Ф.

1

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

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

Властивості алгоритму: Основні властивості алгоритму:

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


0

Я використовую термін для опису формули для вирішення конкретної проблеми. Формулу не обов'язково потрібно писати з математики або мати зв’язок 1: 1 з методом. У школі алгоритми та структури даних тісно пов’язані між собою і їх можна записати як математичні формули або перевірити за допомогою доказів.


0

Алгоритм - це абстрагування комп'ютерної програми і складається з набору вказівок для досягнення певної чітко визначеної задачі в кінцевій кількості кроків, хоча обмеження на кількість кроків може бути дуже великим і окремі кроки можуть бути складними ( кінцеві) завдання самостійно. Хоча існують (правильні) програми, які в цілому відомі - не алгоритмічні, всі вони працюють, повторюючи алгоритмічні фрагменти за деякою схемою. (Більш цікавими є програми, статус припинення яких не відомий, але більшість програмістів насправді не займаються подібними речами навмисно; я знаю, що ні!)


0

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

Чи вважаєте ви будь-яке / все перераховане нижче алгоритмом?

  1. Функція, яка обчислює процентну ставку за кредитом протягом 20 років
  2. Бізнес-логіка, яка перевіряє, чи була введена вся інформація у заяві на позику
  3. finderФункція , яка запитує базу даних для об'єкта клієнта
  4. Функція "помічник", яка очищує та форматує введення даних
  5. Функція, яка аналізує XML-файл і відображає дані для бізнес-об’єктів
  6. Клас, який приймає введення та записує їх у текстовий файл

0

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


0

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

Чітко визначений крок: це те, що ви можете зробити або обчислити, що точно визначено. Просто прочитавши крок, ви знаєте, що вам потрібно зробити і як це зробити. Зокрема, ви можете записати його на відомій мові програмування та бути впевненим, що фрагмент програми точно відповідає кроку.

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

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

Кінцеве: Алгоритм гарантовано зупинить колись, принаймні, на машині, яка може працювати досить довго. Це не обов'язково гарантовано зупиняється в передбачуваний час, і не гарантується, що воно зупиниться до того, як сонце розшириться і стане червоним на будь-якій існуючій машині. Це також означає, що операційна система не є алгоритмом, оскільки в ідеалі вона буде працювати назавжди. Я бачив слово "процедура", яке використовується для опису чогось, що було б алгоритмом, якби ми були впевнені, що воно колись зупиниться. (Можна створити алгоритм, який зупиниться через невідому кількість часу. Припустимо, скажімо, гіпотеза Гольдбаха виявилася математично помилковою, неконструктивним доказом, тому було парне число> 2, яке не було сумою двох простих Алгоритм, який просто випробував парні числа, згодом припиняється,

Алгоритм - це навмисно абстрактна річ, тому ми не розглядаємо питання типу "Чи фізично це можливо виконати перед тепловою смертю Всесвіту?". Вони б занадто важко відповісти. Якщо це стосується комп'ютерних операцій, його легко реалізувати мовою програмування.


-1

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

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


Мені ця відповідь дуже сподобалась, і я думаю, що ми могли б трохи відібрати її далі і сказати (хоча це не пов'язано з оригінальним запитанням): будь-який алгоритм є оптимізацією жорстокого пошуку / пошуку дерева. Цікаво, чи можна це довести формально.
mojuba

-1 "Алгоритм" - це добре визначений математичний термін.
Апалала

1
@Apalala, що ж заважає вам переосмислити це задля ясності чи, скажімо, краще зрозуміти його суть? Алгоритм як "набір інструкцій" мені майже нічого не говорить.
mojuba

1
@mojuba Мені дуже байдуже, чи буде термін переосмислений, але я вважаю, що традиційне визначення було корисним, оскільки воно принаймні розмежовувало способи наближення до проблем: Алгоритм - це рецепт вирішення проблеми за допомогою обмежених ресурсів . Змініть це визначення, і передбачуваний наслідок полягає в тому, що нам доведеться придумати інше слово, яке означає те саме. Чорт! Всі знання, отримані в минулому столітті про обчислюваність і складність, минають без чіткого визначення алгоритму !
Апалала

1
Пошук грубої сили - це алгоритм. Це, як правило, не дуже алгоритм, і його взагалі не варто писати. Я не бачу реальної корисності в тому, щоб виключити грубу силу, і в багатьох випадках не зрозуміло, що насправді означає "краще, ніж груба сила".
Девід Торнлі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.