Я не выпускник CS, и моя область исследований не связана с CS. Тем не менее, в рамках более крупного плана стать специалистом по информатике, я хочу получить солидный опыт в теоретической информатике и математике применительно к CS. Я провел много исследований и выбрал следующие лучшие / действительно хорошие книги по теме CS и математике и хотел бы узнать ваше мнение о:
- Полнота затронутых тем (пожалуйста, порекомендуйте все, что я пропустил)
- Перекрытие материала покрыто / область перерасхода (пожалуйста, порекомендуйте книги, которые должны быть удалены из списка)
- Порядок изучения книг (я перечислил в том порядке, в котором, я думаю, их следует изучить)
Список кажется чрезмерно длинным, поэтому я был бы признателен за рекомендации удалить некоторые книги без потери базовых знаний, необходимых для CS.
Итак, книги:
- Восторг математика В.В. Сойера
- Как доказать это: структурированный подход Даниэля Дж. Веллемана
- Как ее решить: новый аспект математического метода Г. Поля
- Введение в функциональное программирование с помощью лямбда-исчисления Грег Майклсон
- Основы информатики Аль Ахо и Джефф Уллман (http://i.stanford.edu/~ullman/focs.html)
- Конкретная математика: основа компьютерных наук Грэма, Кнута и Паташника
- Введение в теорию вычислений Майкл Сипсер
- Введение в теорию автоматов, языков и вычислений Джона Э. Хопкрофта, Раджива Мотвани, Джеффри Д. Уллмана
- Вычислительная сложность: концептуальная перспектива Одеда Голдрайха
- Вычислительная сложность: современный подход, Санджив Арора, Боаз Барак
- Курс по комбинаторике Дж. Х. Ван Линта, Р. М. Уилсона
- Вычислимость: введение в теорию рекурсивных функций Найджела Катленда
- Компьютеры и неразрешимость: руководство по теории NP-полноты М. Р. Гэри, Д. С. Джонсон
- Теория рекурсивных функций и эффективная вычислимость Хартли Роджерса
- Неравенства Г. Х. Харди, Дж. Е. Литтлвуда, Г. Поли
- Математическая логика: курс с упражнениями (часть I): исчисление высказываний, булевы алгебры, исчисление предикатов Рене Кори, Даниэль Ласкар
- Математическая логика: курс с упражнениями (часть II): теория рекурсии, теоремы Годеля, теория множеств, теория моделей Рене Кори, Даниэль Ласкар
Ответы:
Ваш список крайне проблематичен.
Для начала я бы пропустил книги 6,11,12,14,15,16,17: Книги 6, 11 и 15 являются общей математикой, которая на самом деле не нужна, если вы не станете теоретическим исследователем. Книги 12 и 14 охватывают теорию рекурсии, которая не является информатикой (хотя она имеет дело с вычислимостью!). Книги 16 и 17 охватывают сложные темы по логике, в то время как вам нужно знать только основную логику.
Из книг 1, 2, 3 я бы выбрал только одну, которая послужит общим введением в математику и доказательствами.
Книги 5,7,8,9,10,13 охватывают несколько предметов: теория автоматов, алгоритмы и теория сложности. Позвольте мне предложить вам следовать Sipser (Книга 7) для теории автоматов и теории сложности, а также Введение в алгоритмы от Cormen, Leiserson, Rivest и Stein («CLRS») для алгоритмов.
Книга 4 посвящена функциональному программированию. Хотя мое образование в области компьютерных наук никогда не включало никаких курсов по этому предмету, было бы справедливо сказать, что многие исследователи в области теоретических компьютерных наук считают функциональное программирование частью основных основ.
Подводя итог: то, что вы остаетесь с
источник
Вы также можете воспользоваться некоторыми из многих доступных онлайн-курсов. Например, и Стэнфорд, и Массачусетский технологический институт предлагают (бесплатные) онлайн-курсы по информатике, и я думаю, что есть и много других доступных.
Что касается книг, я поддерживаю большинство рекомендаций Ювала, за исключением того, что CLRS - отличный справочник, но немного ошеломляющий как вводная книга, чтобы просто сесть и прочитать. Для первого прохода в части алгоритмов, я мог бы рекомендовать Алгоритмы Dasgupta et al. , Предыдущая ссылка на бесплатную предварительную печать онлайн, но это также довольно дешево купить в мягкой обложке.
источник
Ссылки, которые вы предлагаете, сделают «очень» теоретического информатика. но я, честно говоря, не вижу никакой пользы от чтения всех этих книг, если вы не из степени CS. Это конечно все зависит от того, что вам нужно.
Я считаю, что некоторые книги, такие как Книга 14, 15, 16, 17, не предназначены для компьютерных ученых. Книга 3 многословна. Это просто общее для любого студента. Поэтому я предполагаю, что книги 1 и 2 одинаковы.
Для меня, находясь в той же ситуации, что и изначально не ученый-компьютерщик (но вместо этого инженер-электрик), я предлагаю два начальных направления:
--- убедитесь, что вы освоили язык программирования для РЕАЛИЗАЦИИ изучаемых вами алгоритмов и структур данных - поэтому я предлагаю серию Алгоритмов Седжвика (удивительно!)
--- ДОБАВЛЕНО: Я также предлагаю эту книгу: Комбинаторные алгоритмы: генерация, перечисление и поиск Д. Крехера. Это очень хорошая книга. Даст вам другое представление о многих проблемах в алгоритмах.
комбинаторика (особенно теория графов), курс по комбинаторике Дж. Х. ван Линта, Р. М. Уилсона , хорош. Там существует много других ссылок. Обычно достаточно любой известной книги по комбинаторике - все остальное вы получите из дополнительных ссылок из Интернета. Лично мне понравились: комбинаторика Питера и Кэмерона, теория графов Бонди и Мёрти.
ставка на вероятность (всегда необходимо). Поразительно, что многие области науки не используют вероятность. Но поверьте мне, все, что вам нужно знать, это основы.
Затем: многие исследователи, называющие себя теоретиками компьютерных наук, так много внимания уделяют теории вычислений (автомота и другие). Для этого есть несколько хороших книг (см. Сообщение Yuvul Filmus),
Ахо и Ульман это хорошо (на самом деле все книги Ульмана хороши). Не стесняйтесь дизайна компилятора (см. Http://infolab.stanford.edu/~ullman/ullman-books.html ).
После этого все зависит от того, что вы хотите сделать. Вы можете выбрать различные направления: 1) базы данных, 2) распознавание образов и извлечение данных, 3) распределенные алгоритмы, 4) основа языков программирования, 4) рандомизированные алгоритмы и многие другие. [каждый из которых требует другого поста] но постарайтесь получить представление обо всем!
* Общая идея: если вы новичок в CS, то не стесняйтесь использовать как можно больше поддоменов CS. Ограничение себя «теорией» заставит вас потерять большую часть творчества CS! * (мое мнение)
источник