AOP_Tom1 (1021736), страница 4
Текст из файла (страница 4)
Такой способ работы дал мне возможность сделать буквально тысячи улучшений; я добился того, о чем так долго мечтал. В этом новом издании я смог проверить каждое слово в тексте, стараясь сохранить юношеский задор моих первоначальных исследований и в то же время внести ббльшую зрелость суждений. Были добавлены десятки новых упражнений, а на десятки старых даны новые или улучшенные ответы.
Таким образом, работа над книгой Искусство программнрованпя продолжает- Ф ся. Именно поэтому некоторые части данной книги начинаются пиктограммой "В процессе построения" (это своеобразное извинение за то, что приведены не самые новые данные). Мои папки переполнены важными материалами, которые я планирую включить в окончательное, славное четвертое издание тома 1; оно выйдет, вероятно, через 15 лет.
Но сначала я должен закончить тома 4 и 5. Я хочу, чтобы они были опубликованы сразу же, как только будут ~отовы к печати. Ббльшая часть тяжелой работы по подготовке этого нового издания была выполнена Филлис Винклер (Рйу111э %шк)ег) и Сильвио Леви (511у1о Бету), которые профессионально набирали и редактировали текст второго издания, а также Джеффри Олдхэмом (1ег)геу 014)загп), который конвертировал почти все оригинальные иллюстрации в формат МЕТР)РОшТ.
Я исправил все ошибки, которые бдительные читатели (Бэрри) обнаружили во втором издании (а также ошибки, которые, увы, не заметил никто), и постарался избежать появления новых ошибок в новом материале. Тем не менее я допускаю, что некоторые огрехи все же остались, и хотел бы исправить их как можно скорее. Поэтому за каждую опечатку*, а также ошибку, относящуюся к сути излагаемого материала или к приведенным историческим сведениям, я охотно заплачу 82,56 тому, кто первым ее найдет. На %еЬ-странице, адрес которой приведен на обороте титульной страницы, содержится текущий список всех ошибок, о которых мне сообщнлие*.
Сгланфпрд, Кплифпрн ил Апрель 1УУ7 За последние днадцзть яет мир изменился. — ьидд гейтс (ва азгев) (тееб) " Имеется в виду оригинач настоящего издания, — Лром. рей. 'е Ошибки, известные н момене подгогоеки русского издания, были исправдекы. — Лрнм. ред. Процедура чтения книг этой серии 1. Начните читать настоящую процедуру, если вы этого еще не сделали. Продолжайте в тпочнпм соответствии с указанными шагами, (Общая форма этой процедуры и сопровождающей ее блок-схемы будет использоваться на протяжении всей книги.) 2. Прочтите примечания к упражнениям (с. 23-25). 3.
Установите Л равным 1, 4. Начните чтение главы Х. Не читайте эпиграфы, помещенные в ее начале. 5. Вам интересен предмет этой главы? Если да, перейдите к шагу 7; если нет, перейдите к шагу 6. 6. гУ ( 2? Если нет, перейдите к шагу 16; если да, то все-таки просмотрите главу. (В главах 1 и 2 содержится важный вводный материал, а также обзор основных методов программирования. Эти главы следует хотя бы просмотреть, чтобы ознакомиться с условными обозначениями и компьютером 811.) 7.
Начните чтение следующего раздела главы; но, если вы уже пошли до конца главы, перейдите к шагу 16. 8. Отмечен ли номер раздела символом "г"? Если да, то при первом чтении этот раздел можно пропустить (в нем рассматривается специальный вопрос, который интересен, но не имеет первостепенного значения).
Вернитесь к шагу 7. Я. Есть ли у вас наклонности к математике? Если математика для вас — китайская грамота, то перейдите к шагу 11; в противном случае перейдите к шагу 10. 10. Проверьте математические выкладки, выполненные в этом разделе (и сообщите автору о замеченных ошибках). Перейдите к шагу 12. 11. Если в текущем разделе содержится много математических выкладок, то лучше не читайте их.
Тем не менее вам следует ознакомиться с основными результатами раздела; они, как правило, либо приводятся в самом начале раздела, либо выделены курсивом в самом конце сложной части текста. 12. Выполните рекомендуемые упражнения к разделу в соответствии с указаниями, приведенными в примечаниях к упражнениям (которые вы прочитали на шаге 2). 13. Поработав над упражнениями в свое удовольствие, сравните полученные ответы с теми, которые приведены в соответствующем разделе в конце книги (если для этих задач даны ответы).
Прочтите также ответы к упражнениям, над которыми у вас не было времени поработать. (Заакечание. В большинстве случаев имеет смысл сначала прочесть ответ к упражнению и, а затем приступить к упражнению и+ 1, поэтому шаги 12 и 13 обычно выполняются одновременно.) 14.
Вы устали? Если нет, вернитесь к шагу 7. 15. Отправляйтесь спать. А когда проснетесь, вернитесь к шагу 7. 16. Увеличьте Х на 1. Если Х = 3, 5, 7, 9, П или 12, то возьмите следующий том этой серии книг. 17. Если Х меньше или равно 12, то вернитесь к шагу 4. 18.
Поздравляю! Теперь постарайтесь убедить друзей в том, что необходима приобрести экземпляр тома 1 и начать его читать. Сами же возвращайтесь к шагу 3. Горе тому, кто читает только одну книгу дгкОРГагк ГеРББРт (ББОЙБе неРББРт), эаси>а Ргииепгит, 1144 (1640) Единственный недостаток всех литературных произведений в том, что они слишком длинны. — БОБЕМДРГ (1ГДГ11ГЕМДггБГ1ЕЗ), РЕГ1ЕХГОПВ, Взз (174Е) Книги Панальньь Гениальна только жизнь. — тОьлде карлейль (тномдз сдньуг.е), эоигпаг (1взз) ПРИМЕЧАНИЯ К УПРАЖНЕНИЯМ Рейтина Обвлснение Чрезвычайно простое упражнение, па которое можно ответить сразу же, если прочитанный материал понят.
Упражнения подобного типа почти всегда можно решить "в уме". Простая задача, которая заставляет задуматься над прочитанным, но не представляет особых трудностей. На ее решение вы затратите не больше минуты; в процессе решения могут понадобиться карандаш и бумага. Средняя задача, которая позволяет проверить, понял ли читатель основ- ные положения изложенного материала. Чтобы получить исчерпываю- щий ответ, может понадобиться примерно М -20 минут.
Задача умеренной сложности. Для ее решения может понадобиться более двух часов (а если одновременно вы смотрите телевизор, то еще больше). 00 10 Упражнения, приведенные в этой серии книг, предназначены как для самостоятельной проработки, так и для семинарских занятий. Очень трудно и, наверное, просто невозможно выучить предмет, только читая теорию и не применяя ее для решения конкретных задач, которые заставляют задуматься о прочитанном, Более того, мы лучше всего заучиваем то, до чего дошли самостоятельно, своим умом. Поэтому упражнения занимают важное место в данном издании. Я приложил немало усилий, чтобы сделать их как можно более информативными, а также отобрать задачи, которые были бы не только поучительны, но и позволяли читателю получить удовольствие от их решения.
Во многих книгах простые упражнения даются вперемешку с исключительно сложными. Это не всегда удобно, так как читателю хочется знать заранее, сколько времени ему придется затратить на решение задач (иначе в лучшем случае он их только просмотрит). В качестве классического примера подобной ситуации можно привести книгу Ричарда Беллмана (Н1сЬагб Ве!1шап) Динамическое программирование (М.; Нзд-во иностр. лиг., 1960). Это очень важная, новаторская работа, но у нее есть один недостаток: в конце некоторых глав в разделе "Упражнения и научные проблемы" среди серьезных., еще нерешенных проблем, попадая>тся простейшие вопросы. Говорят, что кто-то однажды спросил д-ра Беллмана, как отличить упражнеяия от научных проблем, и он ответил: "Если вы можете решить задачу, значит, это упражнение; в противном случае это научная проблема". Совершенно очевидно, что в книге, подобной этой, должны быть приведены и сложные научные проблемы, и простейшие упражнения.
Поэтому, чтобы читатель не ломал голову, пытаясь отличить одно от другого, были введены рейтинги, которые опреде.иют степень сложности каждого упражнения. Эти рейтинги имеют следующее значение. Достаточно сложная или трудоемкая задача, которую вполне можно включить в план семинарских занятий. Предполагается, что студент должен справиться с Ней, затратив не слишком много времени, и решение будет нетривиальным. Научная проблема, которая (насколько известно автору в момент написания книги) пока еще не получила удовлетворительного решения, хотя найти его пытались очень многие.
Если вы нашли решение подобной проблемы, то опубликуйте его; более того, автор данной книги будет очень признателен, если ему сообщат решение как можно скорее (при условии, что оно правильно). Интерполируя по этой "логарифмической" шкале, можно понять, что означает любой промежуточный рейтинг. Например, рейтинг 1У говорит о том, что упражнение немного проще, чем задача средней сложности. Если задача с рейтингом 50 будет впоследствии решена каким-либо читателем, то в следующих изданиях данной книги и в списке ошибок, опубликованных в 1псегпег, оиа может иметь рейтинг 45 (адрес ЪЪео-страницы приводится на обороте титульной страницы). Остаток от деления рейтинга на 5 показывает, какой объем рутинной работы потребуется для решения данной задачи. Таким образом, для решения упражнения с рейтингом 2з' может потребоваться больше времени, чем для упражнения с рейтингом 05, но для последнего необходим более творческий подход.
Автор очень старался правильно присвоить рейтинги упражнениям, но тому, кто составляет задачи, трудно предвидеть, насколько сложными они окажутся для кого-то другого. К тому же одному человеку некая задача может показаться простой, а другому — сложной. Таким образом, определение рейтингов — дело достаточно субъективное и относительное. Я надекжгч что рейтинги помогут вам получить правильное представление о степени трудности задач, но нх следует воспринимать в качестве ориентира, а не в качестве абсолюта.
Эта книга написана для читателей с различным уровнем математической подготовки и научного кругозора, поэтому некоторые упражнения рассчитаны исключительно на тех, кто серьезно интересуется математикой или занимается ею профессионально. Если рейтингу предшествует буква М, значит, математические понятия и обоснования используются в упражнении в большей степени, чем это необходимо тому, кто интересуется в основном программированием алгоритмов. Ес:ш же упражнение отмечено буквами .НМ, то для его решении необходимо знание высшей математики в большем обьеме, чем дается в настоящей кинге.
Но пометка ЛМ совсем необязательно означает,что упражнение трудное. Перед некоторыми упражнениями стоит стрелка "ь", которая означает, что они особенно поучительны и нх очень рекомендуется выполнить. Само собой разумеется, никто не ожидает, что читатель (или студент) будет решать есе задачи, поэтому наиболее важные из них и бььчи выделены. Но это ни в коем случае не означает, что другие упражнения выполнять не стоит! Каждый читатель должен хотя бы попытаться решить все задачи, рейтинг которых меныпе или равен 10. Стрелки помогут выбрать задачи с более высокими рейтингами, которые следует решать в первую очередь. К большинству упражнений приведены ответы, помещенные в отдельном разделе в конце книги.