Напротив, эвристика — это подход к решению проблем, который может быть не полностью определен или не может гарантировать правильные или оптимальные результаты, особенно в проблемных областях, где нет четко определенного правильного или оптимального результата. [3] Например, рекомендательные системы социальных сетей полагаются на эвристику таким образом, что, хотя они широко характеризуются как «алгоритмы» в популярных медиа 21-го века, не могут предоставить правильные результаты из-за характера проблемы.
В качестве эффективного метода алгоритм может быть выражен в конечном количестве пространства и времени [4] и на четко определенном формальном языке [5] для вычисления функции . [6] Начиная с начального состояния и начальных входных данных (возможно, пустых ), [7] инструкции описывают вычисление, которое при выполнении проходит через конечное [8] число четко определенных последовательных состояний, в конечном итоге производя «выходные данные» [9] и завершаясь в конечном конечном состоянии. Переход из одного состояния в другое не обязательно является детерминированным ; некоторые алгоритмы, известные как рандомизированные алгоритмы , включают случайные входные данные. [10]
Этимология
Около 825 г. н. э. персидский учёный и эрудит Мухаммад ибн Муса аль-Хорезми написал «Китаб аль-хисаб аль-хинди » («Книга индийских вычислений») и «Китаб аль-джам' валь-тафрик аль-хисаб аль-хинди» («Сложение и вычитание в индийской арифметике»). [1] В начале XII века появились латинские переводы указанных текстов аль-Хорезми, включающие индо-арабскую систему счисления и арифметику , например, «Liber Alghoarismi de practica arismetrice» , приписываемая Иоанну Севильскому , и «Liber Algorismi de numero Indorum» , приписываемая Аделарду Батскому . [2] Таким образом, alghoarismi или algorismi является латинизацией имени Аль-Хорезми; текст начинается с фразы Dixit Algorismi , или «Так говорил Аль-Хорезми». [3] Около 1230 года засвидетельствовано английское слово algorism , а затем Чосером в 1391 году английский язык принял французский термин. [4] [5] [ необходимо разъяснение ] В 15 веке под влиянием греческого слова ἀριθμός ( arithmos , «число»; ср. «арифметика») латинское слово было изменено на algorithmus . [ необходима цитата ]
Определение
Одно неформальное определение — «набор правил, который точно определяет последовательность операций», [11] [ нужна цитата для проверки ], которое включает все компьютерные программы (включая программы, которые не выполняют числовые вычисления) и (например) любую предписанную бюрократическую процедуру [12]
или рецепт из кулинарной книги . [13] В общем, программа является алгоритмом только в том случае, если она в конечном итоге останавливается [14] — даже несмотря на то, что бесконечные циклы иногда могут оказаться желательными. Boolos, Jeffrey & 1974, 1999 определяют алгоритм как набор инструкций для определения выходных данных, заданных явно, в форме, которой может следовать либо вычислительная машина, либо человек, который может выполнять только определенные элементарные операции над символами . [15]
Понятие алгоритма также используется для определения понятия разрешимости — идеи, которая является центральной для объяснения того, как формальные системы возникают, начиная с небольшого набора аксиом и правил. В логике время, необходимое алгоритму для завершения, не может быть измерено, поскольку оно не связано с обычным физическим измерением. Такие неопределенности, характерные для текущей работы, вытекают из отсутствия определения алгоритма , которое подходило бы как для конкретного (в некотором смысле), так и для абстрактного использования этого термина.
Начиная с древности, пошаговые процедуры решения математических задач были записаны. Это включает в себя вавилонскую математику (около 2500 г. до н. э.), [16] египетскую математику (около 1550 г. до н. э.), [16] индийскую математику (около 800 г. до н. э. и позже), [17] [18] оракул Ифа (около 500 г. до н. э.), [19] греческую математику (около 240 г. до н. э.), [20] и арабскую математику (около 800 г. н. э.). [21]
Самые ранние свидетельства алгоритмов найдены в математике древней Месопотамии (современный Ирак). Шумерская глиняная табличка, найденная в Шуруппаке около Багдада и датированная примерно 2500 г. до н. э., описывает самый ранний алгоритм деления . [16] Во времена династии Хаммурапи примерно с 1800 по 1600 г. до н. э . вавилонские глиняные таблички описывали алгоритмы для вычисления формул. [22] Алгоритмы также использовались в вавилонской астрономии . Вавилонские глиняные таблички описывают и используют алгоритмические процедуры для вычисления времени и места значимых астрономических событий. [23]
Первый криптографический алгоритм для расшифровки зашифрованного кода был разработан Аль-Кинди , арабским математиком 9-го века, в «Рукописи о расшифровке криптографических сообщений» . Он дал первое описание криптоанализа с помощью частотного анализа , самого раннего алгоритма взлома кодов. [21]
Компьютеры
Часы с гиревым приводом
Болтер считает изобретение часов с гиревым приводом «ключевым изобретением [Европы в Средние века]», в частности, механизм спуска [25] , который обеспечивает тиканье и такт механических часов. «Точная автоматическая машина» [26] немедленно привела к «механическим автоматам », начиная с 13-го века, и, наконец, к «вычислительным машинам» — разностным и аналитическим машинам Чарльза Бэббиджа и Ады Лавлейс в середине 19-го века. [27] Лавлейс приписывают первое создание алгоритма, предназначенного для обработки на компьютере, аналитической машины Бэббиджа, которая является первым устройством, считающимся настоящим Тьюринг-полным компьютером, а не просто калькулятором . В результате Лавлейс иногда называют «первым программистом в истории», хотя полная реализация второго устройства Бэббиджа была реализована только через десятилетия после ее жизни.
Электромеханическое реле
Белл и Ньюэлл (1971) пишут, что жаккардовый ткацкий станок , предшественник карт Холлерита (перфокарт), и «телефонные коммутационные технологии» привели к развитию первых компьютеров. [28] К середине 19-го века телеграф , предшественник телефона, использовался во всем мире. К концу 19-го века использовалась лента тикера ( ок. 1870-х годов ), как и карты Холлерита (ок. 1890 года). Затем появился телетайп ( ок. 1910 года ) с его перфорированной бумагой, использующей код Бодо на ленте.
Телефонные коммутационные сети электромеханических реле были изобретены в 1835 году. Это привело к изобретению цифрового суммирующего устройства Джорджем Стибицем в 1937 году. Работая в Bell Laboratories, он наблюдал «обременительное» использование механических калькуляторов с шестеренками. «Однажды вечером в 1937 году он пошел домой, намереваясь проверить свою идею... Когда возня была закончена, Стибиц сконструировал двоичное суммирующее устройство». [29] [30]
Алгоритмы могут быть выражены во многих видах нотации, включая естественные языки , псевдокод , блок-схемы , дракон-диаграммы , языки программирования или управляющие таблицы (обрабатываемые интерпретаторами ). Выражения алгоритмов на естественном языке, как правило, многословны и неоднозначны и редко используются для сложных или технических алгоритмов. Псевдокод, блок-схемы, дракон-диаграммы и управляющие таблицы — это структурированные способы выражения алгоритмов, которые избегают многих неоднозначностей, распространенных в утверждениях, основанных на естественном языке. Языки программирования в первую очередь предназначены для выражения алгоритмов в форме, которая может быть выполнена компьютером, но они также часто используются как способ определения или документирования алгоритмов.
Машины Тьюринга
Существует широкий спектр возможных представлений, и можно выразить заданную программу машины Тьюринга как последовательность таблиц машины (см. конечный автомат , таблицу переходов состояний и таблицу управления для получения дополнительной информации), как блок-схемы и дракон-карты (см. диаграмму состояний для получения дополнительной информации) или как форму элементарного машинного кода или ассемблерного кода, называемого «наборами четверок» (см. машину Тьюринга для получения дополнительной информации). Представления алгоритмов также можно классифицировать по трем принятым уровням описания машины Тьюринга: высокоуровневое описание, описание реализации и формальное описание. [33] Высокоуровневое описание описывает качества самого алгоритма, игнорируя то, как он реализован на машине Тьюринга. [33] Описание реализации описывает общий способ, которым машина перемещает свою головку и сохраняет данные для выполнения алгоритма, но не дает точных состояний. [33] Наиболее подробно формальное описание дает точную таблицу состояний и список переходов машины Тьюринга. [33]
Представление блок-схемы
Графическое пособие, называемое блок-схемой, предлагает способ описания и документирования алгоритма (и соответствующей ему компьютерной программы). Как и программный поток машины Мински, блок-схема всегда начинается сверху страницы и продолжается вниз. Ее основных символов всего четыре: направленная стрелка, показывающая программный поток, прямоугольник (SEQUENCE, GOTO), ромб (IF-THEN-ELSE) и точка (OR-tie). Канонические структуры Бема-Якопини состоят из этих примитивных форм. Подструктуры могут «вкладываться» в прямоугольники, но только если из надстройки происходит один выход. Символы и их использование для построения канонических структур показаны на диаграмме. [34]
Алгоритмический анализ
Часто бывает важно знать, сколько определенного ресурса (например, времени или хранилища) теоретически требуется для данного алгоритма. Были разработаны методы анализа алгоритмов для получения таких количественных ответов (оценок); например, алгоритм, который складывает элементы списка из n чисел, будет иметь временные требования , используя нотацию big O . В любой момент времени алгоритму нужно запомнить только два значения: сумму всех элементов на данный момент и его текущую позицию во входном списке. Поэтому говорят, что он имеет требования к пространству , если пространство, необходимое для хранения входных чисел, не учитывается, или , если оно учитывается.
Различные алгоритмы могут выполнять одну и ту же задачу с различным набором инструкций за меньшее или большее время, пространство или « усилия », чем другие. Например, алгоритм бинарного поиска (со стоимостью ) превосходит последовательный поиск (стоимость ) при использовании для поиска в таблицах в отсортированных списках или массивах.
Формальное против эмпирического
Анализ и изучение алгоритмов — это дисциплина компьютерной науки , которая часто практикуется абстрактно, без использования конкретного языка программирования или реализации. В этом смысле анализ алгоритмов напоминает другие математические дисциплины, поскольку он фокусируется на базовых свойствах алгоритма, а не на специфике какой-либо конкретной реализации. Обычно для анализа используется псевдокод , поскольку это простейшее и наиболее общее представление. Однако в конечном итоге большинство алгоритмов обычно реализуются на определенных аппаратных/программных платформах, и их алгоритмическая эффективность в конечном итоге подвергается испытанию с использованием реального кода. Для решения «разовой» проблемы эффективность конкретного алгоритма может не иметь существенных последствий (если только n не очень велико), но для алгоритмов, разработанных для быстрого интерактивного, коммерческого или долгосрочного научного использования, она может быть критической. Масштабирование от малых n до больших n часто выявляет неэффективные алгоритмы, которые в противном случае были бы безвредными.
Эмпирическое тестирование полезно, поскольку оно может обнаружить неожиданные взаимодействия, которые влияют на производительность. Тесты производительности могут использоваться для сравнения до/после потенциальных улучшений алгоритма после оптимизации программы. Однако эмпирические тесты не могут заменить формальный анализ и не являются тривиальными для честного выполнения. [35]
Эффективность исполнения
Чтобы проиллюстрировать потенциальные улучшения, возможные даже в хорошо зарекомендовавших себя алгоритмах, недавнее значительное нововведение, связанное с алгоритмами БПФ (широко используемыми в области обработки изображений), может сократить время обработки до 1000 раз для таких приложений, как медицинская визуализация. [36] В целом, повышение скорости зависит от особых свойств задачи, которые очень распространены в практических приложениях. [37] Ускорения такого масштаба позволяют вычислительным устройствам, которые широко используют обработку изображений (например, цифровые камеры и медицинское оборудование), потреблять меньше энергии.
Дизайн
Проектирование алгоритмов относится к методу или математическому процессу для решения проблем и разработки алгоритмов. Проектирование алгоритмов является частью многих теорий решений, таких как « разделяй и властвуй» или динамическое программирование в рамках исследования операций . Методы проектирования и внедрения проектов алгоритмов также называются шаблонами проектирования алгоритмов, [38] с примерами, включая шаблон метода шаблона и шаблон декоратора. Одним из наиболее важных аспектов проектирования алгоритмов является эффективность ресурсов (время выполнения, использование памяти); нотация «большое О» используется для описания, например, роста времени выполнения алгоритма по мере увеличения размера его входных данных. [39]
Структурированное программирование
Согласно тезису Чёрча–Тьюринга , любой алгоритм может быть вычислен с помощью модели, известной как полная по Тьюрингу . Фактически, было продемонстрировано, что полнота по Тьюрингу требует только четырёх типов инструкций — условный GOTO, безусловный GOTO, присваивание, HALT. Однако Кемени и Курц отмечают, что, хотя «недисциплинированное» использование безусловных GOTO и условных IF-THEN GOTO может привести к « спагетти-коду », программист может писать структурированные программы, используя только эти инструкции; с другой стороны, «также возможно, и не слишком сложно, писать плохо структурированные программы на структурированном языке». [40] Таусворте дополняет три канонические структуры Бёма-Якопини : [41] SEQUENCE, IF-THEN-ELSE и WHILE-DO, ещё двумя: DO-WHILE и CASE. [42] Дополнительным преимуществом структурированной программы является то, что она позволяет доказать ее правильность с помощью математической индукции . [43]
Правовой статус
Алгоритмы сами по себе обычно не патентуются. В Соединенных Штатах иск, состоящий исключительно из простых манипуляций абстрактными понятиями, числами или сигналами, не является «процессами» (USPTO 2006), поэтому алгоритмы не патентуются (как в деле Gottschalk v. Benson ). Однако практическое применение алгоритмов иногда патентуется. Например, в деле Diamond v. Diehr применение простого алгоритма обратной связи для помощи в вулканизации синтетического каучука было признано патентоспособным. Патентование программного обеспечения является спорным [44], и существуют критикуемые патенты, включающие алгоритмы, особенно алгоритмы сжатия данных , такие как патент LZW компании Unisys . Кроме того, некоторые криптографические алгоритмы имеют экспортные ограничения (см. экспорт криптографии ).
Классификация
Существуют различные способы классификации алгоритмов, каждый из которых имеет свои достоинства.
По реализации
Одним из способов классификации алгоритмов является классификация по способам реализации.
Рекурсия
Рекурсивный алгоритм — это алгоритм, который многократно вызывает (ссылается на) себя, пока не совпадет определенное условие (также известное как условие завершения), что является методом, общим для функционального программирования . Итеративные алгоритмы используют повторяющиеся конструкции, такие как циклы , а иногда и дополнительные структуры данных, такие как стеки, для решения заданных задач. Некоторые задачи естественным образом подходят для одной или другой реализации. Например, ханойские башни хорошо понятны с использованием рекурсивной реализации. Каждая рекурсивная версия имеет эквивалентную (но, возможно, более или менее сложную) итеративную версию, и наоборот.
Последовательный, параллельный или распределенный
Алгоритмы обычно обсуждаются с предположением, что компьютеры выполняют одну инструкцию алгоритма за раз. Такие компьютеры иногда называют последовательными компьютерами. Алгоритм, разработанный для такой среды, называется последовательным алгоритмом, в отличие от параллельных алгоритмов или распределенных алгоритмов . Параллельные алгоритмы — это алгоритмы, которые используют преимущества компьютерных архитектур, где несколько процессоров могут работать над проблемой одновременно. Распределенные алгоритмы — это алгоритмы, которые используют несколько машин, подключенных к компьютерной сети. Параллельные и распределенные алгоритмы разделяют задачу на более симметричные или асимметричные подзадачи и собирают результаты обратно вместе. Например, ЦП может быть примером параллельного алгоритма. Потребление ресурсов в таких алгоритмах — это не только циклы процессора на каждом процессоре, но и накладные расходы на связь между процессорами. Некоторые алгоритмы сортировки можно эффективно распараллелить, но их накладные расходы на связь обходятся дорого. Итеративные алгоритмы, как правило, поддаются распараллеливанию, но некоторые задачи не имеют параллельных алгоритмов и называются по своей сути последовательными задачами.
В то время как многие алгоритмы достигают точного решения, алгоритмы приближения ищут приближение, которое ближе к истинному решению. Приближение может быть достигнуто либо с помощью детерминированной, либо случайной стратегии. Такие алгоритмы имеют практическую ценность для многих сложных задач. Одним из примеров приближенного алгоритма является задача о рюкзаке , где есть набор заданных предметов. Его цель — упаковать рюкзак, чтобы получить максимальную общую стоимость. Каждый предмет имеет некоторый вес и некоторую стоимость. Общий вес, который можно нести, не превышает некоторого фиксированного числа X. Таким образом, решение должно учитывать вес предметов, а также их стоимость. [45]
Другой способ классификации алгоритмов — по их методологии проектирования или парадигме . Существует определенное количество парадигм, каждая из которых отличается от другой. Кроме того, каждая из этих категорий включает в себя множество различных типов алгоритмов. Некоторые общие парадигмы:
Метод грубой силы — это метод решения проблем, который включает в себя систематическое перебор всех возможных вариантов до тех пор, пока не будет найдено оптимальное решение. Этот подход может быть очень трудоемким, так как требует перебора всех возможных комбинаций переменных. Однако его часто используют, когда другие методы недоступны или слишком сложны. Метод грубой силы можно использовать для решения различных задач, включая поиск кратчайшего пути между двумя точками и взлом паролей.
Разделяй и властвуй
Алгоритм «разделяй и властвуй» многократно сводит экземпляр проблемы к одному или нескольким меньшим экземплярам той же проблемы (обычно рекурсивно ) до тех пор, пока экземпляры не станут достаточно малыми для легкого решения. Одним из таких примеров «разделяй и властвуй» является сортировка слиянием . Сортировка может быть выполнена для каждого сегмента данных после разделения данных на сегменты, а сортировка всех данных может быть получена на этапе завоевания путем слияния сегментов. Более простой вариант алгоритма «разделяй и властвуй» называется алгоритмом «уменьшей и властвуй» , который решает идентичную подзадачу и использует решение этой подзадачи для решения большей проблемы. «Разделяй и властвуй» делит задачу на несколько подзадач, и поэтому этап завоевания является более сложным, чем алгоритмы «уменьшей и властвуй». Примером алгоритма «уменьшей и властвуй» является алгоритм бинарного поиска .
Такие алгоритмы делают некоторые выборы случайным образом (или псевдослучайно). Они могут быть очень полезны при поиске приближенных решений для задач, где поиск точных решений может быть непрактичным (см. эвристический метод ниже). Для некоторых из этих задач известно, что самые быстрые приближения должны включать некоторую случайность . [46] Могут ли рандомизированные алгоритмы с полиномиальной временной сложностью быть самыми быстрыми алгоритмами для некоторых задач — открытый вопрос, известный как проблема P против NP . Существует два больших класса таких алгоритмов:
Этот метод включает решение сложной проблемы путем преобразования ее в более известную проблему, для которой у нас есть (надеюсь) асимптотически оптимальные алгоритмы. Цель состоит в том, чтобы найти алгоритм сокращения, сложность которого не доминируется полученными сокращенными алгоритмами. Например, один алгоритм выбора для поиска медианы в несортированном списке включает в себя сначала сортировку списка (дорогая часть), а затем извлечение среднего элемента из отсортированного списка (дешевая часть). Этот метод также известен как « преобразуй и покори» .
При таком подходе несколько решений создаются постепенно и отбрасываются, когда становится ясно, что они не могут привести к полноценному полному решению.
Проблемы оптимизации
Для задач оптимизации существует более конкретная классификация алгоритмов; алгоритм для таких задач может относиться к одной или нескольким общим категориям, описанным выше, а также к одной из следующих:
При поиске оптимальных решений для линейной функции, связанной с линейными ограничениями равенства и неравенства, ограничения задачи могут быть использованы непосредственно при получении оптимальных решений. Существуют алгоритмы, которые могут решить любую задачу в этой категории, например, популярный симплексный алгоритм . [47] Задачи, которые можно решить с помощью линейного программирования, включают задачу максимального потока для ориентированных графов. Если задача дополнительно требует, чтобы одно или несколько неизвестных были целыми числами, то она классифицируется в целочисленном программировании . Алгоритм линейного программирования может решить такую задачу, если можно доказать, что все ограничения для целочисленных значений являются поверхностными, т. е. решения в любом случае удовлетворяют этим ограничениям. В общем случае используется специализированный алгоритм или алгоритм, который находит приближенные решения, в зависимости от сложности задачи.
Когда проблема показывает оптимальные подструктуры — то есть оптимальное решение проблемы может быть построено из оптимальных решений подзадач — и перекрывающиеся подзадачи , то есть те же подзадачи используются для решения множества различных экземпляров задач, более быстрый подход, называемый динамическим программированием, позволяет избежать повторного вычисления решений, которые уже были вычислены. Например, алгоритм Флойда–Уоршелла , кратчайший путь к цели от вершины во взвешенном графе может быть найден путем использования кратчайшего пути к цели от всех смежных вершин. Динамическое программирование и мемоизация идут рука об руку. Главное различие между динамическим программированием и разделяй и властвуй заключается в том, что подзадачи более или менее независимы в разделяй и властвуй, тогда как подзадачи перекрываются в динамическом программировании. Разница между динамическим программированием и прямой рекурсией заключается в кэшировании или мемоизации рекурсивных вызовов. Когда подзадачи независимы и нет повторений, мемоизация не помогает; следовательно, динамическое программирование не является решением для всех сложных проблем. Используя мемоизацию или ведение таблицы уже решенных подзадач, динамическое программирование сводит экспоненциальную природу многих задач к полиномиальной сложности.
Жадный метод
Жадный алгоритм похож на алгоритм динамического программирования в том, что он работает, исследуя подструктуры, в данном случае не проблемы, а заданного решения. Такие алгоритмы начинаются с некоторого решения, которое может быть задано или было построено каким-то образом, и улучшают его, внося небольшие изменения. Для некоторых задач они могут найти оптимальное решение, в то время как для других они останавливаются на локальных оптимумах , то есть на решениях, которые не могут быть улучшены алгоритмом, но не являются оптимальными. Наиболее популярное использование жадных алгоритмов — поиск минимального остовного дерева, где нахождение оптимального решения возможно с помощью этого метода. Дерево Хаффмана , Крускал , Прим , Соллин — это жадные алгоритмы, которые могут решить эту задачу оптимизации.
Эвристический метод
В задачах оптимизации эвристические алгоритмы могут использоваться для поиска решения, близкого к оптимальному, в случаях, когда поиск оптимального решения нецелесообразен. Эти алгоритмы работают, приближаясь все ближе и ближе к оптимальному решению по мере продвижения. В принципе, если они выполняются в течение бесконечного времени, они найдут оптимальное решение. Их достоинство в том, что они могут найти решение, очень близкое к оптимальному, за относительно короткое время. Такие алгоритмы включают локальный поиск , поиск с запретами , имитацию отжига и генетические алгоритмы . Некоторые из них, такие как имитация отжига, являются недетерминированными алгоритмами, в то время как другие, такие как поиск с запретами, являются детерминированными. Когда известна граница ошибки неоптимального решения, алгоритм далее классифицируется как алгоритм приближения .
Примеры
Один из самых простых алгоритмов — найти наибольшее число в списке чисел в случайном порядке. Для поиска решения требуется просмотреть каждое число в списке. Из этого следует простой алгоритм, который можно сформулировать в высокоуровневом описании в английской прозе, как:
Общее описание:
Если в наборе нет чисел, то нет и наибольшего числа.
Предположим, что первое число в наборе является наибольшим числом в наборе.
Для каждого оставшегося числа в наборе: если это число больше текущего наибольшего числа, считать это число наибольшим числом в наборе.
Когда в наборе не осталось чисел для перебора, текущее наибольшее число считается наибольшим числом набора.
(Квази)формальное описание: Ниже приведено более формальное кодирование алгоритма в псевдокоде или пиджин-коде
, написанное прозой, но гораздо ближе к высокоуровневому языку компьютерной программы :
Алгоритм НаибольшееЧислоВходные данные
: список чисел L.Вывод :
наибольшее число в списке L.
если L.size = 0 вернуть null largest ← L [0] для каждого элемента в L , сделать if item > largest , then largest ← item вернуть largest
"←" обозначает назначение . Например, " largest ← item " означает, что значение largest изменяется на значение item .
« return » завершает алгоритм и выводит следующее значение.
^ ab "Определение АЛГОРИТМА". Онлайн-словарь Merriam-Webster . Архивировано из оригинала 14 февраля 2020 г. Получено 14 ноября 2019 г.
^ ab Блэр, Энн, Дугид, Пол, Гоинг, Аня-Сильвия и Графтон, Энтони. Информация: Исторический компаньон, Принстон: Princeton University Press, 2021. стр. 247
^ Дэвид А. Гроссман, Офир Фридер, Информационный поиск: алгоритмы и эвристики , 2-е издание, 2004, ISBN 1402030045
^ ab «Любой классический математический алгоритм, например, можно описать конечным числом английских слов» (Роджерс 1987:2).
^ ab Хорошо определено относительно агента, который выполняет алгоритм: «Существует вычислительный агент, обычно человек, который может реагировать на инструкции и выполнять вычисления» (Роджерс 1987:2).
^ «алгоритм — это процедура вычисления функции (относительно некоторой выбранной нотации для целых чисел)... это ограничение (числовыми функциями) не приводит к потере общности» (Роджерс 1987:1).
^ «Алгоритм имеет ноль или более входных данных, т. е. величин , которые даны ему изначально, до начала работы алгоритма» (Кнут 1973:5).
^ «Процедура, которая обладает всеми характеристиками алгоритма, за исключением того, что она, возможно, лишена конечности, может быть названа «вычислительным методом » » (Кнут 1973:5).
^ «Алгоритм имеет один или несколько выходов, т. е. величин, которые имеют указанное отношение к входным данным» (Кнут 1973:5).
^ Является ли процесс со случайными внутренними процессами (не включая входные данные) алгоритмом или нет, является спорным вопросом. Роджерс полагает, что: «вычисление выполняется дискретным пошаговым образом, без использования непрерывных методов или аналоговых устройств... осуществляется детерминированно, без обращения к случайным методам или устройствам, например, игральным костям» (Rogers 1987:2).
^ Стоун 1973:4
^ Симановски, Роберто (2018). Алгоритм смерти и другие цифровые дилеммы. Несвоевременные размышления. Том 14. Перевод Чейза, Джефферсона. Кембридж, Массачусетс: MIT Press. стр. 147. ISBN9780262536370. Архивировано из оригинала 22 декабря 2019 г. . Получено 27 мая 2019 г. . [...] следующий уровень абстракции центральной бюрократии: глобально работающие алгоритмы.
^ Дитрих, Эрик (1999). «Алгоритм». В Wilson, Роберт Эндрю; Keil, Фрэнк К. (ред.). Энциклопедия когнитивных наук Массачусетского технологического института. Библиотека Cognet Массачусетского технологического института. Кембридж, Массачусетс: MIT Press (опубликовано в 2001 г.). стр. 11. ISBN9780262731447. Получено 22 июля 2020 г. . Алгоритм — это рецепт, метод или техника выполнения чего-либо.
^ Стоун требует, чтобы «это завершилось конечным числом шагов» (Stone 1973:7–8).
^ Булос и Джеффри 1974,1999:19
^ abcd Шабер, Жан-Люк (2012). История алгоритмов: от Pebble до Microchip . Springer Science & Business Media. стр. 7–8. ISBN9783642181924.
^ ab Sriram, MS (2005). "Алгоритмы в индийской математике". В Emch, Gerard G.; Sridharan, R.; Srinivas, MD (ред.). Вклад в историю индийской математики . Springer. стр. 153. ISBN978-93-86279-25-5.
^ Хаяши, Т. (2023, 1 января). Брахмагупта. Энциклопедия Британника.
^ Заславский, Клаудия (1970). «Математика народа йоруба и их соседей в Южной Нигерии». Двухгодичный колледж математики. Журнал . 1 (2): 76–99. doi :10.2307/3027363. ISSN 0049-4925. JSTOR 3027363.
^ abc Кук, Роджер Л. (2005). История математики: краткий курс . John Wiley & Sons. ISBN978-1-118-46029-0.
^ ab Dooley, John F. (2013). Краткая история криптологии и криптографических алгоритмов . Springer Science & Business Media. стр. 12–3. ISBN9783319016283.
^ Кнут, Дональд Э. (1972). «Древние вавилонские алгоритмы» (PDF) . Commun. ACM . 15 (7): 671–677. doi :10.1145/361454.361514. ISSN 0001-0782. S2CID 7829945. Архивировано из оригинала (PDF) 24 декабря 2012 г.
^ Аст, Кортни. «Эратосфен». Университет штата Уичито: Кафедра математики и статистики. Архивировано из оригинала 27 февраля 2015 г. Получено 27 февраля 2015 г.
↑ Болтер 1984:24
↑ Болтер 1984:26
^ Болтер 1984: 33–34, 204–206.
^ Диаграмма Белла и Ньюэлла 1971:39, см. Дэвис 2000
↑ Мелина Хилл, корреспондент Valley News, Мастер на все руки вошел в историю , Valley News West Lebanon NH, четверг, 31 марта 1983 г., стр. 13.
^ Дэвис 2000:14
↑ Клини 1943 в Дэвис 1965:274
^ Россер 1939 в Дэвисе 1965: 225
^ abcd Сипсер 2006:157
^ см. Таусворте 1977
^ Кригель, Ханс-Петер ; Шуберт, Эрих; Зимек, Артур (2016). «(Черное) искусство оценки времени выполнения: сравниваем ли мы алгоритмы или реализации?». Knowledge and Information Systems . 52 (2): 341–378. doi :10.1007/s10115-016-1004-2. ISSN 0219-1377. S2CID 40772241.
^ Джиллиан Конахан (январь 2013 г.). «Лучшая математика делает сети передачи данных более быстрыми». discovermagazine.com. Архивировано из оригинала 13 мая 2014 г. Получено 13 мая 2014 г.
^ Хайтам Хассание, Петр Индик , Дина Катаби и Эрик Прайс, «Симпозиум ACM-SIAM по дискретным алгоритмам (SODA)», архивировано 4 июля 2013 г. на Wayback Machine , Киото, январь 2012 г. См. также веб-страницу sFFT, архивировано 21 февраля 2012 г. на Wayback Machine .
^ Гудрич, Майкл Т.; Тамассиа , Роберто (2002). Разработка алгоритмов: основы, анализ и примеры Интернета. John Wiley & Sons, Inc. ISBN978-0-471-38365-9. Архивировано из оригинала 28 апреля 2015 г. . Получено 14 июня 2018 г. .
^ "Нотация Big-O (статья) | Алгоритмы". Khan Academy . Получено 3 июня 2024 г. .
↑ Knuth 1973, раздел 1.2.1, расширенный Tausworthe 1977 на страницах 100ff и в главе 9.1
^ «Эксперты: поощряет ли патентная система инновации?». The Wall Street Journal . 16 мая 2013 г. ISSN 0099-9660 . Получено 29 марта 2017 г.
^ Келлерер, Ганс; Пферши, Ульрих; Пизингер, Дэвид (2004). Проблемы с рюкзаком | Ганс Келлерер | Спрингер. Спрингер. дои : 10.1007/978-3-540-24777-7. ISBN978-3-540-40286-2. S2CID 28836720. Архивировано из оригинала 18 октября 2017 г. . Получено 19 сентября 2017 г. .
^ Например, объем выпуклого многогранника ( описанный с помощью оракула членства) может быть аппроксимирован с высокой точностью с помощью рандомизированного полиномиального алгоритма времени, но не детерминированного: см. Dyer, Martin; Frieze, Alan; Kannan, Ravi (январь 1991 г.). "A Random Polynomial-time Algorithm for Approximating the Volume of Convex Bodies". J. ACM . 38 (1): 1–17. CiteSeerX 10.1.1.145.4600 . doi :10.1145/102782.102783. S2CID 13268711.
^ Джордж Б. Данциг и Мукунд Н. Тапа. 2003. Линейное программирование 2: Теория и расширения . Springer-Verlag.
Библиография
Axt, P (1959). «О субрекурсивной иерархии и примитивных рекурсивных степенях». Труды Американского математического общества . 92 (1): 85–105. doi : 10.2307/1993169 . JSTOR 1993169.
Белл, К. Гордон и Ньюэлл, Аллен (1971), Компьютерные структуры: материалы и примеры , McGraw–Hill Book Company, Нью-Йорк. ISBN 0-07-004357-4 .
Бласс, Андреас ; Гуревич, Юрий (2003). "Алгоритмы: поиски абсолютных определений" (PDF) . Бюллетень Европейской ассоциации теоретической информатики . 81. Архивировано (PDF) из оригинала 9 октября 2022 г.Включает библиографию из 56 ссылок.
Болтер, Дэвид Дж. (1984). Человек Тьюринга: Западная культура в компьютерную эпоху (ред. 1984 г.). Чапел-Хилл, Северная Каролина: Издательство Университета Северной Каролины. ISBN 978-0-8078-1564-9., ISBN 0-8078-4108-0
Булос, Джордж ; Джеффри, Ричард (1999) [1974]. Вычислимость и логика (4-е изд.). Cambridge University Press, Лондон. ISBN 978-0-521-20402-6.: см. Главу 3 « Машины Тьюринга» , где обсуждаются «некоторые перечислимые множества, которые невозможно эффективно (механически) перечислить».
Burgin, Mark (2004). Суперрекурсивные алгоритмы . Springer. ISBN 978-0-387-95569-8.
Кампаньоло, М. Л., Мур, К. и Коста, Дж. Ф. (2000) Аналоговая характеристика субрекурсивных функций. В трудах 4-й конференции по действительным числам и компьютерам , Университет Оденсе, стр. 91–109
Чёрч, Алонзо (1936). «Неразрешимая проблема элементарной теории чисел». American Journal of Mathematics . 58 (2): 345–363. doi :10.2307/2371045. JSTOR 2371045.Перепечатано в The Undecidable , стр. 89 и далее. Первое выражение «тезиса Чёрча». См. в частности стр. 100 ( The Undecidable ), где он определяет понятие «эффективной вычислимости» в терминах «алгоритма», и он использует слово «завершает» и т. д.
Чёрч, Алонзо (1936). «Заметка о проблеме Entscheidungsproblem». Журнал символической логики . 1 (1): 40–41. doi :10.2307/2269326. JSTOR 2269326. S2CID 42323521. Чёрч, Алонзо (1936). «Исправление к заметке о проблеме Entscheidungsproblem». Журнал символической логики . 1 (3): 101–102. doi :10.2307/2269030. JSTOR 2269030. S2CID 5557237.Перепечатано в The Undecidable , стр. 110 и далее. Чёрч показывает, что Entscheidungsproblem неразрешима примерно на 3 страницах текста и 3 страницах сносок.
Даффа, Али Абдулла аль- (1977). Мусульманский вклад в математику . Лондон: Croom Helm. ISBN 978-0-85664-464-1.
Дэвис, Мартин (1965). Неразрешимое: основные статьи о неразрешимых предложениях, неразрешимых проблемах и вычислимых функциях . Нью-Йорк: Raven Press. ISBN 978-0-486-43228-1.Дэвис дает комментарии перед каждой статьей. Включены статьи Гёделя , Алонзо Чёрча , Тьюринга , Россера , Клини и Эмиля Поста ; те, на которые ссылаются в статье, перечислены здесь по имени автора.
Дин, Тим (2012). «Эволюция и моральное разнообразие». Балтийский международный ежегодник познания, логики и коммуникации . 7 . doi : 10.4148/biyclc.v7i0.1775 .
Юрий Гуревич , Последовательные абстрактные машины состояний захватывают последовательные алгоритмы, ACM Transactions on Computational Logic, том 1, № 1 (июль 2000 г.), стр. 77–111. Включает библиографию из 33 источников.
ван Хейеноорт, Жан (2001). От Фреге до Гёделя, Учебник по математической логике, 1879–1931 (ред. (1967)). Издательство Гарвардского университета, Кембридж. ISBN 978-0-674-32449-7., 3-е издание 1976[?], ISBN 0-674-32449-8 (pbk.)
Kleene, Stephen C. (1936). "Общие рекурсивные функции натуральных чисел". Mathematische Annalen . 112 (5): 727–742. doi :10.1007/BF01565439. S2CID 120517999. Архивировано из оригинала 3 сентября 2014 г. Получено 30 сентября 2013 г.Представлено Американскому математическому обществу в сентябре 1935 г. Перепечатано в The Undecidable , стр. 237 и далее. Определение Клини «общей рекурсии» (теперь известной как мю-рекурсия) было использовано Чёрчем в его статье 1935 г. «Неразрешимая проблема элементарной теории чисел» , которая доказала, что «проблема принятия решения» «неразрешима» (т. е. имеет отрицательный результат).
Клини, Стивен К. (1943). «Рекурсивные предикаты и квантификаторы». Труды Американского математического общества . 53 (1): 41–73. doi : 10.2307/1990131 . JSTOR 1990131.Перепечатано в The Undecidable , стр. 255 и далее. Клини уточнил свое определение «общей рекурсии» и продолжил в главе «12. Алгоритмические теории» выдвигать «Тезис I» (стр. 274); позже он повторил этот тезис (в Kleene 1952:300) и назвал его «Тезисом Чёрча» (Kleene 1952:317) (т. е. тезисом Чёрча ).
А.А. Марков (1954) Теория алгоритмов . [Перевод Ж. Дж. Шорр-Кона и сотрудников PST] Выходные данные Москва, Академия наук СССР, 1954 [т.е. Иерусалим, Израильская программа научных переводов, 1961; доступно в Офисе технических служб, Министерство торговли США, Вашингтон] Описание 444 с. 28 см. Добавлено в Русский перевод трудов Математического института, Академия наук СССР, т. 42. Оригинальное название: Теория алгоритмов. [QA248.M2943 Библиотека Дартмутского колледжа. Министерство торговли США, Офис технических служб, номер OTS 60-51085.]
Минский, Марвин (1967). Вычисления: Конечные и бесконечные машины (Первое издание). Prentice-Hall, Энглвуд Клиффс, Нью-Джерси. ISBN 978-0-13-165449-5.Минский развивает свою «...идею алгоритма – эффективной процедуры...» в главе 5.1 Вычислимость, эффективные процедуры и алгоритмы. Бесконечные машины.
Пост, Эмиль (1936). «Конечные комбинаторные процессы, формулировка I». Журнал символической логики . 1 (3): 103–105. doi :10.2307/2269031. JSTOR 2269031. S2CID 40284503.Перепечатано в The Undecidable , стр. 289 и далее. Пост определяет простой алгоритмический процесс, когда человек пишет или стирает знаки и переходит от ящика к ящику и в конечном итоге останавливается, следуя списку простых инструкций. Это цитируется Клини как один из источников его «Тезис I», так называемого тезиса Чёрча–Тьюринга .
Роджерс, Хартли-младший (1987). Теория рекурсивных функций и эффективная вычислимость . Издательство MIT. ISBN 978-0-262-68052-3.
Россер, Дж. Б. (1939). «Неформальное изложение доказательств теоремы Гёделя и теоремы Чёрча». Журнал символической логики . 4 (2): 53–60. doi :10.2307/2269059. JSTOR 2269059. S2CID 39499392.Перепечатано в The Undecidable , стр. 223 и далее. Здесь представлено знаменитое определение Россером «эффективного метода»: «...метод, каждый шаг которого точно предопределен и который наверняка даст ответ за конечное число шагов... машина, которая затем решит любую задачу из набора без какого-либо вмешательства человека, кроме ввода вопроса и (позднее) чтения ответа» (стр. 225–226, The Undecidable ).
Сантос-Ланг, Кристофер (2015). «Подходы моральной экологии к этике машин» (PDF) . В ван Ризевик, Саймон; Понтье, Маттейс (ред.). Медицинская этика машин . Интеллектуальные системы, управление и автоматизация: наука и инженерия. Том 74. Швейцария: Springer. стр. 111–127. doi :10.1007/978-3-319-08108-3_8. ISBN 978-3-319-08107-6. Архивировано (PDF) из оригинала 9 октября 2022 г.
Скотт, Майкл Л. (2009). Прагматика языка программирования (3-е изд.). Morgan Kaufmann Publishers/Elsevier. ISBN 978-0-12-374514-9.
Сипсер, Майкл (2006). Введение в теорию вычислений. PWS Publishing Company. ISBN 978-0-534-94728-6.
Sober, Elliott; Wilson, David Sloan (1998). Unto Others: The Evolution and Psychology of Unselfish Behavior . Кембридж: Harvard University Press. ISBN 9780674930469.
Стоун, Гарольд С. (1972). Введение в организацию компьютеров и структуры данных (ред. 1972 г.). McGraw-Hill, Нью-Йорк. ISBN 978-0-07-061726-1.См. в частности первую главу под названием: Алгоритмы, машины Тьюринга и программы . Его краткое неформальное определение: «...любая последовательность инструкций, которой может следовать робот, называется алгоритмом » (стр. 4).
Таусворте, Роберт С. (1977). Стандартизированная разработка программного обеспечения для компьютеров. Часть 1. Методы . Энглвуд Клиффс, Нью-Джерси: Prentice–Hall, Inc. ISBN 978-0-13-842195-3.
Тьюринг, Алан М. (1936–37). «О вычислимых числах с приложением к проблеме Entscheidungsproblem». Труды Лондонского математического общества . Серия 2. 42 : 230–265. doi :10.1112/plms/s2-42.1.230. S2CID 73712.. Исправления, там же, т. 43 (1937) стр. 544–546. Перепечатано в The Undecidable , стр. 116 и далее. Знаменитая работа Тьюринга, завершенная как магистерская диссертация во время учебы в Королевском колледже Кембриджа, Великобритания.
Тьюринг, Алан М. (1939). «Системы логики, основанные на ординалах». Труды Лондонского математического общества . 45 : 161–228. doi :10.1112/plms/s2-45.1.161. hdl : 21.11116/0000-0001-91CE-3 .Перепечатано в The Undecidable , стр. 155 и далее. Статья Тьюринга, в которой он дал определение «оракулу», была его докторской диссертацией, которую он защитил в Принстоне.
Патентное ведомство и товарные знаки США (2006), 2106.02 **>Математические алгоритмы: 2100 Патентоспособность, Руководство по процедуре патентной экспертизы (MPEP). Последняя редакция от августа 2006 г.
Заславский, К. (1970). Математика народа йоруба и их соседей в Южной Нигерии. Двухгодичный журнал по математике в колледже, 1(2), 76–99. https://doi.org/10.2307/3027363
Дальнейшее чтение
Белла, Роберт Нилли (1985). Привычки сердца: индивидуализм и преданность американской жизни. Беркли: Издательство Калифорнийского университета. ISBN 978-0-520-25419-0.
Берлински, Дэвид (2001). Пришествие алгоритма: 300-летнее путешествие от идеи к компьютеру. Harvest Books. ISBN 978-0-15-601391-8.
Шабер, Жан-Люк (1999). История алгоритмов: от Pebble до Microchip . Springer Verlag. ISBN 978-3-540-63369-3.
Томас Х. Кормен; Чарльз Э. Лейзерсон; Рональд Л. Ривест; Клиффорд Стейн (2009). Введение в алгоритмы (3-е изд.). МТИ Пресс. ISBN 978-0-262-03384-8.
Hertzke, Allen D.; McRorie, Chris (1998). «Концепция моральной экологии». В Lawler, Peter Augustine; McConkey, Dale (ред.). Сообщество и политическая мысль сегодня . Westport, CT: Praeger .
Кнут, Дональд Э. (2000). Избранные статьи по анализу алгоритмов, архивированные 1 июля 2017 г. в Wayback Machine . Стэнфорд, Калифорния: Центр изучения языка и информации.
Кнут, Дональд Э. (2010). Избранные статьи по разработке алгоритмов, архивированные 16 июля 2017 г. в Wayback Machine . Стэнфорд, Калифорния: Центр изучения языка и информации.
Уоллах, Уэнделл; Аллен, Колин (ноябрь 2008 г.). Моральные машины: обучение роботов отличать правильное от неправильного . США: Oxford University Press. ISBN 978-0-19-537404-9.
Бликли, Крис (2020). Стихи, решающие головоломки: история и наука алгоритмов. Oxford University Press. ISBN 978-0-19-885373-2.
Внешние ссылки
Найдите алгоритм в Викисловаре, бесплатном словаре.
В Wikibooks есть книга по теме: Алгоритмы
В Викиверситете вы можете узнать больше и научить других алгоритмам на кафедре алгоритмики.
На Викискладе есть медиафайлы по теме «Алгоритмы» .