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

12

Что такое алгоритм, а что означает алгоритм? Мало что я понимаю слово, это то, что оно не относится к конкретному языку или шаблону проектирования, скорее это один из самых основных принципов (поэтому я думаю, что этот вопрос заставляет меня выглядеть глупо).

Одна из «опций», которую я понимаю, заключается в том, что это означает метод получения чего-либо, который может быть записан в виде списка в псевдокоде.

Когда я пишу более сложный код, я думаю, что нужно сделать, с чем и как я туда попаду (не на языке программирования), а затем пишу это в коде. Это хороший способ сделать это, и это как-то связано с алгоритмами?

(Я хотел спросить здесь скорее о Stackoverflow, потому что речь идет не о конкретной проблеме / языке, плюс у меня возникает ощущение, что большинство людей здесь знают «почему», или, по крайней мере, ответы здесь более подробные, а не о Stackoverflow где это отличается, извините, если бы я спросил там)

Джонатан.
источник
5
Google? Вики? google.com/search?q=algorithm
Маглоб,
1
@ Апалала: Я не думаю, что эти ограничения применяются.
Джош К
2
@Apalala: конечно , не известно .
Джош К
2
@Jonathan: "слова, которые я должен посмотреть"? Какие слова? Будьте конкретны . Этот сайт не волшебный. Мы вас не знаем. Мы не знаем, что вы читаете. Мы не знаем, что вас смутило. Пожалуйста, будьте конкретны .
S.Lott
1
@Apalala: «Конечный» означает «ограниченный», не более того. Алгоритм гарантированно остановится когда-нибудь. Намного легче доказать конечность, когда у вас есть какой-то способ предсказать, что он закончится, поэтому алгоритмы имеют тенденцию быть предсказуемыми, но предсказуемость не входит в обычное определение алгоритмов.
Дэвид Торнли

Ответы:

19

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

Джон Боде
источник
1
+1. «Конечно, четко и эффективно» - вот три критерия в статье в Википедии. У вас есть все три здесь тоже.
S.Lott
Я настроен смотреть видео, цитируемые @ Jörg, но моя текущая точка зрения заключается в том, что не только шаги должны быть конечными. Если ресурсы (включая время) не ограничены, то процедура может быть вызвана или помечена как что угодно, но не как алгоритм .
Апалала
@Apalala - я просматриваю свои учебники и нигде не вижу этого ограничения. Возможно, что для определенного набора данных или ввода алгоритм может не завершиться (алгоритмы, такие как метод Ньютона-Рафсона для нахождения корня, могут застрять в бесконечном цикле), но это не делает алгоритм не алгоритмом.
Джон Боде
@ Джон Колебания могут и обычно обнаруживаются в Ньютон-Рафсоне.
Апалала
1
@Apalala: это больше похоже на определение программы, чем алгоритма. Эта идея дискретных шагов присутствует в машинах Тьюринга, регистрационных машинах, машинах с произвольным доступом и, конечно же, в наших реальных физических компьютерах, также почти во всех языках программирования и даже, хотя и неявно, в лямбда-исчислении. Но это произвольное ограничение, которое не присуще алгоритмам. Аналоговые алгоритмы, например, не имеют дискретных шагов (фактически, это определение аналогового алгоритма), и они могут фактически быть реализованы с помощью аналогового компьютера.
Йорг Миттаг
15

На самом деле это довольно интересный вопрос, и на самом деле это вопрос открытых исследований.

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

Как видите, сам ваш вопрос на самом деле является названием второй лекции. Тем не менее, я настоятельно рекомендую вам посмотреть все три из них.

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

Йорг Миттаг
источник
2
Спасибо за ссылки. Вы заметите следующее в тексте, который сопровождает первое видео, как часть определения алгоритма: «в конечном итоге, в конечном конечном состоянии». Завершение является неотъемлемой частью определения алгоритма. Вот почему операционные системы и не завершающие серверы не являются алгоритмами.
LIProf
4

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

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

Александр Гесслер
источник
Существует множество алгоритмов, которые не обязательно дают конечный результат. Например, операционная система или веб-сервер - это алгоритм, для которого получение окончательного результата обычно считается ошибкой.
Йорг Миттаг,
@ JörgWMittag, но ОС или веб-сервер "алгоритм"? Я думаю, что это не так - они могут решать подзадачи своей области с помощью алгоритмов - и в каждом случае им определенно нужен конечный результат - но у них также есть части, которые не являются алгоритмами, и в целом они не являются « т алгоритмы. (Как вы сказали в другом комментарии - операционные системы и веб-серверы - это программы, но не обязательно алгоритмы ).
Андрес Ф.
2

Алгоритм - это набор правил или процессов (в расчете), используемых для решения проблем. По сути, есть проблема, вам нужно решение, а процесс к этому решению - алгоритм. Алгоритм имеет конечные наборы правил / процессов для достижения решения.

Если вы похожи на Эдсгера В. Дейкстры , вы напишите свой алгоритм на листе бумаги и разработаете / уточните алгоритм на бумаге, пока не будете удовлетворены своими алгоритмами. В противном случае (особенно при написании документации) потоковая диаграмма используется для схематического представления потока алгоритма / процесса. Это позволяет другим критиковать блок-схему и при необходимости улучшать ее (не беспокоясь о том, какой язык программирования необходим).

Я не знаю, отвечает ли это на ваш вопрос.

Бухаке синди
источник
Мне не нравится слово set, потому что оно означает «не заказано». Я бы предпочел, чтобы «последовательность» или кортеж событий оставались в математической области
BenjaminB
@ Ubiquité, Set не обязательно означает "не заказано". Вы можете классифицировать набор в нужном вам порядке (например, случайный порядок). Тем не менее, это не требует отрицательного голоса из-за толкования людьми слова «набор». Кроме того, вы можете иметь составной набор, который представляет собой группу наборов, которая также является частью алгоритмов. Следовательно, «множество» может быть чем угодно, лишь бы оно надлежащим образом использовалось в качестве алгоритмического решения проблемы.
Бухаке Синди
Я не понизил
BenjaminB
Извините, я не хотел винить вас в этом. Downvoter должен явно указать причины для downvote.
Бухаке Синди
1

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

ThomasMcLeod
источник
Встречный пример: операционная система. Это не дает результата вообще , на самом деле, что обычно считается ошибкой.
Йорг Миттаг,
@ Йорг, хорошо, ОС дает много результатов, которые, вместе взятые, дают общий результат предоставления системных сервисов приложениям.
ThomasMcLeod
@ JörgWMittag Как я уже говорил в других ваших комментариях, из вашего наблюдения можно сделать вывод, что операционная система на самом деле не является алгоритмом;)
Андрес Ф.
1

Алгоритм Это комбинация последовательных шагов (этими шагами могут быть вычисления, обработка данных и задачи рассуждения), используемые для решения проблемы очень простым и эффективным способом.

Он спроектирован наиболее эффективно, чтобы его можно было выразить в ограниченном количестве пространства и времени. Мы можем реализовать его на любом языке программирования.

Свойства алгоритма: следующие основные свойства алгоритма:

Алгоритм должен иметь уникальное имя. Он должен иметь явно определенные наборы входов и выходов. Алгоритм должен быть в последовательном порядке с однозначными операциями. У него должна быть какая-то конечная точка, т. Е. Он останавливается за конечное время. нажмите здесь, чтобы узнать о разработке и анализе алгоритма

Мод джунаид
источник
0

Я использую термин для описания формулы для решения конкретной проблемы. Формула не обязательно должна быть написана в математике или иметь отношение 1: 1 с методом. В школе алгоритмы и структуры данных тесно связаны и могут быть написаны в виде математических формул или доказаны с использованием доказательств.

P.Brian.Mackey
источник
0

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

Donal Fellows
источник
0

ИМО никто точно не знает :) Я видел термин, применяемый только к функциям математических вычислений, к любой функции, которая принимает ввод и производит вывод, и ко всему, что принимает ввод и выполняет какие-то операции над ним.

Считаете ли вы что-нибудь / все из следующего алгоритмом?

  1. Функция, которая рассчитывает процентную ставку по кредиту в течение 20 лет
  2. Бизнес-логика, которая проверяет, введена ли вся информация в заявку на кредит
  3. finderФункция , которая запрашивает базу данных для объекта клиента
  4. Вспомогательная функция, которая очищает и форматирует ввод данных
  5. Функция, которая анализирует файл XML и отображает данные в бизнес-объекты.
  6. Класс, который принимает данные и записывает их в текстовый файл.
Уэйн Молина
источник
0

Алгоритм - это идея, метод, методика, «ум» для вычисления или выполнения задачи, которая носит абстрактный характер, но, поскольку она работает на компьютерах в реальном мире, мы стремимся к тому, чтобы она использовала как можно меньше ресурсов. , которые, в компьютерном мире, время и память.

JasonGenX
источник
0

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

Четко определенный шаг: это то, что вы можете сделать или рассчитать, это точно определено. Просто прочитав шаг, вы знаете, что вам нужно сделать и как это сделать. В частности, вы можете написать это на языке программирования, который вы знаете, и быть уверенным, что фрагмент программы точно соответствует шагу.

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

Результат: конечное состояние или значение. Это не должно быть предсказуемо заранее, но это должен быть определенный конец, удовлетворяющий некоторому условию. Это означает, что операционная система не является алгоритмом, хотя она использует их очень много.

Конечно: алгоритм гарантированно остановится когда-нибудь, по крайней мере, на машине, которая может работать достаточно долго. Это не обязательно гарантирует остановку в предсказуемое время, и не гарантируется, что он остановится до того, как солнце расширится и станет красным на любой существующей машине. Это также означает, что операционная система не является алгоритмом, так как в идеале она будет работать вечно. Я видел слово «процедура», используемое для описания чего-то, что было бы алгоритмом, если бы мы были уверены, что оно когда-нибудь остановится. (Возможно иметь алгоритм, который остановится за неизвестное количество времени. Предположим, предположим, что гипотеза Гольдбаха была математически ложной, в неконструктивном доказательстве, поэтому было четное число> 2, которое не было суммой двух простых чисел Алгоритм, который просто проверяет четные числа, в конечном итоге завершается,

Алгоритм является намеренно абстрактной вещью, поэтому мы не рассматриваем такие вопросы, как «Возможно ли физически выполнить это до тепловой смерти Вселенной?». На них будет слишком сложно ответить. Если это относится к компьютерным операциям, это легко реализовать на языке программирования.

Дэвид Торнли
источник
-1

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

Также важно отметить, что алгоритм не является каким-либо конкретным исходным кодом; это само вычисление. Среди прочего, это означает, что любой язык, полный по Тьюрингу, может реализовать любой алгоритм, который может реализовать любой другой язык, полный по Тьюрингу.

Мейсон Уилер
источник
Мне очень понравился этот ответ, и я думаю, что мы могли бы пойти немного дальше и сказать (хотя и не относиться к исходному вопросу): любой алгоритм - это оптимизация решения поиска методом грубой силы / дерева. Интересно, можно ли это доказать формально.
Моджуба
-1 «Алгоритм» - это четко определенный математический термин.
Апалала
1
@ Апалала, так что же мешает вам переопределить его ради ясности или, скажем, лучшего понимания его сути? Алгоритм как «набор инструкций» мне почти ничего не говорит.
Моджуба
1
@mojuba Мне действительно все равно, будет ли этот термин переопределен, но я думаю, что традиционное определение было полезным, потому что оно, по крайней мере, дифференцировало способы решения проблем: алгоритм - это рецепт для решения проблемы с использованием ограниченных ресурсов. , Измените это определение, и предсказуемое последствие состоит в том, что нам придется придумать другое слово, которое означает то же самое. Штопать! Все знания, полученные в прошлом веке о вычислимости и сложности, уходят без четкого определения алгоритма !
Апалала
1
Поиск методом грубой силы - это алгоритм. Обычно это не симпатичный алгоритм, и его не стоит писать. Я не вижу никакой реальной пользы в исключении грубой силы, и во многих случаях неясно, что на самом деле означает «лучше, чем грубая сила».
Дэвид Торнли