Искусство программирования компьютеров ( TAOCP ) — это всеобъемлющая монография , написанная ученым-компьютерщиком Дональдом Кнутом , в которой излагаются алгоритмы программирования и их анализ . Тома 1–5 предназначены для представления центрального ядра программирования для последовательных машин.
Когда Кнут начал проект в 1962 году, он изначально задумывал его как одну книгу с двенадцатью главами. Первые три тома того, что тогда должно было стать семитомным изданием, были опубликованы в 1968, 1969 и 1973 годах. Работа над томом 4 началась в 1973 году, но была приостановлена в 1977 году для работы над набором, вызванной вторым изданием тома 2. Написание окончательного экземпляра тома 4A началось от руки в 2001 году, а первый онлайн-префасцикл, 2A, появился позже в 2001 году. [1] Первая опубликованная часть тома 4 появилась в мягкой обложке как Fascicle 2 в 2005 году. Том 4A в твердом переплете, объединяющий том 4, Fascicles 0–4, был опубликован в 2011 году. Том 4, Fascicle 6 («Satisfiability») был выпущен в декабре 2015 года; Том 4, выпуск 5 («Математические предварительные сведения; Возврат к началу; Танцующие ссылки») был выпущен в ноябре 2019 года.
Том 4B состоит из материала, разработанного на основе выпусков 5 и 6. [2] Рукопись была отправлена издателю 1 августа 2022 года, а том был опубликован в сентябре 2022 года. [3]
Выпуск 7, запланированный для тома 4C, был темой выступления Кнута 3 августа 2022 года. [4]
История
Выиграв стипендию Westinghouse Talent Search , Кнут поступил в Технологический институт Кейса (ныне Университет Кейса Вестерн Резерв ), где его успеваемость была настолько выдающейся, что факультет проголосовал за присуждение ему степени магистра наук по завершении им степени бакалавра . Во время летних каникул Кнут был нанят корпорацией Burroughs для написания компиляторов , зарабатывая за летние месяцы больше, чем профессора зарабатывали за целый год. [5] Такие подвиги сделали Кнута темой для обсуждения на математическом факультете, в который входил Ричард С. Варга .
В январе 1962 года, когда он был аспирантом на математическом факультете Калтеха, Эддисон-Уэсли обратился к Кнуту с просьбой написать книгу о проектировании компиляторов, и он предложил более широкий охват. В тот же день он составил список из двенадцати названий глав. Летом 1962 года он работал над компилятором FORTRAN для UNIVAC , считая, что он «продал душу дьяволу», чтобы разработать компилятор FORTRAN [6] : 15 после разработок ALGOL с Burroughs. Он оставался консультантом Burroughs в период с 1960 по 1968 год, пока писал том 1 «Фундаментальные алгоритмы».
В это время он также разработал математический анализ линейного зондирования , что убедило его представить материал с количественным подходом. Получив докторскую степень в июне 1963 года, он начал работать над своей рукописью, первый черновик которой он закончил в июне 1965 года, в3000 рукописных страниц. [7] Он предполагал, что около пяти рукописных страниц можно перевести в одну печатную страницу, но его издатель вместо этого сказал, что около 1+1 ⁄ 2 рукописных страниц переведены в одну печатную страницу. Это означало, что у него было примерно2000 печатных страниц материала, что почти соответствует объему первых трех опубликованных томов.
На написание первого тома «Искусства программирования» — «Фундаментальные алгоритмы» ушло пять лет с 1963 по 1968 год, в течение которых он работал и в Калтехе, и в Берроузе.
В предисловии он благодарит сначала свою жену Джилл, затем Берроуза за использование компьютеров B220 и B5500 при тестировании большинства программ, а также Калифорнийский технологический институт, Национальный научный фонд и Управление военно-морских исследований. [8] : xii
Раздел 2.5 «Основных алгоритмов» посвящен динамическому распределению памяти . Части этого используются в подходе Берроуза к управлению памятью. Кнут утверждает, что «метод «граничной метки», представленный в разделе 2.5, был разработан автором в 1962 году для использования в управляющей программе для компьютера B5000». [8] : 460
Кнут получил поддержку от Ричарда С. Варги, который был научным консультантом издателя. Варга навещал Ольгу Таусски-Тодд и Джона Тодда в Калтехе . С восторженным одобрением Варги издатель принял расширенные планы Кнута. В расширенной версии книга будет опубликована в семи томах, каждый из которых будет содержать всего одну или две главы. [9] Из-за роста главы 7, которая составляла менее 100 страниц рукописи 1965 года, согласно Тому 4A, стр. vi, план Тома 4 с тех пор расширился и включил Тома 4A, 4B, 4C, 4D и, возможно, больше.
В 1976 году Кнут подготовил второе издание второго тома, требуя, чтобы его снова набрали , но стиль шрифта, использованный в первом издании (называемый горячим шрифтом ), больше не был доступен. В 1977 году он решил потратить некоторое время на создание чего-то более подходящего. Восемь лет спустя он вернулся с T E X , который в настоящее время используется для всех томов.
Еще одной характерной чертой томов является различная сложность упражнений, включая числовую оценку от 0 до 50, где 0 — незначительный вопрос, а 50 — открытый вопрос в современных исследованиях.
Вознаграждение за обнаружение ошибок
Предложение так называемого чека вознаграждения Кнута на сумму «один шестнадцатеричный доллар» (100 шестнадцатеричных центов по основанию 16 в десятичной системе счисления составляют 2,56 доллара) за любые найденные ошибки, а также исправление этих ошибок в последующих изданиях способствовали тому, что работа остается безупречной и по-прежнему авторитетной даже спустя долгое время после ее первой публикации.
Язык ассемблера в книге
Все примеры в книгах используют гипотетический язык под названием « язык ассемблера MIX » (MIXAL), который работает на «мифическом компьютере под названием MIX». В настоящее время [ когда? ] компьютер MIX заменяется компьютером MMIX , который является версией RISC . Преобразование из MIX в MMIX было большим текущим проектом, для которого Кнут привлекал добровольцев для помощи. Существует программное обеспечение, такое как GNU MDK [10], для обеспечения эмуляции архитектуры MIX. Кнут считает использование языка ассемблера необходимым для оценки скорости и использования памяти алгоритмами.
MIX был очень похож на любой компьютер, существовавший в то время, но красивее. Название «MIX» — это 1009 римскими цифрами, и это дается формулой, включающей серийные номера нескольких компьютеров того времени: (360 + 650 + 709 + U3 + SS80 + 1107 + 1604 + G2- + B220 + S2000 + 920 + 601 + H800 + PDP-4 + 11)/16 = 1009 или MIX. Название MMIX — это 2009 римскими цифрами, и Кнут утверждает, что MMIX даже красивее, чем MIX.
Критический ответ
Кнут был награжден премией Тьюринга 1974 года «за его значительный вклад в анализ алгоритмов […], и в частности за его вклад в «искусство компьютерного программирования» посредством его известных книг в непрерывной серии под этим названием». [11] American Scientist включил эту работу в число «100 или около того книг, которые сформировали век науки», имея в виду двадцатый век. [12] На обложках третьего издания тома 1 цитируются слова Билла Гейтса : «Если вы думаете, что вы действительно хороший программист… прочитайте « Искусство компьютерного программирования » (Кнута) … Вам определенно следует прислать мне резюме, если вы сможете прочитать его целиком». [13] New York Times назвала его «определяющим трактатом профессии». [14]
7.2.2.9. Оценка затрат на возврат (глава 6 «Избранных статей по анализу алгоритмов» и выпуск 5, стр. 44–47, под заголовком «Оценки времени выполнения»)
7.2.3. Генерация неэквивалентных шаблонов (включая обсуждение теоремы перечисления Полиа ) (см. «Методы отбрасывания изоморфов», глава 4 «Алгоритмов классификации для кодов и конструкций» Каски и Эстергарда)
Ниже приведены текущие издания в порядке возрастания номера тома:
Искусство программирования, тома 1-4B, коробочный комплект . (Рединг, Массачусетс: Addison-Wesley, 2023), 3904 стр. ISBN 978-0-13-793510-9 , 0-13-793510-2
Том 1: Фундаментальные алгоритмы . Третье издание (Рединг, Массачусетс: Addison-Wesley, 1997), xx+650 стр. ISBN 978-0-201-89683-1 , 0-201-89683-4 . Опечатки: [1] (2011-01-08), [2] (2022, 49-е издание ). Дополнения: [3] (2011).
Том 2: Получисленные алгоритмы . Третье издание (Рединг, Массачусетс: Addison-Wesley, 1997), xiv+762 стр. ISBN 978-0-201-89684-8 , 0-201-89684-2 . Опечатки: [4] (2011-01-08), [5] (2022, 45-е издание). Дополнения: [6] (2011).
Том 3: Сортировка и поиск . Второе издание (Reading, Massachusetts: Addison-Wesley, 1998), xiv+780 стр.+раскладушка. ISBN 978-0-201-89685-5 , 0-201-89685-0 . Опечатки: [7] (2011-01-08), [8] (2022, 45-е издание). Дополнения: [9] (2011).
Том 4A: Комбинаторные алгоритмы, часть 1. Первое издание (Аппер Сэддл Ривер, Нью-Джерси: Addison-Wesley, 2011), xv+883 стр. ISBN 978-0-201-03804-0 , 0-201-03804-8 . Опечатки: [10] (2011), [11] (2022, 22-е издание).
Том 4B: Комбинаторные алгоритмы, часть 2. Первое издание (Аппер Сэддл Ривер, Нью-Джерси: Addison-Wesley, 2023), xviii+714 стр. ISBN 978-0-201-03806-4 , 0-201-03806-4 . Опечатки: [12] (2023, 1-е издание).
Том 1, выпуск 1: MMIX – RISC-компьютер для нового тысячелетия . (Addison-Wesley, 2005-02-14), 144 стр. ISBN 0-201-85392-2 . Опечатки: [13] (2024-05-14) (будут в четвертом издании тома 1)
Предыдущие выпуски
Полные тома
Эти тома были заменены более новыми изданиями и отсортированы по дате.
Том 1: Фундаментальные алгоритмы . Первое издание, 1968, xxi+634pp, ISBN 0-201-03801-3 . [18]
Том 2: Получисленные алгоритмы . Первое издание, 1969, xi+624pp, ISBN 0-201-03802-1 . [18]
Том 3: Сортировка и поиск . Первое издание, 1973, xi+723pp+раскладушка, ISBN 0-201-03803-X . Опечатки: [14].
Том 1: Фундаментальные алгоритмы . Второе издание, 1973, xxi+634pp, ISBN 0-201-03809-9 . Опечатки: [15].
Том 2: Получисловые алгоритмы . Второе издание, 1981 г., xiii+ 688 стр., ISBN 0-201-03822-6 . Ошибки: [16].
Искусство программирования, тома 1-3, коробочный комплект . Второе издание (Рединг, Массачусетс: Addison-Wesley, 1998), стр. ISBN 978-0-201-48541-7 , 0-201-48541-9
Искусство программирования, тома 1-4А, коробочный комплект . Третье издание (Рединг, Массачусетс: Addison-Wesley, 2011), 3168 стр. ISBN 978-0-321-75104-1 , 0-321-75104-3
Фасциклы
Том 4, выпуски 0–4 были пересмотрены и опубликованы как том 4А.
Том 4, выпуск 0: Введение в комбинаторные алгоритмы и булевы функции . (Addison-Wesley Professional, 28.04.2008) vi+240pp, ISBN 0-321-53496-4 . Опечатки: [17] (01.01.2011).
Том 4, выпуск 1: Побитовые приемы и методы; Диаграммы двоичных решений . (Addison-Wesley Professional, 2009-03-27) viii+260pp, ISBN 0-321-58050-8 . Опечатки: [18] (2011-01-01).
Том 4, выпуск 2: Генерация всех кортежей и перестановок . (Addison-Wesley, 2005-02-14) v+127pp, ISBN 0-201-85393-0 . Опечатки: [19] (2011-01-01).
Том 4, выпуск 3: Генерация всех комбинаций и разделов . (Addison-Wesley, 2005-07-26) vi+150pp, ISBN 0-201-85394-9 . Опечатки: [20] (2011-01-01).
Том 4, выпуск 4: Генерация всех деревьев; История комбинаторной генерации . (Addison-Wesley, 2006-02-06) vi+120pp, ISBN 0-321-33570-8 . Опечатки: [21] (2011-01-01).
Том 4, разделы 5–6 были переработаны и опубликованы как том 4B.
Том 4, выпуск 5: Математические предварительные сведения Redux; Возврат; Танцующие ссылки . (Addison-Wesley, 2019-11-22) xiii+382pp, ISBN 978-0-13-467179-6 . Опечатки: [22] (2020-03-27)
Том 4, выпуск 6: Выполнимость . (Addison-Wesley, 2015-12-08) xiii+310pp, ISBN 978-0-13-439760-3 . Опечатки: [23] (2020-03-26)
Префасцикулы
Том 1
Предыстория 1 была пересмотрена и опубликована как Том 1, тема 1.
^ "GNU MDK - Проект GNU - Фонд свободного программного обеспечения". www.gnu.org . Получено 2022-10-23 .
^ "Дональд Э. Кнут – Лауреат премии имени А. М. Тьюринга". А. М. Тьюринг . Получено 25.01.2017 .
^ Моррисон, Филип ; Моррисон, Филис (ноябрь–декабрь 1999 г.). «100 or so a Century of Science Books» (около 100 книг, которые сформировали век науки). American Scientist . 87 (6). Sigma Xi, The Scientific Research Society (Научно-исследовательское общество). Архивировано из оригинала 20-08-2008 . Получено 11-01-2008 .
^ Вайнбергер, Мэтт. «Билл Гейтс однажды сказал: «Обязательно пришлите мне резюме», если закончите эту чертовски сложную книгу». Business Insider . Получено 13 июня 2016 г.
^ Лор, Стив (2001-12-17). "Фрэнсис Э. Холбертон, 84, ранний программист". The New York Times . Получено 2010-05-17 .
^ Д'Агостино, Сьюзен (16.04.2020). «Ученый-компьютерщик, который не может перестать рассказывать истории». Журнал Quanta . Получено 26.06.2023 . Сейчас ему 82 года, и он усердно работает над частью B четвертого тома и ожидает, что книга будет иметь по крайней мере части с A по F.
^ «TAOCP – Планы на будущее».
^ ab "TAOCP – Брошюра" (PDF) .
^ ab Wells, Mark B. (1973). "Обзор: Искусство программирования, том 1. Фундаментальные алгоритмы и том 2. Получисленные алгоритмы Дональда Э. Кнута" (PDF) . Бюллетень Американского математического общества . 79 (3): 501–509. doi : 10.1090/s0002-9904-1973-13173-8 .
Источники
Слейтер, Роберт (1987). Портреты из кремния. МТИ Пресс. ISBN 0-262-19262-4.
Шаша, Деннис ; Лазер, Кэти (1995). Вне их рассудка: Жизни и открытия 15 великих ученых-компьютерщиков . Коперник. ISBN 0-387-97992-1.
Внешние ссылки
Обзор тем (личная домашняя страница Кнута)
Анонс первого тома «Искусства программирования»
Устное интервью с Дональдом Э. Кнутом в Институте Чарльза Бэббиджа , Университет Миннесоты, Миннеаполис, 2001. Кнут обсуждает патентование программного обеспечения, структурное программирование , сотрудничество и свою разработку TeX . Устная история обсуждает написание «Искусства компьютерного программирования» .
«Роберт У. Флойд, в память о нем», Дональд Э. Кнут, 2003 г. (о влиянии Боба Флойда )
TAoCP и его влияние на компьютерную науку (Softpanorama)