Напротив, эвристика — это подход к решению проблем, не имеющий четко определенных правильных или оптимальных результатов. [2] Например, хотя рекомендательные системы социальных сетей обычно называют «алгоритмами», на самом деле они полагаются на эвристику, поскольку по-настоящему «правильных» рекомендаций не существует.
В качестве эффективного метода алгоритм может быть выражен в конечном количестве пространства и времени [3] и на четко определенном формальном языке [4] для вычисления функции . [5] Начиная с начального состояния и начальных входных данных (возможно, пустых ), [6] инструкции описывают вычисление, которое при выполнении проходит через конечное [7] число четко определенных последовательных состояний, в конечном итоге производя «выходные данные» [8] и завершаясь в конечном конечном состоянии. Переход из одного состояния в другое не обязательно является детерминированным ; некоторые алгоритмы, известные как рандомизированные алгоритмы , включают случайные входные данные. [9]
Этимология
Около 825 г. н. э. персидский учёный и эрудит Мухаммад ибн Муса аль-Хорезми написал «Китаб аль-хисаб аль-хинди » («Книга индийских вычислений») и «Китаб аль-джам' валь-тафрик аль-хисаб аль-хинди» («Сложение и вычитание в индийской арифметике»). [1] В начале XII века появились латинские переводы указанных текстов аль-Хорезми, включающие индо-арабскую систему счисления и арифметику , например, «Liber Alghoarismi de practica arismetrice» , приписываемая Иоанну Севильскому , и «Liber Algorismi de numero Indorum» , приписываемая Аделарду Батскому . [10] Таким образом, alghoarismi или algorismi является латинизацией имени Аль-Хорезми; текст начинается с фразы Dixit Algorismi , или «Так говорил Аль-Хорезми». [2] Около 1230 года засвидетельствовано английское слово algorism , а затем Чосером в 1391 году английский язык принял французский термин. [3] [4] [ необходимо разъяснение ] В 15 веке под влиянием греческого слова ἀριθμός ( arithmos , «число»; ср. «арифметика») латинское слово было изменено на algorithmus . [ необходима цитата ]
Определение
Одно неформальное определение — «набор правил, который точно определяет последовательность операций», [11] [ нужна цитата для проверки ], которое включает все компьютерные программы (включая программы, которые не выполняют числовые вычисления), а также любые предписанные бюрократические процедуры [12]
или рецепты из кулинарной книги . [13] В общем, программа является алгоритмом только в том случае, если она в конечном итоге останавливается [14] — даже несмотря на то, что бесконечные циклы иногда могут оказаться желательными. Булос, Джеффри и 1974, 1999 определяют алгоритм как явный набор инструкций для определения выходных данных, которым может следовать вычислительная машина или человек, который может выполнять только определенные элементарные операции над символами . [15]
Самые ранние свидетельства об алгоритмах найдены в древней месопотамской математике. Шумерская глиняная табличка, найденная в Шуруппаке около Багдада и датированная примерно 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). Подструктуры могут «вкладываться» в прямоугольники, но только если из надстройки есть единственный выход.
Алгоритмический анализ
Часто важно знать, сколько времени, памяти или других затрат может потребовать алгоритм. Разработаны методы анализа алгоритмов для получения таких количественных ответов (оценок); например, алгоритм, который складывает элементы списка из n чисел, будет иметь временные требования , используя нотацию big O . Алгоритму нужно запомнить только два значения: сумму всех элементов на данный момент и его текущую позицию в списке входных данных. Если пространство, необходимое для хранения входных чисел, не учитывается, то он имеет требования к пространству , в противном случае требуется .
Различные алгоритмы могут выполнять одну и ту же задачу с различным набором инструкций за меньшее или большее время, пространство или « усилия », чем другие. Например, алгоритм бинарного поиска (со стоимостью ) превосходит последовательный поиск (стоимость ) при использовании для поиска в таблицах в отсортированных списках или массивах.
Формальное против эмпирического
Анализ и изучение алгоритмов — это дисциплина компьютерной науки . Алгоритмы часто изучаются абстрактно, без ссылок на какой-либо конкретный язык программирования или реализацию. Анализ алгоритмов напоминает другие математические дисциплины, поскольку он фокусируется на свойствах алгоритма, а не на реализации. Псевдокод типичен для анализа, поскольку является простым и общим представлением. Большинство алгоритмов реализованы на определенных аппаратных/программных платформах, и их алгоритмическая эффективность проверяется с использованием реального кода. Эффективность конкретного алгоритма может быть незначительной для многих «разовых» задач, но она может быть критической для алгоритмов, разработанных для быстрого интерактивного, коммерческого или долгосрочного научного использования. Масштабирование от малого n до большого n часто выявляет неэффективные алгоритмы, которые в противном случае были бы безвредными.
Эмпирическое тестирование полезно для обнаружения неожиданных взаимодействий, которые влияют на производительность. Тесты производительности могут использоваться для сравнения до/после потенциальных улучшений алгоритма после оптимизации программы. Однако эмпирические тесты не могут заменить формальный анализ и нетривиальны для честного выполнения. [34]
Эффективность исполнения
Чтобы проиллюстрировать потенциальные улучшения, возможные даже в хорошо зарекомендовавших себя алгоритмах, недавнее значительное нововведение, связанное с алгоритмами БПФ (широко используемыми в области обработки изображений), может сократить время обработки до 1000 раз для таких приложений, как медицинская визуализация. [35] В целом, повышение скорости зависит от особых свойств задачи, которые очень распространены в практических приложениях. [36] Ускорения такого масштаба позволяют вычислительным устройствам, которые широко используют обработку изображений (например, цифровые камеры и медицинское оборудование), потреблять меньше энергии.
Дизайн
Проектирование алгоритмов — это метод или математический процесс для решения проблем и разработки алгоритмов. Проектирование алгоритмов является частью многих теорий решений, таких как « разделяй и властвуй» или динамическое программирование в рамках исследования операций . Методы проектирования и внедрения проектов алгоритмов также называются шаблонами проектирования алгоритмов, [37] с примерами, включая шаблон метода шаблона и шаблон декоратора. Одним из наиболее важных аспектов проектирования алгоритмов является эффективность ресурсов (время выполнения, использование памяти); нотация «большое О» используется для описания, например, роста времени выполнения алгоритма по мере увеличения размера его входных данных. [38]
Структурированное программирование
Согласно тезису Чёрча–Тьюринга , любой алгоритм может быть вычислен любой полной по Тьюрингу моделью. Для полноты по Тьюрингу требуется всего четыре типа инструкций — условный GOTO, безусловный GOTO, присваивание, HALT. Однако Кемени и Курц отмечают, что, хотя «недисциплинированное» использование безусловных GOTO и условных IF-THEN GOTO может привести к « спагетти-коду », программист может писать структурированные программы, используя только эти инструкции; с другой стороны, «также возможно, и не слишком сложно, писать плохо структурированные программы на структурированном языке». [39] Таусворте дополняет три канонические структуры Бёма-Якопини : [40] SEQUENCE, IF-THEN-ELSE и WHILE-DO, ещё двумя: DO-WHILE и CASE. [41] Дополнительным преимуществом структурированной программы является то, что она поддаётся доказательствам корректности с использованием математической индукции . [42]
Правовой статус
Сами по себе алгоритмы обычно не патентуются. В Соединенных Штатах иск, состоящий исключительно из простых манипуляций абстрактными понятиями, числами или сигналами, не является «процессами» (USPTO 2006), поэтому алгоритмы не патентуются (как в деле Gottschalk v. Benson ). Однако практическое применение алгоритмов иногда патентуется. Например, в деле Diamond v. Diehr применение простого алгоритма обратной связи для помощи в вулканизации синтетического каучука было признано патентоспособным. Патентование программного обеспечения является спорным [43], и существуют критикуемые патенты, включающие алгоритмы, особенно алгоритмы сжатия данных , такие как патент LZW компании Unisys . Кроме того, некоторые криптографические алгоритмы имеют экспортные ограничения (см. экспорт криптографии ).
Классификация
По реализации
Рекурсия
Рекурсивный алгоритм вызывает себя многократно, пока не встретит условие завершения, и является распространенным методом функционального программирования . Итеративные алгоритмы используют повторения, такие как циклы , или структуры данных, такие как стеки, для решения задач. Задачи могут подходить для одной или другой реализации. Ханойские башни — это головоломка, обычно решаемая с помощью рекурсивной реализации. Каждая рекурсивная версия имеет эквивалентную (но, возможно, более или менее сложную) итеративную версию, и наоборот.
Последовательный, параллельный или распределенный
Алгоритмы обычно обсуждаются с предположением, что компьютеры выполняют одну инструкцию алгоритма за раз на последовательных компьютерах. Последовательные алгоритмы разработаны для этих сред, в отличие от параллельных или распределенных алгоритмов. Параллельные алгоритмы используют преимущества компьютерных архитектур, где несколько процессоров могут работать над проблемой одновременно. Распределенные алгоритмы используют несколько машин, соединенных через компьютерную сеть. Параллельные и распределенные алгоритмы разделяют проблему на подзадачи и собирают результаты обратно вместе. Потребление ресурсов в этих алгоритмах - это не только циклы процессора на каждом процессоре, но и накладные расходы на связь между процессорами. Некоторые алгоритмы сортировки можно эффективно распараллелить, но их накладные расходы на связь обходятся дорого. Итеративные алгоритмы, как правило, поддаются распараллеливанию, но некоторые проблемы не имеют параллельных алгоритмов и называются по своей сути последовательными проблемами.
В то время как многие алгоритмы достигают точного решения, алгоритмы приближения ищут приближение, близкое к истинному решению. Такие алгоритмы имеют практическую ценность для многих сложных задач. Например, задача о рюкзаке , где есть набор предметов, и цель состоит в том, чтобы упаковать рюкзак, чтобы получить максимальную общую стоимость. Каждый предмет имеет некоторый вес и некоторую стоимость. Общий вес, который можно нести, не превышает некоторого фиксированного числа X. Таким образом, решение должно учитывать вес предметов, а также их стоимость. [44]
Метод грубой силы — это метод решения проблем, при котором систематически пробуются все возможные варианты, пока не будет найдено оптимальное решение. Этот подход может быть очень трудоемким, проверяя все возможные комбинации переменных. Он часто используется, когда другие методы недоступны или слишком сложны. Метод грубой силы может решать множество задач, включая поиск кратчайшего пути между двумя точками и взлом паролей.
Разделяй и властвуй
Алгоритм «разделяй и властвуй» многократно сводит задачу к одному или нескольким более мелким экземплярам самой себя (обычно рекурсивно ) до тех пор, пока экземпляры не станут достаточно малыми для легкого решения. Сортировка слиянием является примером «разделяй и властвуй», где неупорядоченный список можно разделить на сегменты, содержащие один элемент, и сортировка всего списка может быть получена путем слияния сегментов. Более простой вариант «разделяй и властвуй» называется алгоритмом «уменьшей и властвуй» , который решает один более мелкий экземпляр себя и использует решение для решения большей задачи. «Разделяй и властвуй» делит задачу на несколько подзадач, поэтому этап «завоевания» сложнее, чем алгоритмы «уменьшей и властвуй». [ требуется цитата ] Примером алгоритма «уменьшей и властвуй» является алгоритм бинарного поиска .
Такие алгоритмы делают некоторые выборы случайным образом (или псевдослучайно). Они находят приближенные решения, когда поиск точных решений может быть непрактичным (см. эвристический метод ниже). Для некоторых задач самые быстрые приближения должны включать некоторую случайность . [45] Могут ли рандомизированные алгоритмы с полиномиальной временной сложностью быть самыми быстрыми алгоритмами для некоторых задач — открытый вопрос, известный как проблема P против NP . Существует два больших класса таких алгоритмов:
Этот метод преобразует сложные проблемы в более известные проблемы, решаемые с помощью (надеюсь) асимптотически оптимальных алгоритмов. Цель состоит в том, чтобы найти алгоритм сокращения, сложность которого не доминируется полученными сокращенными алгоритмами. Например, один алгоритм выбора находит медиану несортированного списка, сначала сортируя список (дорогая часть), а затем вытаскивая средний элемент из отсортированного списка (дешевая часть). Этот метод также известен как «преобразуй и покори» .
При таком подходе несколько решений создаются постепенно и отбрасываются, когда становится ясно, что они не могут привести к полноценному полному решению.
Проблемы оптимизации
Для задач оптимизации существует более конкретная классификация алгоритмов; алгоритм для таких задач может относиться к одной или нескольким общим категориям, описанным выше, а также к одной из следующих:
При поиске оптимальных решений для линейной функции, связанной линейными ограничениями равенства и неравенства, ограничения могут быть использованы напрямую для получения оптимальных решений. Существуют алгоритмы, которые могут решить любую задачу в этой категории, например, популярный симплексный алгоритм . [46] Задачи, которые можно решить с помощью линейного программирования, включают задачу максимального потока для ориентированных графов. Если задача также требует, чтобы какие-либо из неизвестных были целыми числами , то она классифицируется в целочисленном программировании . Алгоритм линейного программирования может решить такую задачу, если можно доказать, что все ограничения для целочисленных значений являются поверхностными, т. е. решения в любом случае удовлетворяют этим ограничениям. В общем случае используется специализированный алгоритм или алгоритм, который находит приближенные решения, в зависимости от сложности задачи.
Когда задача показывает оптимальные подструктуры — то есть оптимальное решение может быть построено из оптимальных решений подзадач — и перекрывающиеся подзадачи , то есть одни и те же подзадачи используются для решения множества различных экземпляров задач, более быстрый подход, называемый динамическим программированием, позволяет избежать повторного вычисления решений. Например, алгоритм Флойда–Уоршелла , кратчайший путь между начальной и целевой вершиной во взвешенном графе может быть найден с помощью кратчайшего пути к цели из всех смежных вершин. Динамическое программирование и мемоизация идут рука об руку. В отличие от разделяй и властвуй, подзадачи динамического программирования часто перекрываются. Разница между динамическим программированием и простой рекурсией заключается в кэшировании или мемоизации рекурсивных вызовов. Когда подзадачи независимы и не повторяются, мемоизация не помогает; следовательно, динамическое программирование не применимо ко всем сложным задачам. Использование мемоизации динамическое программирование снижает сложность многих задач с экспоненциальной до полиномиальной.
Жадный метод
Жадные алгоритмы , подобно динамическому программированию, работают, исследуя подструктуры, в данном случае не проблемы, а заданного решения. Такие алгоритмы начинаются с некоторого решения и улучшают его, внося небольшие изменения. Для некоторых задач они всегда находят оптимальное решение, но для других они могут остановиться на локальных оптимумах . Наиболее популярное использование жадных алгоритмов — поиск минимальных остовных деревьев графов без отрицательных циклов. Дерево Хаффмана , Крускал , Прим , Соллин — это жадные алгоритмы, которые могут решить эту задачу оптимизации.
Эвристический метод
В задачах оптимизации эвристические алгоритмы находят решения, близкие к оптимальному решению, когда поиск оптимального решения нецелесообразен. Эти алгоритмы становятся все ближе и ближе к оптимальному решению по мере своего продвижения. В принципе, если они выполняются в течение бесконечного количества времени, они найдут оптимальное решение. В идеале они могут найти решение, очень близкое к оптимальному решению, за относительно короткое время. Эти алгоритмы включают локальный поиск , поиск с запретами , имитацию отжига и генетические алгоритмы . Некоторые из них, такие как имитация отжига, являются недетерминированными алгоритмами, в то время как другие, такие как поиск с запретами, являются детерминированными. Когда граница ошибки неоптимального решения известна, алгоритм далее классифицируется как алгоритм приближения .
Примеры
Один из самых простых алгоритмов находит наибольшее число в списке чисел случайного порядка. Для поиска решения требуется просмотреть каждое число в списке. Из этого следует простой алгоритм, который можно описать на простом английском языке как:
Общее описание:
Если набор чисел пуст, то наибольшего числа не существует.
Предположим, что первое число в наборе является наибольшим.
Для каждого оставшегося числа в наборе: если это число больше текущего наибольшего, оно становится новым наибольшим.
Если в наборе не осталось непроверенных чисел, то текущее наибольшее число считается наибольшим в наборе.
(Квази)формальное описание: Ниже приведено более формальное кодирование алгоритма в псевдокоде или пиджин-коде
, написанное прозой, но гораздо ближе к высокоуровневому языку компьютерной программы :
Алгоритм НаибольшееЧислоВходные данные
: список чисел 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 г.
^ Дэвид А. Гроссман, Офир Фридер, Информационный поиск: алгоритмы и эвристики , 2-е издание, 2004, ISBN 1402030045
^ ab «Любой классический математический алгоритм, например, можно описать конечным числом английских слов» (Роджерс 1987:2).
^ ab Хорошо определено относительно агента, который выполняет алгоритм: «Существует вычислительный агент, обычно человек, который может реагировать на инструкции и выполнять вычисления» (Роджерс 1987:2).
^ «алгоритм — это процедура вычисления функции (относительно некоторой выбранной нотации для целых чисел)... это ограничение (числовыми функциями) не приводит к потере общности» (Роджерс 1987:1).
^ «Алгоритм имеет ноль или более входных данных, т. е. величин , которые даны ему изначально, до начала работы алгоритма» (Кнут 1973:5).
^ «Процедура, которая обладает всеми характеристиками алгоритма, за исключением того, что она, возможно, лишена конечности, может быть названа «вычислительным методом » » (Кнут 1973:5).
^ «Алгоритм имеет один или несколько выходов, т. е. величин, которые имеют указанное отношение к входным данным» (Кнут 1973:5).
^ Является ли процесс со случайными внутренними процессами (не включая входные данные) алгоритмом или нет, является спорным. Роджерс полагает, что: «вычисление выполняется дискретным пошаговым образом, без использования непрерывных методов или аналоговых устройств... продолжается детерминированно, без обращения к случайным методам или устройствам, например, игральным костям» (Rogers 1987:2).
^ Блэр, Энн, Дугид, Пол, Гоинг, Аня-Сильвия и Графтон, Энтони. Информация: Исторический компаньон, Принстон: Princeton University Press, 2021. стр. 247
^ Стоун 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
^ Кригель, Ханс-Петер ; Шуберт, Эрих; Зимек, Артур (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.
Дин, Тим (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 есть книга по теме: Алгоритмы
В Викиверситете вы можете узнать больше и научить других алгоритмам на кафедре алгоритмики.
На Викискладе есть медиафайлы по теме «Алгоритмы» .