Теоретический 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): теория рекурсии, теоремы Годеля, теория множеств, теория моделей Рене Кори, Даниэль Ласкар

Пожалуйста, обратитесь к этому вопросу 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! * (мое мнение)


Для меня функциональное программирование. Не используйте устаревшую книгу, подобную той, на которую вы ссылались. В настоящее время в отрасли требуются функциональные языки. В Интернете существуют некоторые учебные пособия по таким языкам, как Scheme, Haskel и Erlang. Не будь очень теоретическим, это мой совет.
AJed

Все хорошие комментарии. Моя цель - разработать полную программу самообучения, и этот вопрос касается только части программы, которую я считаю наиболее сложной для организации. Другие области включают: структуры данных и алгоритмы, компьютерную архитектуру, операционные системы, сети, безопасность и криптографию, параллелизм, формальные методы, искусственный интеллект, графику и моделирование, базы данных, языки программирования, компиляторы, разработку программного обеспечения и, наконец, философию и администрирование Unix. Большинство из них, я думаю, являются фундаментальными для CS, но требуют отдельного вопроса
CSLover

Ваш лучший трюк - прочная основа в разработке и анализе алгоритмов. - любое другое поле является подполем разработки и анализа алгоритмов.
AJed

Будете ли вы любезны и уточните, какую книгу по алгоритмам Седжвика вы порекомендовали? У него есть один, который называется «Алгоритмы», но это не серия. У него также есть «Алгоритмы на С ++» (или на других языках), что, как я полагаю, состоит из 2 книг, состоящих из 5 частей.
CSLover

Тот, который я использовал, был C ++. Я использовал их как ссылки, хотя. Это его сайт cs.princeton.edu/~rs
AJed
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.