AOP_Tom1 (1021736), страница 2
Текст из файла (страница 2)
Надеемся, что читатель ие будет удпвлев, найдя ссылки иа главы 7, 8 и последую1пие ие вошедшие в предпащемые три тома главы. Мы вместе с автором надеемся, что очень скоро опи будут опубликованы и, безусловно, сразу же появятся в русском переводе в качестве продолжения этого издания. Следует также обратить внимание иа далеко ие всегда стандартные обозначения, которыми пользуется автор.
Так же, как и определеиия, эти обозначения могут появиться в 1-м томе, а вводиться во 2-и. Поэтому без указателя обозначений пользоваться киигой было бы чрезвычайно трудно. Хочу также обратить внимание иа запись [А1, где А — некоторое высказывание. Эта запись встречается в формулах, а ивогда и в тексте, и обозначает величииу, равную индикатору А. Профессор Ю. В. Козаченко ПРЕДИСЛОВИЕ Уважаемые читатели! Ны держите в руках книгу, издать которую вы пРосили нас в тысячах писем. нам пРишлось потРатить годы на то, чтобы самым тшатепьным образом проверить и перепроверить бесконечное множество РецЕптов и отобрать Дпя ваС самые лучшие, СамыЕ интЕРесные, самые совершенные. геперь без тени сомнения мы можем сказать, что если вы будете следовать инструкциям, то каждое блюдо будет получаться у вас таким же, как и у нас, даже если Раньше вы никогда не занимались приготовлением пиши.
— Поваренная книга Мак-Колла (19бэ) Процисс подготовки программ для цифрового компьютера — это очень увлекательное занятие. И дело не только в том, что оно оправдывает себя с экономической и научной точек зрении; оно может вызвать также эстетические переживания, подобные тем, которые испытывают творческие личности при написании музыки или стихов. Вы держите в руках первый том многотомного издания, цель которого — дать читателю разнообразные знания и умения, из которых и состоит ремесло программиста. Последующие главы не являются введением в компьютерное программирование; предполагается, что вы уже имеете некоторый опыт в этой области.
На самом деле предьявляемые к читателю требования очень просты; тем не менее начинающему программисту потребуются время и практика, чтобь1 понять, что собой представляет цифровой компьютер. Итак, читатель должен иметь а) некоторое представление о толи как работает цифровой компьютер с хранимой программой; при этом необязательно разбираться в электронике, главное— понимать, каким образом команды можно сохранять в памяти компьютера,. и затем последоиательно их выполнать; Ь) способность ставить задачу с помощью четких и определенных терминов, понятных компьютеру (у компьютеров нет разума, присущего человеку, поэтому они делают в точности то, что ям приказывают, не больше и не меньше; именно этот факт обычно труднее всего уяснить начинающиги пользователям); с) знание самых простых компьютерных методов, таких как организация циклов (повторное выполнение некоторого набора команд), а также использованне подпрограмм и переменных с индексами; Й) знание распространенных компьютерных терминов, например "память', "регистры", "биты", "плавающая точка", "переполнение", 'программное обеспечение"; большинство терминов, которые не определены в тексте, поясняются в алфавитном указателе в конце каждого тома.
Эти четыре условия, вероятно, можно объединить в одном требовании: читатель должен иметь опыт написания н отладки по меньшей мере четырех программ хотя бы для одного компьютера. Я старался писать эти книги так, чтобы они маглн служить нескольким различным целям. Во-первых, они представляют собой справочное пособие, в котором сосредоточены знания из нескольких важных областей науки. Во-вторых, они могут использоваться в качестве пособий для самообразования и учебников по программированию или информатяке для университетов. В связи с этим я включил в текст большое количество упражнений и предоставил ответы на большинство из ннх. Кроме того, я попытался сосредоточить внимание на фйктах, вместо того чтобы "лить воду" и заниматься общими рассуждениями.
Этот трехтомник предназначен для всех, кто серьезно интересуется компьютерами, а не только для профессионалов. В сущности, одна из моих главных целей состояла в том, чтобы сделать методы программирования более доступными для специалистов нз других областей. Как правило, эти специалисты получают большие преимущества, используя компьютеры, но не могут позволить себе тратить нремя на поиски необходимой информации, крупицы которой разбросаны по множеству технических журналов.
Тему этих книг можно сформулировать следующим образом: "Нечисленный анализ". Компьютеры обычно ассоциируются с решением численных задач, таких как нахождение корней уравнения, численное интерполирование, интегрирование и т. д. Но в этом трехтомнике подобные темы не рассматриваются (за исключением случаев, когда зто необходимо сделать по ходу изложения). Численное компьютерное программирование — необычайно интересная и бурно развивающаяся область; на эту тему написано очень много хороших книг.
Но с 60-х годов компьютеры все чаще н чаще применяются для решения проблем, в которых числа играют второстепенную роль. Теперь на первый план выходит способность компьютера принимать решения, а не просто выполнять арифметические операции. При решении нечисленных задач иногда требуется выполнять операции сложения и вычитания, но потребность в умножении н делении возникает довольно редко. Но, коне*шо, даже тот.
кто в основном занимается численным компьютерным программированием, только выиграет от изучения нечисленных методов, так как они лежат и в основе числовых программ. Результаты исследований в области нечисленного анализа разбросаны по многим техническим журналам. Моя цель состояла в том, чтобы язвлечь из этого огромного объема информации только фундаментальные методы, которые можно применять в разнотипных ситуациях программирования.
Я попытался обобщить выбранную информацию. чтобы получить то, что в большей или меньшей степени можно назвать "теорией', а также показать, как применять эту теорию при решении различных практических задач. Конечно, "нечнсленный анализ" — крайне неудачное название для данной области науки. Оно неудачно прежде всего потому, что содержит только отрицание другого понятия; гораздо лучше было бы выбрать более содержательный термин, не имеющий приставки "не".
Название "обработка информации" охватывает более широкую область, чем рассматриваемый здесь материал, а "методы программирования" — более узкую. Я считаю, что для темы, освещаемой в данных книгах, самым подходящим является название анализ алгоришмов, которое можно расшифровать как "теория свойств некоторых компьютерных алгоритмов''.
Полный набор книг, озаглавленный как Искусство программирования, имеет следующую основную структуру. Том 1. Основные алгоритмы Глава 1. Основные понятия Глава 2. Информационные структуры Том 2. Получнсленные алгоритмы Глава 3. Случайные числа Глава 4. Арифметика Том 3. Сортировка и поиск Глава 5. Сортировка Глава б. Поиск Том 4. Комбннаторные алгоритмы Глава 7. Комбииаторный поиск Глава 8. Рекурсия Том 5. Синтаксические алгорптмьг Глава 9. Лексикографический поиск Глава 10. Синтаксический анализ В томе 4 рассматривается очень большая тема, поэтому на самом деле он состоит из трех отдельных книг (томов 4А, 4В н 4С).
Планируется также выпуск двух дополнительных томов по более специализированным темам: том б, Теория языков (глава 11), и том 7, Компиляторы (глава 12). 1 Я приступил к этой работе в 1962 году с намерением написать единственную книгу, содержащую все перечисленные главы, но вскоре понял, что необходимо глубоко рассматривать выбранные темы, а не просто "скользить по поверхности". В результате получился текст такого объема, что материала каждой главы оказалось более чем достаточно для изучения в течение одного университетского семестра. И стало ясно, что необходимо разбить материал на несколько отдельных томов.
Я знаю, что книга, содержащая только одну-две главы, выглядит довольно странно, но решил сохранить первоначальную нумерацию глав, чтобы упростить перекрестные ссылки. Планируется выпуск сокращенного варианта томов 1-5, который будет служить более общим справочником и/или учебником для студентов; в нем будет содержаться основная часть материала данных томов, а более специальная информация будет опущена. В сокращенном издании будет сохранена такая же нумерация глав, как и в полном. Том 1 можно рассматривать как "пересечение" полного набора глав, в том смысле, что он содержит основныс сведения, которые используются во всех остальных книгах. С другой стороны, тома 2 — 5 можно читать независимо один от другого. Том 1 — это не только справочник, который необходимо использовать как пособие прн чтении других томов: он может служить также университетским учебником либо пособием для самообразования по теме сшруккчуры данных (основное внимание следует уделить главе 2) или дискрешная иагпема~вика (основное внимание следует уделить разделам 1.1, 1.2, 1.3,3 и 2.3.4), или программирование на языке машинных команд (основное внимание следует уделить разделам 1.3 н 1.4).
Эти главы написаны с другой точки зрения, чем та, которая используется в самых современных книгах по программированию, т. е. я не пытался научить читателя пользоваться чужим программным обеспечением. Вместо этого я стремился научить читателя писать собственные программы более высокого качества. Моя первоначальная цель заключалась в том, чтобы познакомить читателей с передовыми научными исследованиями в каждой из рассматриваемых областей знания.