ทฤษฎี CS และคณิตศาสตร์ - คำแนะนำด้วยตนเอง


14

ฉันเป็นผู้สำเร็จการศึกษาที่ไม่ใช่ CS และสาขาวิชาของฉันไม่เกี่ยวข้องกับ CS อย่างไรก็ตามในฐานะที่เป็นส่วนหนึ่งของแผนการขนาดใหญ่ที่จะกลายเป็นนักวิทยาศาสตร์คอมพิวเตอร์ฉันต้องการได้รับพื้นฐานที่แข็งแกร่งในวิทยาการคอมพิวเตอร์เชิงทฤษฎีและคณิตศาสตร์ที่เกี่ยวข้องกับ CS ฉันทำวิจัยมากมายและเลือกหนังสือที่ดีที่สุด / ดีจริงๆต่อไปนี้ในหัวข้อ CS และคณิตศาสตร์และต้องการถามความคิดเห็นของคุณเกี่ยวกับ:

  • ความครบถ้วนของหัวข้อครอบคลุม (โปรดแนะนำสิ่งที่ฉันพลาดไป)
  • วัสดุทับซ้อน / พื้นที่ทับซ้อนมากเกินไป (โปรดแนะนำหนังสือที่ควรลบออกจากรายการ)
  • สั่งซื้อเพื่อศึกษาหนังสือ (ฉันอยู่ในลำดับที่ฉันคิดว่าพวกเขาควรจะศึกษา)

รายการรู้สึกยาวเกินไปดังนั้นฉันขอขอบคุณคำแนะนำในการนำหนังสือบางเล่มออกโดยไม่สูญเสียความรู้พื้นฐานที่จำเป็นสำหรับ CS

ดังนั้นหนังสือคือ:

  1. Delight ของนักคณิตศาสตร์โดย WW Sawyer
  2. จะพิสูจน์ได้อย่างไร: แนวทางที่มีโครงสร้างโดย Daniel J. Velleman
  3. วิธีแก้ปัญหา: มุมมองใหม่ของวิธีการทางคณิตศาสตร์โดย G. Polya
  4. บทนำของการโปรแกรมเชิงหน้าที่ผ่านแลมบ์ดาแคลคูลัสโดย Greg Michaelson
  5. รากฐานของวิทยาศาสตร์คอมพิวเตอร์โดย Al Aho และ Jeff Ullman (http://i.stanford.edu/~ullman/focs.html)
  6. คณิตศาสตร์คอนกรีต: มูลนิธิวิทยาศาสตร์คอมพิวเตอร์โดยเกรแฮม Knuth และ Patashnik
  7. ทฤษฎีการคำนวณเบื้องต้นโดย Michael Sipser
  8. ทฤษฎี Automata ภาษาและการคำนวณเบื้องต้นโดย John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman
  9. ความซับซ้อนในการคำนวณ: มุมมองแนวคิดโดย Oded Goldreich
  10. ความซับซ้อนในการคำนวณ: แนวทางที่ทันสมัยโดย Sanjeev Arora, Boaz Barak
  11. หลักสูตรใน Combinatorics โดย JH van Lint, RM Wilson
  12. ความสามารถในการคำนวณ: บทนำของทฤษฎีฟังก์ชันแบบเรียกซ้ำโดยไนเจลคัทแลนด์
  13. คอมพิวเตอร์และ Intractability: คำแนะนำเกี่ยวกับทฤษฎีความสมบูรณ์แบบโดย MR Garey, DS Johnson
  14. ทฤษฎีฟังก์ชันเวียนเกิดและการคำนวณที่มีประสิทธิภาพโดย Hartley Rogers
  15. ความไม่เท่าเทียมกันโดย GH Hardy, JE Littlewood, G. Polya
  16. ตรรกะคณิตศาสตร์: หลักสูตรที่มีแบบฝึกหัด (ตอนที่ 1): แคลคูลัสเชิงประพจน์, Bookean Algebras, แคลคูลัสภาคแสดงโดยRené Cori, Daniel Lascar
  17. ตรรกะทางคณิตศาสตร์: หลักสูตรพร้อมแบบฝึกหัด (ตอนที่ 2): ทฤษฎีการเรียกซ้ำ, ทฤษฎีบทของ Godel, ทฤษฎีเซต, ทฤษฎีแบบจำลองโดยRené Cori, Daniel Lascar

โปรดดูคำถามนี้cstheory.stackexchange.com/questions/3253/ …
Bartosz Przybylski

เริ่มต้นด้วยหนังสืออัลกอริทึมที่รู้จักกันถ้าคุณยังไม่มีประสบการณ์ในหัวข้อนี้
AJed

@Bartek: ขอบคุณ แต่นี่เป็นหนึ่งในคำถามที่ฉันดูมาก่อนเพื่อรวบรวมรายชื่อในตอนแรก คำถามของฉันเกี่ยวกับวิธีอ่านเนื้อหาที่ยอดเยี่ยมทั้งหมดในทางปฏิบัติ เวลามีข้อ จำกัด อยู่เสมอดังนั้นฉันต้องการรู้ว่าฉันควรอ่านหนังสืออะไร "ไม่" เพื่อหลีกเลี่ยงการทำซ้ำ ฯลฯ
CSLover

@AJed: คุณแนะนำให้เริ่มต้นด้วยหนังสือ # 5 ในรายการแทนที่จะเป็นหนังสือคณิตศาสตร์ # 1-4 บ้างไหม? ฉันเชื่อว่า # 5 ให้คำแนะนำอย่างนุ่มนวลแก่อัลกอริทึมและโครงสร้างข้อมูล
CSLover

มากเกินไปที่นี่ ฉันจะเลือกหนึ่งแล้วไปกังวลเกี่ยวกับสิ่งที่เกิดขึ้นต่อไปเมื่อคุณไปถึงที่นั่น ฉันอาจแนะนำ Sipser ให้เริ่มต้นสำหรับผู้เริ่มต้นที่ต้องการพื้นฐานที่แข็งแกร่งในรากฐานของ 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 ครอบคลุมหลายวิชา: ทฤษฎีออโตมาตะ, อัลกอริธึมและทฤษฎีความซับซ้อน ฉันขอแนะนำให้คุณติดตาม Sipser (เล่ม 7) สำหรับทฤษฎีออโตมาตะและทฤษฎีความซับซ้อนและแนะนำอัลกอริทึมโดย Cormen, Leiserson, Rivest และ Stein ("CLRS") สำหรับอัลกอริทึม

เล่ม 4 ข้อตกลงกับการเขียนโปรแกรมการทำงาน ในขณะที่การศึกษาด้านวิทยาการคอมพิวเตอร์ของฉันไม่เคยรวมหลักสูตรใด ๆ ในวิชานี้ แต่ก็มีความเป็นธรรมที่จะกล่าวว่านักวิจัยหลายคนในสาขาวิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎีนับการเขียนโปรแกรมที่ใช้งานได้เป็นส่วนหนึ่งของรากฐานที่สำคัญ

สรุป: สิ่งที่คุณยังมีอยู่คือ

  • หนึ่งในหนังสือ 1-3 (หรือข้อความ "คำนำเพื่อพิสูจน์" ที่เทียบเท่า)
  • CLRS
  • เล่ม 4 (การโปรแกรมเชิงฟังก์ชัน)
  • เล่ม 7 (ทฤษฎีออโตมาตะและทฤษฎีความซับซ้อน)

ขอบคุณมากสำหรับการตอบสนองอย่างละเอียด ฉันรู้ว่ารายการนั้นมากเกินไป แต่การอ่านคำแนะนำหนังสือทุกประเภทสำหรับนักวิทยาศาสตร์คอมพิวเตอร์คุณจบลงด้วยรายการที่ยาว คำแนะนำของคุณเป็นจริงมากและนั่นคือสิ่งที่ฉันเป็น ขอบคุณมาก !!
CSLover

1
ฉันไม่เห็นด้วยกับคำแนะนำที่ว่า "ไม่จำเป็นต้องใช้คณิตศาสตร์" เลือกวิทยาศาสตร์คอมพิวเตอร์และฉันจะแสดงให้คุณเห็นว่าคณิตศาสตร์เป็นสิ่งจำเป็น ยิ่งคุณเรียนรู้คณิตศาสตร์มากเท่าไหร่ก็ยิ่งดีเท่านั้น ในทางตรงกันข้ามมันแทบเป็นไปไม่ได้ที่จะเรียนรู้คณิตศาสตร์ที่แท้จริงด้วยตัวเองโดยไม่ต้องไปโรงเรียน ดังนั้นคุณน่าจะดีกว่าที่จะมุ่งเน้นไปที่วิทยาการคอมพิวเตอร์ที่ง่ายต่อการเรียนรู้
Andrej Bauer

5

คุณอาจพิจารณาใช้ประโยชน์จากหลักสูตรออนไลน์บางหลักสูตร ตัวอย่างเช่นทั้งStanfordและMITเปิดสอนหลักสูตรออนไลน์ (ฟรี) ทางวิทยาศาสตร์คอมพิวเตอร์และฉันคิดว่ามีอีกมากมายที่เปิดสอนเช่นกัน

เท่าที่หนังสือเป็นไปฉันขอแนะนำให้ Yuval เป็นอันดับสองยกเว้น CLRS นั้นเป็นหนังสืออ้างอิงที่ดี แต่มีหนังสือแนะนำเพียงเล็กน้อยที่น่าสนใจเพียงแค่นั่งอ่าน สำหรับรอบแรกที่ส่วนอัลกอริทึมฉันอาจแนะนำอัลกอริทึมโดย Dasgupta และคณะ . ลิงค์ก่อนหน้าคือการพิมพ์ล่วงหน้าออนไลน์ฟรี แต่ก็ยังค่อนข้างถูกที่จะซื้อในหนังสือปกอ่อน


ตกลง. ฉันขอขอบคุณคำตอบของคุณ ขอบคุณมาก.
CSLover

2

การอ้างอิงที่คุณแนะนำจะทำให้นักวิทยาศาสตร์คอมพิวเตอร์ทางทฤษฎี "มาก" แต่ฉันก็ไม่พบประโยชน์ใด ๆ ที่จะอ่านหนังสือเหล่านี้หากคุณอยู่ในระดับที่ไม่ได้อยู่ในกลุ่ม CS แน่นอนว่าทั้งหมดนี้ขึ้นอยู่กับสิ่งที่คุณต้องการ

ฉันพบหนังสือบางเล่มเช่น Book 14, 15, 16, 17 ไม่ได้มีไว้สำหรับนักวิทยาศาสตร์คอมพิวเตอร์ เล่ม 3 เป็นคำพูดที่ละเอียดอ่อน เป็นเรื่องทั่วไปสำหรับนักเรียนทุกคน ดังนั้นฉันถือว่าหนังสือ 1 และ 2 เหมือนกัน

สำหรับฉัน - อยู่ในสถานการณ์เดียวกันกับคุณไม่ใช่นักวิทยาศาสตร์คอมพิวเตอร์ (แต่แทนที่จะเป็นวิศวกรไฟฟ้า / คอมพิวเตอร์) - ฉันขอเสนอแนวทางเริ่มต้นสองทิศทาง:

  • การออกแบบและวิเคราะห์อัลกอริธึม (หลายคนแนะนำCLRS Introduction to Algorithmsมันเป็นการอ้างอิงที่ดี แต่ฉันไม่ได้เป็นแฟนของมันและเริ่มแรกมันเป็นการยากที่จะเข้าใจและบางครั้งก็ verbose ฉันขอแนะนำว่า ทำตามสารบัญและจากนั้นคุณตรวจสอบหลักสูตรออนไลน์สำหรับการอ้างอิงที่ชัดเจน)

--- ตรวจสอบให้แน่ใจว่าคุณเชี่ยวชาญภาษาการเขียนโปรแกรมเพื่อนำอัลกอริธึมและโครงสร้างข้อมูลที่คุณเรียนรู้มาใช้ดังนั้นฉันขอแนะนำชุดอัลกอริทึมของเซดจ์วิก (น่าทึ่ง!)

--- เพิ่ม: ฉันยังแนะนำหนังสือเล่มนี้: อัลกอริทึม Combinatorial: การสร้างการแจงนับและค้นหาโดย D. Kreher นี่เป็นหนังสือที่ดีมาก จะทำให้คุณมีความต้องการที่แตกต่างกันสำหรับปัญหาต่าง ๆ ในอัลกอริทึม

  • combinatorics (โดยเฉพาะทฤษฎีกราฟ), หลักสูตร Combinatorics โดย JH van Lint, RM Wilsonเป็นสิ่งที่ดี มีการอ้างอิงอื่น ๆ อีกมากมาย โดยปกติแล้วหนังสือ combinatorics ที่รู้จักกันดีก็เพียงพอแล้ว - ทุกสิ่งที่คุณจะได้รับจากการอ้างอิงเพิ่มเติมจากอินเทอร์เน็ต ฉันชอบ: peter j cameron combinatorics และทฤษฎีกราฟ Bondy และ Murty

  • เดิมพันของความน่าจะเป็น (จำเป็นเสมอ) เป็นที่น่าสังเกตว่าศาสตร์หลายแขนงไม่ได้ใช้ความน่าจะเป็น แต่เชื่อฉันสิ่งที่คุณต้องรู้คือพื้นฐาน

จากนั้น: นักวิจัยหลายคนเรียกตัวเองว่านักวิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎีมุ่งเน้นไปที่ทฤษฎีการคำนวณ (automota และอื่น ๆ ) เป็นอย่างมาก มีหนังสือดีๆสำหรับเรื่องนี้ (ดู Yuvul Filmus โพสต์)

Aho และ Ullman นั้นดี (จริงๆแล้วหนังสือทั้งหมดของ Ullman นั้นดี) ทำให้การออกแบบคอมไพเลอร์สะดวกสบาย (ดูhttp://infolab.stanford.edu/~ullman/ullman-books.html )

หลังจากนั้น: ทุกอย่างขึ้นอยู่กับสิ่งที่คุณต้องการจะทำ ทิศทางที่แตกต่างกันคุณสามารถทำได้: 1) ฐานข้อมูล 2) การจดจำรูปแบบและการขุดข้อมูล 3) อัลกอริธึมแบบกระจาย 4) พื้นฐานของภาษาโปรแกรม 4) อัลกอริธึมแบบสุ่มและอื่น ๆ อีกมากมาย [แต่ละอันต้องการโพสต์อื่น] แต่พยายามมีความคิดเกี่ยวกับทั้งหมด!

* แนวคิดทั่วไป: ถ้าคุณยังใหม่กับ CS คุณควรทำให้ CS ย่อยเป็นโดเมนย่อยได้มากที่สุด การ จำกัด ตัวเองกับ "ทฤษฎี" จะทำให้คุณสูญเสียความคิดสร้างสรรค์ CS ไปมาก! * (ความคิดเห็นของฉัน)


สำหรับฉันการเขียนโปรแกรมการทำงาน อย่าใช้หนังสือเก่าเหมือนที่คุณอ้างถึง ภาษาที่ใช้งานได้ต้องการในอุตสาหกรรม มีบทเรียนบางอย่างในอินเทอร์เน็ตเกี่ยวกับภาษาเช่น Scheme, Haskel และ Erlang ไม่ได้รับทฤษฎีมากนี่คือคำแนะนำของฉัน
AJed

ความคิดเห็นที่ดีทั้งหมด เป้าหมายของฉันคือการออกแบบโปรแกรมการเรียนรู้ด้วยตนเองที่สมบูรณ์และคำถามนี้เกี่ยวข้องเฉพาะกับส่วนของโปรแกรมซึ่งฉันคิดว่าเป็นสิ่งที่ท้าทายที่สุดในการจัดระเบียบ พื้นที่อื่น ๆ ได้แก่ : โครงสร้างข้อมูล & อัลกอริธึมสถาปัตยกรรมคอมพิวเตอร์ระบบปฏิบัติการระบบเครือข่ายความปลอดภัยและวิทยาการเข้ารหัสความเท่าเทียมวิธีการทางปัญญาประดิษฐ์กราฟิกและการจำลองฐานข้อมูลภาษาการเขียนโปรแกรมคอมไพเลอร์วิศวกรรมซอฟต์แวร์และปรัชญา Unix ในที่สุด ฉันคิดว่าสิ่งเหล่านี้ส่วนใหญ่เป็นพื้นฐานของ CS แต่จะรับประกันคำถามแยกต่างหาก
CSLover

เคล็ดลับที่ดีที่สุดของคุณคือรากฐานที่แข็งแกร่งในการออกแบบและวิเคราะห์อัลกอริทึม - ทุก ๆ ฟิลด์เป็นส่วนย่อยของการออกแบบและวิเคราะห์อัลกอริธึม
AJed

คุณจะใจดีและอธิบายอัลกอริทึม Sedgewick เล่มไหนที่คุณแนะนำ? เขามีหนึ่งชื่อ "อัลกอริทึม" แต่ไม่ใช่ซีรีส์ นอกจากนี้เขายังมี "อัลกอริทึมใน C ++" (หรือภาษาอื่น ๆ ) ซึ่งเป็นหนังสือ 2 เล่มที่ฉันเชื่อว่ามีทั้งหมด 5 ส่วน
CSLover

อันที่ฉันใช้คืออัน C ++ ฉันใช้พวกเขาเป็นข้อมูลอ้างอิงแม้ว่า นี่คือเว็บไซต์ของเขาcs.princeton.edu/~rs
AJed
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.