Семь лет — традиционный срок ученичества в средневековых ремесленных мастерских Англии. — Прим. перев.
Чиппендейл (Chippendale) Томас (1718–1779) — английский мебельный мастер. Сочетал функциональную целесообразность форм с изяществом линий. — Прим. перев.
Мы называем нашего читателя «студентом». Это, однако, не должно отпугнуть тех, кто не учится в соответствующем учебном заведении. Научиться программировать можно и в одиночку; желая вдохновить тех, кто вынужден осваивать предмет самостоятельно, мы предлагаем им для решения набор задач, достаточно близких к реальным. Учтите, однако, что осваивать предмет под руководством преподавателя все же неизмеримо легче.
Предлагаются такие общедоступные языки, как Фортран, Кобол, Алгол, язык ассемблера, APL, XPL, PL/I, Бейсик, Паскаль, Лисп, Снобол и др. Это не означает, что не подходит какой-нибудь менее известный или менее распространенный язык, тем более что в наших рекомендациях мы руководствовались собственными вкусами. В любом случае приветствуется использование языков и трансляторов более высокого уровня, типа WATFIV, PL/C или SPITBOL, требующих и более серьезного к себе отношения. Можно также использовать задачу для изучения нового языка («полное погружение» — метод тяжелый, но эффективный).
На русском языке вышли 3 тома (как, впрочем, и на английском). — Прим. перев.
Один из способов сокращения памяти, требуемой для запоминания позиций, состоит в том, чтобы хранить позицию в виде массива битов, отводя для каждой клетки один бит (а не слово памяти). Как это ни странно, такой способ позволяет также получить выигрыш во времени, если воспользоваться командами поразрядных логических операций над векторами битов, имеющихся в системах команд почти всех ЭВМ и в некоторых языках программирования высокого уровня (например, в PL/I). Если обозначить через р исходную позицию, через p1, p2, …, p8 — позиции, сдвинутые на одну клетку в направлении всех соседей клетки, и через r — новую позицию, то каждый бит r будет однозначно определяться битами с тем же номером в позициях p1, p2, …, p8, т. е. будет логической функцией от них. Всякую логическую функцию можно, как известно, записать с помощью элементарных логических операций: ∧ (логическое И), ∨ (логическое ИЛИ), ⊕ (сложение по модулю два) и ¬ (логическое отрицание). Задача состоит в том, чтобы выразить r через p1, p2, …, p8 экономно, с использованием возможно меньшего числа операций. Необходимое число операций удается уменьшить до 29 (и это, вероятно, не предел), что при размере машинного слова в 48 битов (над всеми битами слова логические операции выполняются параллельно) составляет чуть более половины логической операции на обработку одной ячейки. — Прим. перев.
Теперь это замечание имеет лишь исторический интерес. Разъяснение вы найдете в литературе к гл. 29.
Английское существительное format (формат) служит для обозначения размера, формы и общего оформления публикации. Фортран присвоил это слово для описания формы и структуры записей данных. Но для обозначения того процесса, которым управляет фортранная инструкция FORMAT, удобного глагола не существует. Поэтому, говоря о процессе оформления текста по заданному образцу или схеме, наряду с глаголом to edit (редактировать) в этой главе будем использовать глагол to format (форматировать). Следует ли это считать жаргоном или нормальным развитием английского языка — дело вкуса читателя. (Примерно так же обстоит дело с терминологией в русском языке. В скобках указаны термины, которые используются в переводе этого этюда. Спорным, конечно, является и слово «форматор» (formattor). — Перев.)
Выпускающий редактор этой книги утверждает, что процесс подготовки большинства изданий проходит отнюдь не так идиллически, как это здесь обрисовано. Хотя в издательстве «Прентис Холл» набор текста производится при помощи ЭВМ, все же большая часть работы по оформлению, размещению и расклейке материала еще делается вручную. В частности, наборщики требуют дополнительного вознаграждения за исправления вкравшихся в текст ошибок. Тем не менее ручной труд в печатном деле отходит в прошлое, а для полной победы автоматизации недостает, пожалуй, только устройства непосредственного ввода рукописного текста.
i — первая буква английского слова italics (курсив). — Прим. перев.
Тут автор неточен. Статистика М показывает, сколько соперников, считавшихся до турниров сильнейшими (имеющих меньшие номера), заняло в обеих классификациях одинаковые места (возможно, и не самые высокие). — Прим. перев.
Все права на изобретение деловой игры менеджмент принадлежат фирме Avalon Hill Company, 4517 Harford Road, Baltimore, MD, 21214, которая ее опубликовала. Мы слегка изменяли правила, чтобы этюд легче было программировать.
Профсоюз водителей грузовиков. — Прим. перев.
Инвестиционный фонд — тип финансового института — вкладывает в ценные бумаги денежный капитал, аккумулированный путем эмиссии собственных ценных бумаг. Прибыли фонда обусловлены разницей между полученными и выплаченными дивидендами и процентами. — Прим. перев.
Читатели, знакомые с вычислительными методами, должны были заметить, что приведенная формула соответствует решению уравнения относительно дохода методом Ньютона.
Журнал деловых кругов США — Прим. перев.
В лингвистике диграф — комбинация из двух букв, обозначающая один звук; аналогично, триграф — из трех букв, квадриграф — из четырех и т. д. — Прим. перев.
Попав в калах, камень уже никогда не покинет его: Кроме того, не существует циклических последовательностей ходов, приводящих к исходной позиции, поскольку любом ход либо помещает в калах хотя бы один камень, либо перемещает некоторые камки ближе к калаху. Если реализовать изменение, упомянутое в следующем абзаце, то любая игра должна заканчиваться в состоянии, когда все камни лежат в одном из двух калахов.
Перебор в ширину называют также полным перебором. — Прим. перев.
Достаточно проверить только непосредственный предшественник, при этом будут найдены все отсечения. — Прим. перев.
Это не совсем так. Число простых чисел среди первых n (при n → ∞) примерно равно n/ln n. Таким образом, отношение числа простых и составных чисел есть
— Прим. перев.
Напомним, что книга издана в 1978 г. — Прим. перев.
Дата в журнале представлена в последовательности месяц, число, год. — Прим. перев.
Дополнительную трудность вызывает использование традиционных английских мер. Однако сделано это умышленно, и вы должны выдавать результаты в тех же единицах. Если бы скорость измерялась в д/д, т. е. в дюймах в день, было бы еще хуже…
Напомним, что натуральное число — это неотрицательное целое число.
Файл ввода/вывода состоит из записей, которые могут быть разной длины. Каждое физическое устройство может накладывать свои ограничения на длину записи. Предполагается, что перед первой операцией ввода/вывода с данным файлом указатель текущей позиции в нем установлен на конец воображаемой нулевой записи. При выводе по мере надобности создаются новые записи.
−q нулей и d+q цифр по стандарту Фортрана и Фортрана-77. — Прим. перев.
Английское словосочетание to lose patience имеет два значения — «потерять терпение» и «проиграть пасьянс». — Прим. перев.
Эта грустная шутка основана на созвучии Las Vegas (Лас Вегас) и lost wages (потерянные зарплаты). — Прим. перев.
Фактически поиск максимального в столбце элемента М на шаге 3 алгоритма обращения есть одно из таких изменений. М называется ведущим элементом, а сама операция — выбором ведущего элемента; на самом деле необходимо лишь, чтобы М был ненулевым. Максимальный элемент используется, чтобы уменьшить арифметическую погрешность ЭВМ. При обращении матрицы Гильберта ведущим элементом всегда должен оказываться ; если же алгоритм выбирает в качестве ведущего элемент, лежащий ниже, то это означает, что погрешность уже очень велика.
Как здесь не отметить, что самую плодотворную идею по части быстрого умножения вы можете позаимствовать у кроликов. Их многочисленное потомство — тому порука.
Дадим небольшое пояснение к рисунку: long — длинный, stack — стек, control — управляющий pop … into — удалить вершину … и поместить в, abort — аварийное окончание. Остальные ключевые слова имеют тот же смысл, что в яэыке Паскаль. — Прим. перев.
В алгоритм, вероятно, необходимо внести следующие изменения:
a) на шаге 1 заменить max (m, 2n) на max (2m − 2n, 2n);
b) на шаге 4 заменить 23·2i на 23·2i−1.
Прежде чем приступать к программированию алгоритма Тоома—Кука или алгоритма деления, рекомендуем тщательно разобраться в них, ознакомившись с теорией, например по книге Кнута, неоднократно цитируемой здесь — Прим. перев.
На самом деле ai+1 = (ai/5²) · (2i − 1)/(2i + 1)). Чтобы не выполнять умножение, можно хранить кроме ai еще одно число bi, равное (21000 × 16)/52i−1. Тогда переход к следующему члену осуществляется по формулам: bi+1 = bi/5², ai+1 = bi+1/(2i + 1). — Прим. перев.
Эти алгоритмы для очень длинных чисел работают еще быстрее алгоритма Тоома—Кука, затрачивая на умножение n-разрядных чисел время, пропорциональное n log n log log n — Прим. перев.
В § 4.4 этой книги приведены алгоритмы перевода чисел в десятичную систему. — Прим. перев.
В журнале «Наука и жизнь» № 2, 1978, с. 150–151; № 8, 1978, с. 142—143, опубликован вариант этой игры под названием «Быки и коровы». — Прим. перев.
Здесь автор имеет в виду вариант той же игры, в котором вместо цифр используются фишки, окрашенные в шесть цветов. — Прим. перев.
В оригинале, разумеется, все рассуждения проводятся для английского текста. — Прим. перев.
В криптографии используются некоторые слова, которые люди непосвященные часто употребляют не совсем правильно. Шифрование — это способ засекречивания сообщения путем замены или перемешивания букв, кодирование же подразумевает замену целых слов или фраз, а не отдельных букв. Лица, владеющие шифром или кодом, шифруют или кодируют свои сообщения, а получатели сообщений дешифруют или декодируют их. Лица, пытающиеся узнать чужой секрет, расшифровывают сообщения; различие между этими глаголами соответствует различию между знанием секрета шифра и попыткой разгадать его. Тот, кто составляет секретные сообщения, занимается криптографией, или тайнописью, а тот, кто стремится прочитать чужое секретное сообщение, занимается анализом криптограмм (cryptanalysis). Применяемые для этого методы составляют предмет науки, которая по-английски называется cryptology.