Бёрд Р., Жемчужины проектирования алгоритмов. Функциональный подход. С примерами на языке Haskell
ДМК-Пресс, 2015 г., 978-5-94074-867-0, 978-5-97060-161-7
Наличие в интернет-магазинах
Описание книги
Купить эту книгу можно в интернет-магазинах
Скачать, но не бесплатно эту книгу можно в интернет-магазинах
Читать онлайн
Доступен для чтения фрагмент книги
Ключевые слова
Поделиться ссылкой на книгу
Дополнительно о книге
Как настоящие жемчужины вырастают из песчинок, раздражающих устриц, так и жемчужины программирования вырастают из реальных задач, мучающих программистов. Эти программы интересны, к тому же они учат важным программистским приёмам и фундаментальным принципам проектирования.
Мне кажется, что редакторы обратились именно ко мне, потому что я интересовался следующим подходом: я брал понятную, но неэффективную функциональную программу, выступавшую в роли спецификации к решаемой задаче, а затем посредством эквациональных рассуждений приходил к более эффективной версии. Одним из факторов, стимулирующих рост интереса к функциональным языкам в 90-е годы, было именно удобство применения эквациональных рассуждений. В самом деле, акроним в названии функционального языка GOFER, изобретённого Марком Джонсом (Mark Jones), отражает как раз эту идею. GOFER стал одним из языков, повлиявших на развитие языка Haskell, на котором основывается настоящая книга. Эквациональные рассуждения доминируют здесь над всем. Жемчужины проектирования алгоритмов: функциональный подход. За последние 20 лет в JFP и изредка на таких конференциях как International Conference of Functional Programming (ICFP) и Mathematics of Program Construction Conference (MPC) появилось около 80 жемчужин. Из них я написал примерно четверть, большая же часть написана другими. Темы этих жемчужин включают интересные выводы программ, новые структуры данных, а также маленькие, но элегантные встроенные в Haskell и ML предметно-ориентированные языки для конкретных приложений. Мне всегда были интересны алгоритмы и их проектирование. Отсюда название этой книги — Жемчужины проектирования алгоритмов: функциональный подход — вместо более общего Функциональные жемчужины. Многие, хотя и не все, жемчужины начинаются со спецификации на языке Haskell, а затем продолжаются выводом более эффективной реализации. При написании конкретно этих жемчужин мне хотелось выяснить, до какой степени проектирование алгоритма можно представить в виде традиционного в математике вычисления результата посредством применения общеизвестных принципов, теорем и законов. Хотя в математике вычисления обычно производятся для упрощения сложных выражений, в проектировании алгоритмов получается в точности наоборот: простые, но неэффективные программы преобразуются в более эффективные, но, возможно, неочевидные. Жемчужиной является не полученная в итоге программа, а скорее процесс её получения. Остальные жемчужины, в части из них совсем немного преобразований, посвящены попыткам дать простые объяснения некоторым интересным и довольно хитроумным алгоритмам. Объяснение идей, лежащих в основе алгоритма, при функциональном подходе оказывается гораздо проще, чем при императивном: составляющие алгоритм функции легче отделить, они коротки и отражают мощные вычислительные шаблоны. Жемчужины в этой книге, появлявшиеся прежде в JFP и других местах, были неоднократно отшлифованы. Собственно, многие не слишком сильно напоминают оригиналы. Даже при этом их несложно отшлифовать ещё лучше. Золотым стандартом красоты в математике считается книга Айгнера (Aigner) и Циглера (Ziegler) Proofs from The Book (третье издание, Springer, 2003), содержащая совершенные доказательства математических теорем. Я всегда рассматриваю эту книгу как идеал, к которому следует стремиться.
Примерно треть жемчужин новые. С некоторыми явно обозначенными исключениями жемчужины можно читать в любом порядке, хотя главы были упорядочены до некоторой степени по темам, таким как «разделяй и властвуй», жадные алгоритмы, полный перебор и т.п. В жемчужинах присутствует небольшое повторение материала, по большей части относящегося к свойствам используемых библиотечных функций или к более общим законам, таким как законы слияния для разнообразных свёрток. При необходимости читатель может обратиться к добавленному к книге короткому предметному указателю. Наконец, в этой книге собраны идеи многих людей. Некоторые жемчужины были изначально написаны в сотрудничестве с другими авторами. Я хотел бы поблагодарить Шэрон Кёртис (Sharon Curtis), Джереми Гиббонса (Jeremy Gibbons), Ральфа Хинзе (Ralf Hinze), Герэйнта Джонса (Geraint Jones) и Шин-Чень Му (Shin-Cheng Mu), моих соавторов, за щедрое разрешение переработать этот материал. Джереми Гиббонс прочитал окончательную версию черновика и сделал множество полезных предложений, направленных на улучшение изложения. Некоторые жемчужины досконально обсуждались на встречах исследовательской группы Algebra of Programming в Оксфорде. Хотя многие из недостатков и ошибок были исправлены, нет никаких сомнений в том, что при этом добавились новые. Помимо упомянутых ранее, я хотел бы выразить благодарность Стивену Дрейпу (Stephen Drape), Тому Харперу (Tom Harper), Дэниэлю Джеймсу (Daniel James), Джеффри Лейку (Jeffrey Lake), Менг Вонг (Meng Wang) и Николасу Ву (Nicholas Wu) за предложения по улучшению текста. Я также хотел бы поблагодарить Ламберта Мертенса (Lambert Meertens) и Уга де Мура (Oege de Moor) за плодотворное многолетнее сотрудничество. Наконец, я в долгу у Дэвида Транаха (David Tranah), моего редактора в издательстве Cambridge University Press, за содействие и поддержку, и в том числе за столь необходимые технические советы по подготовке окончательной версии.
Содержание книги
1 Наименьшее отсутствующее число
2 Превосходная задача
3 Улучшаем седловой поиск
4 Задача о выборке
5 Сортировка попарных сумм
6 Делаем сотню
7 Строим дерево минимальной высоты
8 Распутываем жадные алгоритмы
9 Поиск знаменитостей
10 Удаляем повторы
11 Вовсе не максимальная сумма сегмента
12 Ранжируем суффиксы
13 Преобразование Барроуза-Уилера
14 Последний хвост
15 Все общие префиксы
16 Алгоритм Бойера-Мура
17 Алгоритм Кнута- Морриса-Пратта
18 Планирование в "Час пик"
19 Простой алгоритм решения судоку
20 Задача "Обратного отсчёта"
21 Хиломорфизмы и нексусы
22 Три способа вычисления определителей
23 Внутри выпуклой оболочки
24 Рациональное арифметическое
кодирование
25 Целочисленное арифметическое
кодирование
26 Алгоритм Шора-Вейта
27 Упорядоченная вставка
28 Бесцикловые функциональные алгоритмы
29 Алгоритм Джонсона-Троттера
30 Прядение паутины для чайников
Предметный указатель
Об авторе
Последние поступления в рубрике "Тематика определяется"
Математика. Подготовка к ЕГЭ. Задачи с параметрами.10-11 классы
В предлагаемом пособии представлен обширный материал, посвященный двум заключительным и сложным темам ЕГЭ профильного уровня: задачам с параметрами и числам и их свойствам. На многочисленных примерах с подробными решениями и обоснованиями (как и требуется на экзамене) показаны различные методы и решения задач.... | |
План счетов бухгалтерского учета с последними изменениями
Читателю предлагается самая последняя редакция Плана счетов бухгалтерского учета финансово-хозяйственной деятельности организаций и инструкции по его применению с учетом последних приказов Минфина РФ. План счетов - это важнейший инструмент бухгалтерского учета, настольная книга для каждого практического бухгалтера.... | |
На ферме. Книжка с наклейками
Игры с наклейками - занятие не только интересное, но и полезное. С этой книгой малыш познакомится с различными видами транспорта, потренируется решать простые логические задачки и находить соответствия.... |
Если Вы задавались вопросами "где найти книгу в интернете?", "где купить книгу?" и "в каком книжном интернет-магазине нужная книга стоит дешевле?", то наш сайт именно для Вас. На сайте книжной поисковой системы Книгопоиск Вы можете узнать наличие книги Бёрд Р., Жемчужины проектирования алгоритмов. Функциональный подход. С примерами на языке Haskell в интернет-магазинах. Также Вы можете перейти на страницу понравившегося интернет-магазина и купить книгу на сайте магазина. Учтите, что стоимость товара и его наличие в нашей поисковой системе и на сайте интернет-магазина книг может отличаться, в виду задержки обновления информации.