Теоретичні CS та Math - рекомендації щодо самостійного вивчення


14

Я не є спеціалістом, який навчається за кордоном, і моя сфера навчання не пов'язана з CS. Однак, в рамках більш масштабного плану стати інформатиком, я хочу отримати ґрунтовну основу теоретичної інформатики та математики, оскільки це стосується CS. Я провів багато досліджень і вибрав наступні найкращі / справді хороші книги на тему CS та математики і хотів би попросити вашої думки щодо:

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

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

Отже, книги:

  1. Задоволення математика від WW Sowyer
  2. Як це довести: структурований підхід Даніеля Дж. Веллемана
  3. Як її вирішити: новий аспект математичного методу Г. Полі
  4. Вступ до функціонального програмування через обчислення Лямбди Грега Майклсона
  5. Основи інформатики Аль Ахо та Джеффа Улмана (http://i.stanford.edu/~ullman/focs.html)
  6. Конкретна математика: Фундація інформатики Грема, Кнута та Паташника
  7. Вступ до теорії обчислень Майкла Шипсера
  8. Вступ до теорії автоматів, мов та обчислень Джона Е. Хопкрофта, Раєєва Мотвані, Джефрі Д. Улмана
  9. Обчислювальна складність: концептуальна перспектива Одіда Голдрайха
  10. Комплексна обчислюваність: сучасний підхід Сандєєва Арора, Боаз Барак
  11. Курс комбінаторики Дж. Ван ван Лінта, Р. М. Вілсон
  12. Обчислюваність: вступ до теорії рекурсивної функції Найджела Катленда
  13. Комп'ютери та нездатність: Посібник з теорії повноти NP від ​​MR MR Garey, DS Johnson
  14. Теорія рекурсивних функцій та ефективної обчислюваності Хартлі Роджерса
  15. Нерівності Г. Г. Харді, Ж. Е. Літлвуд, Г. Поля
  16. Математична логіка: курс з вправами (частина I): Пропозиційне обчислення, бук-алгебри, предикатне обчислення Рене Корі, Даніель Ласкар
  17. Математична логіка: курс з вправами (частина II): теорія рекурсії, теореми Годеля, теорія задач, теорія моделі Рене Корі, Даніель Ласкар

Будь ласка, зверніться до цього питання cstheory.stackexchange.com/questions/3253/…
Bartosz Przybylski

Почніть з відомої книги Алгоритм, якщо ви ще не маєте досвіду цієї теми.
12.12

@Bartek: Дякую, але це було одне з питань, на яке я розглядав, перш ніж складати список. Моє запитання більше про те, як практично прочитати весь чудовий матеріал там. Час - це завжди обмеження, тому я хочу знати, які книги я повинен "не" читати, щоб уникнути повторення тощо
CSLover

@AJed: Ви пропонуєте почати з книги №5 у списку замість деяких математичних книг №1-4? Я вважаю, що №5 дає чітке введення в алгоритми та структури даних.
CSLover

Тут занадто багато. Я просто виберу його і поїду, а потім хвилюйся, що буде далі, коли ти туди потрапиш. Я б порекомендував Сіпсеру почати для початківця, який бажає міцного досвіду в основах CS.
usul

Відповіді:


10

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

Для початку я категорично пропускаю книги 6,11,12,14,15,16,17: Книги 6, 11 і 15 є загальною математикою, яка насправді не потрібна, якщо ви не станете теоретичним дослідником. Книги 12 та 14 охоплюють теорію рекурсії, яка не є інформатикою (хоча вона стосується обчислюваності!). Книги 16 та 17 охоплюють розширені теми логіки, тоді як вам потрібно знати лише основні логіки.

З книг 1,2,3 я вибрав би лише одну, яка послужила б загальним вступом до математики та доказів.

Книги 5,7,8,9,10,13 охоплюють декілька предметів: теорію автоматів, алгоритми та теорію складності. Дозвольте запропонувати вам слідувати Сіпсеру (Книга 7) для теорії автоматів та теорії складності та Введення в алгоритми Кормена, Лейзерсона, Рівест та Штейна ("CLRS") для алгоритмів.

У книзі 4 йдеться про функціональне програмування. Хоча моя освіта з інформатики ніколи не включала жодних курсів з цієї теми, справедливо сказати, що багато дослідників теоретичної інформатики вважають функціональне програмування частиною необхідних основ.

Підсумовуючи: те, що ви залишаєтесь, - це

  • Одна з книг 1-3 (або будь-який порівняний текст "вступ до доказу")
  • CLRS
  • Книга 4 (функціональне програмування)
  • Книга 7 (теорія автоматів і теорія складності)

Дякуємо ТАК велике за таку ретельну відповідь. Я знав, що список є надмірним, але, читаючи всілякі рекомендації з книг для вчених-комп'ютерів, ви закінчуєте довгий список. Ваша рекомендація дуже практична, і це я саме після цього. Велике спасибі !!
CSLover

1
Я не згоден з порадою, що "математика не потрібна". Виберіть будь-який аспект інформатики, і я покажу вам, як потрібна математика. Чим більше математики ви навчитесь, тим краще ви будете. З іншого боку, самостійно навчитися справжній математиці майже не можна, не йдучи до школи. Тож вам, мабуть, краще зосередитись на інформатиці, що легше вчитися.
Андрій Бауер

5

Ви також можете скористатися багатьма доступними онлайн-курсами. Наприклад, і Стенфорд, і MIT пропонують (безкоштовні) онлайн-курси з інформатики, і, думаю, є ще багато інших.

Що стосується книг, я поступаюсь більшою частиною рекомендацій Юваля, за винятком того, що CLRS є чудовим посиланням, але трохи непомітним як вступна книга, щоб просто сісти і прочитати. Для першого проходження в частині алгоритмів я можу порекомендувати Алгоритми Дасгупта та ін. . Попереднє посилання стосується безкоштовного онлайн-попереднього друку, але його також досить дешево купити у м'якій обкладинці.


Добре. Я ціную вашу відповідь. Велике спасибі.
CSLover

2

Посилання, які ви пропонуєте, зробили б "дуже" теоретиком-інформатиком. але я чесно не знаходжу ніякої користі, читаючи всі ці книги, якщо ви здобуваєте не середню освіту. Це, звичайно, все залежить від того, що вам потрібно.

Я вважаю, що деякі книги, такі як Книги 14, 15, 16, 17, не призначені для вчених-комп'ютерів. Книга 3 є багатослівною. Це просто загально для будь-якого студента. Тому я припускаю, що книги 1 і 2 однакові.

Для мене - опинившись у тій самій ситуації, що не спочатку комп'ютер (а натомість інженер-електрик / комп'ютер) - пропоную два початкові напрямки:

  • проектування та аналіз алгоритмів (багато людей пропонують Вступ CLRS до алгоритмів . Це чудова довідка, але я справді не шанувальник цього, і спочатку це було важче зрозуміти, а іноді і дуже багатослівний. Я пропоную, хоча, щоб ви слідкуйте за його змістом, а звідти ви перевіряєте онлайн-курси на наявність чіткіших посилань).

--- не забудьте оволодіти мовою програмування для Втілення алгоритмів та структур даних, які ви вивчаєте - тому я пропоную серію " Алгоритми" від Sedgewick (дивовижно!)

--- ДОДАТО: Я також пропоную цю книгу: Комбінаторні алгоритми: покоління, перерахування та пошук Д. Крегера. Це дуже приємна книга. Дасть вам іншу перспективу для багатьох питань алгоритмів.

  • комбінаторика (особливо теорія графів), Курс комбінаторики Дж. Ван Лінта, Р. М. Вілсон , добре. Існує багато інших посилань. Зазвичай будь-якої відомої книги з комбінаторики достатньо - все інше ви отримаєте з додаткових довідок з Інтернету. Мені особисто сподобалися: комбінаторика пітера j камерона та теорія графіків Бонді та Мерті.

  • ставка ймовірності (завжди необхідна). Вражає те, що багато галузей науки не використовують ймовірності. Але повірте, все, що вам потрібно знати, - це основи.

Потім: Багато дослідників, які називають себе теоретичними комп'ютерними вченими, так багато акцентують увагу на теорії обчислень (автомобілів та інших). Для цього є кілька хороших книг (Див. Пост Ювуля Філіуса),

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

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

* Загальна ідея: якщо ви не новачок у CS, то попросіть себе комфортно якнайбільше CS субдоменів. Обмеження себе "теорією" призведе до втрати великої кількості творчості CS! * (моя думка)


Для мене функціональне програмування. Не використовуйте застарілу книгу, як ту, яку ви цитували. Наразі в галузі потрібні функціональні мови. В Інтернеті є кілька навчальних посібників щодо таких мов, як Scheme, Haskel та Erlang. Не дуже теоретично, це моя порада.
12.12

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

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

Будьте ласкаві та уточнити, які алгоритми Sedgewick книги ви рекомендували? У нього є назва "Алгоритми", але це не серія. У нього також є "Алгоритми C ++" (або інших мов), що є 2 книжками, які я вважаю, загалом у 5 частинах.
CSLover

Я використовував ці C ++. Я використовував їх як посилання. Це його веб-сайт cs.princeton.edu/~rs
12.12
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.