От математики к обобщенному программированию
Покупка
Тематика:
Программирование и алгоритмизация
Издательство:
ДМК Пресс
Перевод:
Слинкин Алексей Александрович
Год издания: 2016
Кол-во страниц: 264
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-97060-379-6
Артикул: 651161.02.99
К покупке доступен более свежий выпуск
Перейти
В этой основательной и вместе с тем доступной книге авторы объясняют принципы обобщенного программирования и стоящее за ними понятие математической абстракции. Любой достаточно квалифицированный программист, умеющий логически мыслить, уже обладает достаточными знаниями для прочтения этой книги. Авторы на удивление доходчиво сообщают необходимые сведения из общей алгебры и теории чисел. Они объясняют, какие проблемы должны были разрешить математики, и показывают, как найденные ими решения переводятся на язык обобщенного программирования и позволяют создать эффективный и элегантный код. Читая эту книгу, вы освоите мыслительный процесс, необходимый для правильного программирования, и научитесь обобщать найденные для частного алгоритмы с целью расширить область их полезного применения без потери эффективности. Вы также постигнете, в чем состоит ценность математики для программирования, — и это понимание пригодится вне зависимости от того, на каком языке вы пишете и какую парадигму применяете.
Тематика:
ББК:
УДК:
- 004: Информационные технологии. Вычислительная техника...
- 519: Комбинатор. анализ. Теория графов. Теория вер. и мат. стат. Вычисл. мат., числ. анализ. Мат. кибер..
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Интернет-магазин: www.dmkpress.com Книга - почтой: orders@alians-kniga.ru Оптовая продажа: “Альянс-книга” Тел.: (499)782-3889 books@alians-kniga.ru Александр Степанов Даниэл Роуз От математики к обобщенному программированию В этой основательной и вместе с тем доступной книге авторы объясняют принципы обобщенного программирования и стоящее за ними понятие математической абстракции. Любой квалифицированный программист, умеющий логически мыслить, уже обладает достаточными знаниями для ее прочтения. Авторы на удивление доходчиво сообщают необходимые сведения из общей алгебры и теории чисел. Они объясняют какие проблемы должны были разрешить математики, и показывают, как найденные ими решения переводятся на язык обобщенного программирования и позволяют создать эффективный и элегантный код. Читая эту книгу, вы освоите мыслительный процесс, необходимый для правильного программирования, и научитесь обобщать найденные для частной задачи алгоритмы с целью расширить область их полезного применения без потери эффективности. Вы также постигнете, в чем состоит ценность математики для программирования, — и это понимание пригодится вне зависимости от того, на каком языке вы пишете и какую парадигму применяете. 9 785970 603796 ISBN 978-5-97060-379-6 Александр А. Степанов занимается программированием с 1972 года, сначала в Советском Союзе, а после эмиграции в 1977 году, в США. Он принимал участие в программировании операционных систем, инструментальных средств, компиляторов и библиотек. В работе по основаниям программирования ему оказывали поддержку Политехнический университет, компании General Electric, Bell Labs, HP, SGI, Adobe, и — с 2009 года по сей день — A9.com, дочерняя компания Amazon, специализирующаяся на технологиях поиска. В 1995 году журнал «Dr. Dobb’s Journal» присудил ему премию «За выдающиеся заслуги в программировании» за проектирование стандартной библиотеки шаблонов языка C++ (Standard Template Library). Дэниэл Э. Роуз — ученый-исследователь, занимал руководящие должности в компаниях Apple, AltaVista, Xigo, Yahoo и A9.com. Круг его научных интересов охватывает технологии поиска, от низкоуровневых алгоритмов сжатия индекса до вопросов взаимодействия машины и человека в процессе поиска в веб. Роуз руководил в компании Apple группой, разработавшей систему локального поиска для компьютера Macintosh. Он обладатель докторской степени по когнитивистике и информатике, присужденной Калифорнийским университетом в Сан-Диего, а также степени бакалавра по философии, присужденной Гарвардским университетом. КРАТКОЕ СОДЕРЖАНИЕ КНИГИ: • античные парадоксы, красивые теоремы, единство и противоположность непрерывного и дискретного; • простой алгоритм нахождения наибольшего общего делителя (НОД) и построенные на его базе современные абстракции; • действенные математические подходы к абстрагированию; • общая алгебра как источник идей обобщенного программирования; • аксиомы, доказательства, теории и модели: применение математических методов для организации знаний об алгоритмах и структурах данных; • удивительные тонкости, скрывающиеся в простых программистских задачах, и какие уроки можно из них извлечь; • как теоретические знания помогают практической реализации. От математики к обобщенному программированию
От математики к обобщенному программированию Александр А. Степанов, Дэниэл Э. Роуз
From Mathematics to Generic Programming Alexander A. Stepanov, Daniel E. Rose Upper Saddle River, NJ • Boston • Indianapolis • San Francisco New York • Toronto • Montreal • London • Munich • Paris • Madrid Capetown • Sydney • Tokyo • Singapore • Mexico City
От математики к обобщенному программированию Москва, 2016 Александр А. Степанов, Дэниэл Э. Роуз
УДК 511+519.6 ББК 22.13+22.18+22.19 С79 Cтепанов Александр А., Роуз Дэниэл Э. С79 От математики к обобщенному программированию / пер. с англ. А. А. Слинкина. – М.: ДМК Пресс, 2016. – 264 с.: ил. ISBN 978-5-97060-379-6 В этой основательной и вместе с тем доступной книге авторы объясняют принципы обобщенного программирования и стоящее за ними понятие математической абстракции. Любой достаточно квалифицированный программист, умеющий логически мыслить, уже обладает достаточными знаниями для прочтения этой книги. Авторы на удивление доходчиво сообщают необходимые сведения из общей алгебры и теории чисел. Они объясняют, какие проблемы должны были разрешить математики, и показывают, как найденные ими решения переводятся на язык обобщенного программирования и позволяют создать эффективный и элегантный код. Читая эту книгу, вы освоите мыслительный процесс, необходимый для правильного программирования, и научитесь обобщать найденные для частного алгоритмы с целью расширить область их полезного применения без потери эффективности. Вы также постигнете, в чем состоит ценность математики для программирования, — и это понимание пригодится вне зависимости от того, на каком языке вы пишете и какую парадигму применяете. УДК 511+519.6 ББК 22.13+22.18+22.19 Authorized translation from the English language edition, entitled FROM MATHEMATICS TO GENERIC PROGRAMMING; ISBN 9780321942043; by ALEXANDER STEPANOV and DANIEL ROSE; published by Pearson Education, Inc., publishing as Addison-Wesley Professional. Copyright© 2015. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. RUSSIAN language edition published by DMK PUBLISHERS. Copyright © 2015. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 978-0-321-94204-3 Copyright © 2015 Pearson Education, Inc. ISBN 978-5-97060-379-6 © Оформление, перевод, ДМК Пресс, 2016
Содержание Благодарности.......................................................................... 9 Об.авторах............................................................................. 10 От.авторов.............................................................................. 11 Предисловие.автора.к.русскому.изданию.................................... 12 Глава.1..О.чем.эта.книга............................................................ 13 1.1. Программирование и математика ..................................................................................13 1.2. Исторические справки ........................................................................................................14 1.3. Требования к читателю .......................................................................................................15 1.4. План книги ..............................................................................................................................15 Глава.2..Первый.алгоритм......................................................... 17 2.1. Египетское умножение .......................................................................................................18 2.2. Улучшение алгоритма .........................................................................................................21 2.3. Заключительные мысли .....................................................................................................24 Глава.3..Теория.чисел.в.Древней.Греции...................................... 25 3.1. Геометрические свойства целых чисел .........................................................................25 3.2. Просеивание простых чисел .............................................................................................28 3.3. Реализация и оптимизация кода .....................................................................................30 3.4. Совершенные числа .............................................................................................................35 3.5. Пифагорейская программа ...............................................................................................38 3.6. Фатальный изъян в программе .......................................................................................40 3.7. Заключительные мысли .....................................................................................................44 Глава.4..Алгоритм.Евклида........................................................ 45 4.1. Афины и Александрия ........................................................................................................45 4.2. Алгоритм Евклида нахождения наибольшей общей меры ....................................47 4.3. Тысяча лет без математики ...............................................................................................51 4.4. Странная история нуля ......................................................................................................52 4.5. Алгоритмы нахождения частного и остатка ...............................................................54 4.6. Повторное использование кода .......................................................................................57 4.7. Доказательство правильности алгоритма ....................................................................60 4.8. Заключительные мысли .....................................................................................................61 Глава.5..Зарождение.современной.теории.чисел.......................... 62 5.1. Простые числа Мерсенна и Ферма ................................................................................62 5.2. Малая теорема Ферма ........................................................................................................66 5.3. Сокращение ............................................................................................................................69 5.4. Доказательство малой теоремы Ферма ........................................................................72
Содержание 5.5. Теорема Эйлера .....................................................................................................................74 5.6. Применение арифметики по модулю ............................................................................78 5.7. Заключительные мысли .....................................................................................................79 Глава.6..Абстракция.в.математике.............................................. 80 6.1. Группы ......................................................................................................................................80 6.2. Моноиды и полугруппы .....................................................................................................83 6.3. Некоторые теоремы о группах .........................................................................................86 6.4. Подгруппы и циклические группы ................................................................................88 6.5. Теорема Лагранжа ................................................................................................................90 6.6. Теории и модели ...................................................................................................................94 6.7. Примеры категоричных и некатегоричных теорий ..................................................97 6.8. Заключительные мысли .....................................................................................................99 Глава.7..Вывод.обобщенного.алгоритма.....................................102 7.1. Осмысление требований к алгоритму ........................................................................ 102 7.2. Требования к A ................................................................................................................... 103 7.3. Требования к N ................................................................................................................... 106 7.4. Новые требования ............................................................................................................. 108 7.5. От умножения к возведению в степень ..................................................................... 109 7.6. Обобщение операции ....................................................................................................... 111 7.7. Вычисление чисел Фибоначчи ..................................................................................... 114 7.8. Заключительные мысли .................................................................................................. 117 Глава.8..Еще.об.алгебраических.структурах................................118 8.1. Стевин, полиномы и НОД ............................................................................................. 118 8.2. Геттинген и немецкая математика ............................................................................... 123 8.3. Нётер и рождение общей алгебры ............................................................................... 128 8.4. Кольца ................................................................................................................................... 129 8.5. Умножение матриц и полукольца ................................................................................ 132 8.6. Приложение: социальные сети и кратчайшие пути .............................................. 134 8.7. Евклидовы кольца ............................................................................................................. 136 8.8. Поля и другие алгебраические структуры ................................................................ 137 8.9. Заключительные мысли .................................................................................................. 138 Глава.9..Организация.математических.знаний.............................141 9.1. Доказательства ................................................................................................................... 141 9.2. Первая теорема ................................................................................................................... 144 9.3. Евклид и аксиоматический метод ............................................................................... 147 9.4. Альтернативы евклидовой геометрии ........................................................................ 148 9.5. Формалистический подход Гильберта ....................................................................... 151 9.6. Пеано и его аксиомы ........................................................................................................ 153 9.7. Построение арифметики ................................................................................................. 156 9.8. Заключительные мысли .................................................................................................. 159
Содержание 7 Глава.10..Основные.понятия.программирования..........................160 10.1. Аристотель и абстракции ............................................................................................. 160 10.2. Значения и типы .............................................................................................................. 162 10.3. Концепции ......................................................................................................................... 163 10.4. Итераторы .......................................................................................................................... 166 10.5. Категории, операции и характеристики итераторов .......................................... 167 10.6. Диапазоны ......................................................................................................................... 171 10.7. Линейный поиск .............................................................................................................. 173 10.8. Двоичный поиск .............................................................................................................. 174 10.9. Заключительные мысли ............................................................................................... 178 Глава.11..Алгоритмы.перестановки............................................179 11.1. Перестановки и транспозиции ................................................................................... 179 11.2. Обмен диапазонов........................................................................................................... 182 11.3. Циклическая перестановка .......................................................................................... 185 11.4. Использование циклов .................................................................................................. 188 11.5. Обращение ......................................................................................................................... 192 11.6. Пространственная сложность ..................................................................................... 196 11.7. Алгоритмы, адаптирующиеся к объему памяти ................................................... 197 11.8. Заключительные мысли ............................................................................................... 198 Глава.12..Обобщения.НОД........................................................199 12.1. Аппаратные ограничения и более эффективный алгоритм ............................. 199 12.2. Обобщение алгоритма Штайна .................................................................................. 202 12.3. Теорема Безу ..................................................................................................................... 204 12.4. Расширенный алгоритм Евклида .............................................................................. 208 12.5. Применения НОД ........................................................................................................... 212 12.6. Заключительные мысли ............................................................................................... 213 Глава.13..Реальное.приложение................................................215 13.1. Криптология ..................................................................................................................... 215 13.2. Проверка простоты ......................................................................................................... 217 13.3. Тест Миллера–Рабина ................................................................................................... 220 13.4. Алгоритм RSA: как и почему он работает .............................................................. 222 13.5. Заключительные мысли ............................................................................................... 225 Глава.14..Заключение.............................................................226 Дополнительная.литература.....................................................228 Приложение.А..Обозначения....................................................233 Приложение.В..Стандартные.приемы.доказательства..................236 B.1. Доказательство от противного ..................................................................................... 236 B.2. Доказательство по индукции ........................................................................................ 237
Введение B.3. Принцип Дирихле ............................................................................................................ 238 Приложение.С..Язык.С++.для.программистов.на.других.языках......239 C.1. Шаблонные функции ...................................................................................................... 239 C.2. Концепции .......................................................................................................................... 240 C.3. Синтаксис объявлений и типизированные константы ....................................... 241 C.4. Объекты-функции............................................................................................................ 241 C.5. Предусловия, постусловия и утверждения ............................................................. 242 C.6. Алгоритмы и структуры данных STL........................................................................ 243 C.7. Итераторы и диапазоны ................................................................................................. 244 C.8. Использование using для псевдонимов типов и функций типов в C++11 ..... 245 C.9. Списки инициализаторов в C++11 ............................................................................ 246 C.10. Лямбда-функции в C++11 .......................................................................................... 246 C.11. Замечание о ключевом слове inline.......................................................................... 247 Библиография.......................................................................248 Предметный.указатель............................................................252
Благодарности Мы благодарны всем, кто способствовал появлению этой книги. Руководство нашей компании A9.com активно поддерживало проект с самого начала. Билл Стейсиор предложил создать курс, легший в основу этой книги, и выбрал тему из предложенных нами вариантов. Брайан Пинкертон не только прослушал весь курс, но и всячески приветствовал идею превратить его в книгу. Мы благодарим также Мэта Маркуса, который вместе с Алексом читал похожий курс в компании Adobe в 2004–2005 годах. На протяжении всего процесса важную роль играли другие члены группы по фундаментальным структурам данных и алгоритмам поиска. Анил Ганголли (Anil Gangolli) помогал при отборе материала для курса, Райан Эрнст (Ryan Ernst) подготовил большую часть инфраструктуры программирования, а Парамжит Оберой (Paramjit Oberoi) высказывал ценнейшие замечания на этапе написания книги. Нам доставило истинное удовольствие работать с ними, и мы признательны им за помощь. Мы выражаем благодарность редакторам Питеру Гордону (Peter Gordon) и Грэгу Донку (Greg Doench), а также всему коллективу, собравшемуся под крышей издательства Addison-Wesley, в том числе главному редактору Джону Фуллеру, редактору по производству Мэри Кэсел Уилсон (Mary Kesel Wilson), выпускающему редактору Джилл Хоббс (Jill Hobbs), верстальщику и специалисту по LaTeX Лори Хьюз (Lori Hughes), за усилия по превращению рукописи в безупреч ную книгу. Наконец, мы хотим поблагодарить наших друзей, семьи и коллег, которые прочли черновые варианты книги и поделились с нами замечаниями, исправлениями, предложениями, советами и т. д.: Гас пера Азмана (Gašper Ažman), Джона Баннинга (John Banning), Синтию Дворк (Cynthia Dwork), Германа Эпельмана (Hernan Epelman), Райана Эрнста (Ryan Ernst), Анила Ганголли (Anil Gangolli), Сьюзан Груббер (Susan Gruber), Джона Кальба (Jon Kalb), Роберта Лера (Robert Lehr), Дмитрия Лещинера (Dmitry Leshchiner), Тома Лондона (Tom London), Марка Манасси (Mark Manasse), Пола Макджонса (Paul McJones), Николаса Николова (Nicolas Nicolov), Гора Нишанова (Gor Nishanov), Парамжита Обероя (Paramjit Oberoi), Шона Пэрента (Sean Parent), Фернандо Пелличиони (Fernando Pelliccioni), Джона Рейзера (John Reiser), Роберта Роуза (Robert Rose), Стефана Варгиаса (Stefan Vargyas) и Адама Юнга (Adam Young). Благодаря им книга стала намного лучше.
К покупке доступен более свежий выпуск
Перейти