Система Orphus

Алгоритмические трюки для программистов

Автор: Генри Уоррен, мл.
Издательство: "Вильямс", 2003
288 страниц

Материал предоставил: Валерий Лаптев
Найти в магазинах
Купить в My-Shop.ru (283 руб.)

Аннотация

Содержание
Комментарии

Аннотация

В этой книге слову "хакер" возвращено его первозданное значение - человека увлеченного, талантливого программиста, способного к созданию чрезвычайно эффективного и элегантного кода. В книге воплощен сорокалетний стаж ее автора в области разработки компиляторов и архитектуры компьютеров. Здесь вы найдете множество приемов для работы с отдельными битами, байтами, вычисления различных целочисленных функций; большей части материала сопутствует строгое математическое обоснование. Каким бы не был ваш профессионализм, вы обязательно найдете в этой книге новое для себя. Кроме того, книга заставит вас посмотреть на уже знакомые вещи с новой стороны. Не в меньшей степени эта книга пригодится и начинающему программисту, который может просто воспользоваться готовыми советами из книги, применяя их в своей повседневной практике.

Содержание

Вступление

Благодарности

ГЛАВА 1. Введение

ГЛАВА 2. Основы

ГЛАВА 3. Округление к степени

ГЛАВА 4. Арифметические границы

ГЛАВА 5. Подсчет битов

ГЛАВА 6. Поиск в слове

ГЛАВА 7. Перестановка битов и байтов

ГЛАВА 8. Умножение

ГЛАВА 9. Целочисленное деление

ГЛАВА 10. Целое деление на константы

ГЛАВА 11. Некоторые элементарные функции

ГЛАВА 12. Системы счисления с необычными основаниями

ГЛАВА 13. Код Грея

ГЛАВА 14. Кривая Гильберта

ГЛАВА 15. Числа с плавающей точкой

ГЛАВА 16. Формулы для простых чисел

ПРИЛОЖЕНИЕ А. Арифметические таблицы для 4-битовой машины

ПРИЛОЖЕНИЕ Б. Метод Ньютона

Источники информации

Предметный указатель

Комментарии

Лаптев Валерий

Знаете ли Вы Первый закон творческого программирования? Он используется в качестве эпиграфа в книге Уоррена и звучит так:

	Cтоимость сопровождения программного обеспечения пропорциональна 
	квадрату творческих способностей программиста. 
							 Роберт Д. Блисc
Это, конечно, шутка, но в ней, как всегда, есть изрядная доля правды. Я эту книжку мог бы купить даже за один эпиграф! Но Вы - это не я, поэтому расскажу, о чем в книге написано. Уже по оглавлению можно судить о содержании. Множество изящнейших решений задач, которые время от времени появляются в форуме "Этюды для программистов". Уже на первой странице первой главы есть несколько простых формул. Одна из них

x & (x-1)

Как вы думаете, для чего она может пригодиться? Оказывается, так можно обнулить крайний справа единичный бит. И таких формул - море! Но книжка ценна не только простыми формулами. Здесь огромное количество алгоритмов. Например, в главе 11 приводится аппаратный алгоритм вычисления целочисленного квадратного корня, в котором используются только операции вычитания, сдвига вправо, и логического или (- >> | в нотации С). Считать все алгоритмы я не стал, но то, что их больше сотни - это факт! Алгоритмы написаны в одной из двух нотаций: либо на псевдо-С (очень похож на настоящий), либо в кодах гипотетической трехадресной RISC-машины, которая (ИМХО) сильно похожа на кнутовскую MMIX. В первой главе Уоррен приводит полное ее описание. В общем, понятно написано.

В книжке СОВСЕМ нет никакой воды - сплошная информация. Читать ее в автобусе или в метро - трудно. Если хочешь понять, почему работает, то надо вдумчиво, за столом разбирать много примеров. Изучение (не чтение, нет) этой книги существенно повысит понимание встроенных типов данных (особенно целых) и многих нюансов работы процессора. Для большинства алгоритмов приводится математическое доказательство корректности - для некоторых это может быть интересно. Книгу можно использовать и при разработке компилятора - тут прямо приводятся оптимизационные формулы и алгоритмы. Например, на странице 206 приводится алгоритм вычисления 2^n в компиляторе IBM XL Fortran. Полезна книга окажется и для разработчиков систем реального времени, где критично время вычислений. Да и в обычных приложениях найдется, где можно применить что-нибудь из этой книжки.

И напоследок. В 80-е годы в сборнике Уэзерелла "Этюды для программистов" была опубликована наверное самая знаменитая задача (по крайней мере, в России): написать программу, которая выводит свой собственный текст. Файлы использовать нельзя. Автор приводит САМУЮ КОРОТКУЮ программу на С, из известных ему, содержащую всего 64 символа. Написана Владом Таировым и Рашидом Фахреевым.

main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);}

Печатает саму себя - проверено в Borland C++ 3.1 в режиме трансляции С-программ без отладочной информации для UNIX V. Конечно, с высоты современных стандартов это уродец, но в данном случае это неважно. Книга содержит и учит находить такие нестандартные решения. Почитайте - не пожалеете.