Теоретический CS и математика - рекомендации для самостоятельной работы

14

Я не выпускник CS, и моя область исследований не связана с CS. Тем не менее, в рамках более крупного плана стать специалистом по информатике, я хочу получить солидный опыт в теоретической информатике и математике применительно к CS. Я провел много исследований и выбрал следующие лучшие / действительно хорошие книги по теме CS и математике и хотел бы узнать ваше мнение о:

  • Полнота затронутых тем (пожалуйста, порекомендуйте все, что я пропустил)
  • Перекрытие материала покрыто / область перерасхода (пожалуйста, порекомендуйте книги, которые должны быть удалены из списка)
  • Порядок изучения книг (я перечислил в том порядке, в котором, я думаю, их следует изучить)

Список кажется чрезмерно длинным, поэтому я был бы признателен за рекомендации удалить некоторые книги без потери базовых знаний, необходимых для CS.

Итак, книги:

  1. Восторг математика В.В. Сойера
  2. Как доказать это: структурированный подход Даниэля Дж. Веллемана
  3. Как ее решить: новый аспект математического метода Г. Поля
  4. Введение в функциональное программирование с помощью лямбда-исчисления Грег Майклсон
  5. Основы информатики Аль Ахо и Джефф Уллман (http://i.stanford.edu/~ullman/focs.html)
  6. Конкретная математика: основа компьютерных наук Грэма, Кнута и Паташника
  7. Введение в теорию вычислений Майкл Сипсер
  8. Введение в теорию автоматов, языков и вычислений Джона Э. Хопкрофта, Раджива Мотвани, Джеффри Д. Уллмана
  9. Вычислительная сложность: концептуальная перспектива Одеда Голдрайха
  10. Вычислительная сложность: современный подход, Санджив Арора, Боаз Барак
  11. Курс по комбинаторике Дж. Х. Ван Линта, Р. М. Уилсона
  12. Вычислимость: введение в теорию рекурсивных функций Найджела Катленда
  13. Компьютеры и неразрешимость: руководство по теории NP-полноты М. Р. Гэри, Д. С. Джонсон
  14. Теория рекурсивных функций и эффективная вычислимость Хартли Роджерса
  15. Неравенства Г. Х. Харди, Дж. Е. Литтлвуда, Г. Поли
  16. Математическая логика: курс с упражнениями (часть I): исчисление высказываний, булевы алгебры, исчисление предикатов Рене Кори, Даниэль Ласкар
  17. Математическая логика: курс с упражнениями (часть II): теория рекурсии, теоремы Годеля, теория множеств, теория моделей Рене Кори, Даниэль Ласкар
CSLover
источник
Пожалуйста, обратитесь к этому вопросу cstheory.stackexchange.com/questions/3253/…
Bartosz Przybylski
Начните с известной книги Алгоритм, если у вас еще нет опыта в этой теме.
AJed
@Bartek: Спасибо, но это был один из вопросов, которые я рассматривал прежде, чтобы составить список в первую очередь. Мой вопрос больше о том, как практически прочитать весь замечательный материал. Время всегда является ограничением, поэтому я хочу знать, какие книги я не должен читать, чтобы избежать повторения и т. Д.
CSLover
@AJed: Вы предлагаете начать с книги № 5 в списке вместо некоторых книг по математике № 1-4? Я считаю, что № 5 дает краткое введение в алгоритмы и структуры данных.
CSLover
Слишком много здесь. Я бы просто выбрал один и ушел, потом беспокоился о том, что будет дальше, когда ты доберешься туда. Я мог бы порекомендовать Sipser начать для новичка, который хочет иметь солидный опыт в основах CS.
Усул

Ответы:

10

Ваш список крайне проблематичен.

Для начала я бы пропустил книги 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 посвящена функциональному программированию. Хотя мое образование в области компьютерных наук никогда не включало никаких курсов по этому предмету, было бы справедливо сказать, что многие исследователи в области теоретических компьютерных наук считают функциональное программирование частью основных основ.

Подводя итог: то, что вы остаетесь с

  • Одна из книг 1-3 (или любой сопоставимый текст «введение в доказательство»)
  • CLRS
  • Книга 4 (функциональное программирование)
  • Книга 7 (теория автоматов и теория сложности)
Юваль Фильмус
источник
Большое вам спасибо за такой подробный ответ. Я знал, что список был чрезмерным, но читая всевозможные рекомендации для компьютерных ученых, вы в итоге получили длинный список. Ваша рекомендация очень практична, и это то, чего я добиваюсь. Большое спасибо!!
CSLover
1
Я не согласен с советом, что "математика не нужна". Выберите любой аспект информатики, и я покажу вам, как нужна математика. Чем больше математики ты изучаешь, тем лучше. С другой стороны, практически невозможно изучать настоящую математику самостоятельно, не ходя в школу. Так что вам, вероятно, лучше сконцентрироваться на информатике, которую легче освоить.
Андрей Бауэр
5

Вы также можете воспользоваться некоторыми из многих доступных онлайн-курсов. Например, и Стэнфорд, и Массачусетский технологический институт предлагают (бесплатные) онлайн-курсы по информатике, и я думаю, что есть и много других доступных.

Что касается книг, я поддерживаю большинство рекомендаций Ювала, за исключением того, что CLRS - отличный справочник, но немного ошеломляющий как вводная книга, чтобы просто сесть и прочитать. Для первого прохода в части алгоритмов, я мог бы рекомендовать Алгоритмы Dasgupta et al. , Предыдущая ссылка на бесплатную предварительную печать онлайн, но это также довольно дешево купить в мягкой обложке.

Джо
источник
Ok. Я ценю ваш ответ. Большое спасибо.
CSLover
2

Ссылки, которые вы предлагаете, сделают «очень» теоретического информатика. но я, честно говоря, не вижу никакой пользы от чтения всех этих книг, если вы не из степени CS. Это конечно все зависит от того, что вам нужно.

Я считаю, что некоторые книги, такие как Книга 14, 15, 16, 17, не предназначены для компьютерных ученых. Книга 3 многословна. Это просто общее для любого студента. Поэтому я предполагаю, что книги 1 и 2 одинаковы.

Для меня, находясь в той же ситуации, что и изначально не ученый-компьютерщик (но вместо этого инженер-электрик), я предлагаю два начальных направления:

  • Разработка и анализ алгоритмов, (многие люди предлагают CLRS Введение в алгоритмы . Это отличный справочник, но я на самом деле не фанат этого, и изначально было труднее понять его, а иногда и очень многословно. Я полагаю, что вы следуйте его оглавлению, и оттуда вы проверяете онлайн-курсы для более четких ссылок).

--- убедитесь, что вы освоили язык программирования для РЕАЛИЗАЦИИ изучаемых вами алгоритмов и структур данных - поэтому я предлагаю серию Алгоритмов Седжвика (удивительно!)

--- ДОБАВЛЕНО: Я также предлагаю эту книгу: Комбинаторные алгоритмы: генерация, перечисление и поиск Д. Крехера. Это очень хорошая книга. Даст вам другое представление о многих проблемах в алгоритмах.

  • комбинаторика (особенно теория графов), курс по комбинаторике Дж. Х. ван Линта, Р. М. Уилсона , хорош. Там существует много других ссылок. Обычно достаточно любой известной книги по комбинаторике - все остальное вы получите из дополнительных ссылок из Интернета. Лично мне понравились: комбинаторика Питера и Кэмерона, теория графов Бонди и Мёрти.

  • ставка на вероятность (всегда необходимо). Поразительно, что многие области науки не используют вероятность. Но поверьте мне, все, что вам нужно знать, это основы.

Затем: многие исследователи, называющие себя теоретиками компьютерных наук, так много внимания уделяют теории вычислений (автомота и другие). Для этого есть несколько хороших книг (см. Сообщение Yuvul Filmus),

Ахо и Ульман это хорошо (на самом деле все книги Ульмана хороши). Не стесняйтесь дизайна компилятора (см. Http://infolab.stanford.edu/~ullman/ullman-books.html ).

После этого все зависит от того, что вы хотите сделать. Вы можете выбрать различные направления: 1) базы данных, 2) распознавание образов и извлечение данных, 3) распределенные алгоритмы, 4) основа языков программирования, 4) рандомизированные алгоритмы и многие другие. [каждый из которых требует другого поста] но постарайтесь получить представление обо всем!

* Общая идея: если вы новичок в CS, то не стесняйтесь использовать как можно больше поддоменов CS. Ограничение себя «теорией» заставит вас потерять большую часть творчества CS! * (мое мнение)

AJed
источник
Для меня функциональное программирование. Не используйте устаревшую книгу, подобную той, на которую вы ссылались. В настоящее время в отрасли требуются функциональные языки. В Интернете существуют некоторые учебные пособия по таким языкам, как Scheme, Haskel и Erlang. Не будь очень теоретическим, это мой совет.
AJed
Все хорошие комментарии. Моя цель - разработать полную программу самообучения, и этот вопрос касается только части программы, которую я считаю наиболее сложной для организации. Другие области включают: структуры данных и алгоритмы, компьютерную архитектуру, операционные системы, сети, безопасность и криптографию, параллелизм, формальные методы, искусственный интеллект, графику и моделирование, базы данных, языки программирования, компиляторы, разработку программного обеспечения и, наконец, философию и администрирование Unix. Большинство из них, я думаю, являются фундаментальными для CS, но требуют отдельного вопроса
CSLover
Ваш лучший трюк - прочная основа в разработке и анализе алгоритмов. - любое другое поле является подполем разработки и анализа алгоритмов.
AJed
Будете ли вы любезны и уточните, какую книгу по алгоритмам Седжвика вы порекомендовали? У него есть один, который называется «Алгоритмы», но это не серия. У него также есть «Алгоритмы на С ++» (или на других языках), что, как я полагаю, состоит из 2 книг, состоящих из 5 частей.
CSLover
Тот, который я использовал, был C ++. Я использовал их как ссылки, хотя. Это его сайт cs.princeton.edu/~rs
AJed