หนังสืออัลกอริทึมในหัวข้อต่างๆ


11

ฉันได้รับมอบหมายให้สร้างห้องสมุดหนังสือเกี่ยวกับอัลกอริทึมสำหรับ บริษัท ขนาดเล็กของเรา (ประมาณ 15 คน) งบประมาณมากกว่า 5k แต่น้อยกว่า 10k แน่นอนดังนั้นฉันสามารถซื้อหนังสือได้พอใช้ ทุกคนที่นี่มีอย่างน้อยปริญญาตรีใน CS หรือสาขาที่เกี่ยวข้องอย่างใกล้ชิดดังนั้นในขณะที่ฉันจะได้รับหนังสือเรียนพื้นฐานเช่น Cormen ฉันสนใจหนังสือที่ดีในหัวข้อขั้นสูง (ฉันจะได้รับเล่ม 4 ของ Knuth, BTW)

รายการหัวข้อบางส่วนจะเป็น:

  • ขั้นตอนวิธีการเรียงลำดับ

  • อัลกอริธึมกราฟ

  • อัลกอริธึมสตริง

  • อัลกอริทึมแบบสุ่ม

  • อัลกอริทึมแบบกระจาย

  • อัลกอริทึม Combinatorial

  • เป็นต้น

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

อุดมคติก็คือการค้นหาสิ่งใดก็ตามที่จะครอบคลุมโครงสร้างและอัลกอริธึมเจ๋ง ๆ ล่าสุดที่คนส่วนใหญ่อาจไม่เคยได้ยินมาก่อน


แก้ไข: นี่คือหนังสือเบื้องต้นที่ฉันคิดว่าฉันควรได้รับ:

  • รู้เบื้องต้นเกี่ยวกับอัลกอริทึมโดย Cormen และคณะ

  • การออกแบบอัลกอริทึมโดย Kleinberg, Tardos

  • The Art of Computer Programming Vol 1-4 โดย Knuth

  • อัลกอริทึมการประมาณโดย Vazirani

  • การออกแบบอัลกอริทึมการประมาณโดยวิลเลียมสัน, Shmoys

  • อัลกอริทึมแบบสุ่มโดย Motwani, Raghavan

  • ทฤษฎีการคำนวณเบื้องต้นโดย Sipser

  • ความซับซ้อนในการคำนวณโดย Arora, Barak

  • คอมพิวเตอร์และ Intractability โดย Garey และ Johnson

  • การเพิ่มประสิทธิภาพ Combinatorial โดย Schrijver

หนังสืออื่น ๆ อีกสองสามเล่มที่เพื่อนร่วมงานของฉันต้องการที่เกี่ยวข้องกับเทคนิคและอัลกอริธึมสำหรับการออกแบบภาษาคอมไพเลอร์และวิธีการที่เป็นทางการคือ:

  • ประเภทและภาษาการเขียนโปรแกรมโดย Pierce

  • หลักการตรวจสอบแบบจำลองโดย Baier, Katoen

  • ผู้แต่ง: หลักการเทคนิคและเครื่องมือโดย Aho, Lam, Sethi, Ullman

  • คู่มือการออกแบบคอมไพเลอร์: การปรับให้เหมาะสมและการสร้างรหัสเครื่องรุ่นที่สองโดย Srikant, Shankar

  • คู่มือการเก็บขยะ: ศิลปะการจัดการหน่วยความจำอัตโนมัติโดย Jones, Hosking, Moss


หนังสือที่ควรมีทุกห้องสมุด: * การออกแบบอัลกอริธึมโดย Jon Kleinberg และÉva Tardos * ความรู้เบื้องต้นเกี่ยวกับทฤษฎีการคำนวณโดย Michael Sipser * คอมพิวเตอร์และ Intractability: คำแนะนำเกี่ยวกับทฤษฎีความสมบูรณ์แบบโดย MR Garey และ DS Johnson
Pål GD

> * ความรู้เบื้องต้นเกี่ยวกับทฤษฎีการคำนวณโดย Michael Sipser หนังสือเล่มนี้เป็นหนังสือที่ยอดเยี่ยม แต่เป็นเรื่องเกี่ยวกับ Automata และ Languages, บริบทที่ไม่มีภาษา, Turing Machines, ทฤษฎีความซับซ้อนและอื่น ๆ มันไม่ได้เกี่ยวกับอัลกอริทึมมากนัก
Devid

1
ว้าวนี่เป็นคำถามที่กว้างขวาง คุณคาดหวังว่าจะตรวจสอบคุณภาพและความครอบคลุมของการเลือกอย่างไร พื้นหลังของคุณคืออะไร บริษัท ของคุณทำงานอะไร คุณมีคนที่มีปริญญาโทหรือปริญญาเอกหรือไม่?
Raphael

1
ประกาศของผู้ดำเนินรายการ: โปรดอย่าโพสต์คำตอบแบบหนังสือเล่มเดียวและโปรดอธิบายเหตุผลที่คุณเลือกใช้ตัวเลือกเหล่านี้ มีงบประมาณ $ 5k ที่นี่: อธิบายว่าคุณจะใช้จ่ายอย่างไร! บอกให้เราทราบว่าหนังสือเล่มใดที่คุณคิดว่าจะต้องมีหัวข้อใดที่ควรสำรวจเพิ่มเติมวิธีการเลือกของคุณ ...
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

คุณสนใจในการออกแบบหรือการวิเคราะห์อัลกอริธึมเป็นหลักหรือไม่? ถ้าเป็นเช่นนั้นคุณต้องการให้คนของคุณมีความสามารถในการวิเคราะห์เชิงทฤษฎีหรือไม่หรือคุณต้องการให้พวกเขามีความเชี่ยวชาญในการประเมินประสิทธิภาพอย่างมีประสิทธิภาพมากขึ้นหรือไม่?
Raphael

คำตอบ:


13

ฉันยังไม่ได้อ่านหนังสือมากพอที่จะตั้งชื่อหนังสือมูลค่า 5,000 เหรียญ ดังนั้นฉันจะแนะนำบางกลุ่มของวรรณกรรมที่คุณควรครอบคลุมและชี้ให้คุณไปยังตัวแทนที่เลือก ฉันไม่สามารถเรียกร้องให้อ่านหนังสือส่วนใหญ่ได้อย่างเต็มที่ดังนั้นฉันต้องพึ่งพาคำอธิบายความประทับใจและชื่อเสียงเป็นหลัก ฉันได้ตรวจสอบหรือทำงานกับพวกเขาส่วนใหญ่ในระดับหนึ่งหรือให้ผู้เชี่ยวชาญแนะนำ

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

  • พื้นฐาน
    ถึงแม้ว่าคนของคุณจะได้เรียนรู้พวกเขาในบางจุดคาดหวังให้พวกเขามองหาพื้นฐาน เนื่องจากแหล่งที่มาเช่น Wikipedia นั้นอยู่ต่ำกว่ามาตรฐานหรือผิดพลาดอยู่เสมอคุณต้องการให้พวกเขามีข้อความอ้างอิงที่เหมาะสม

    ตัวเลือกยอดนิยม ได้แก่

    • รู้เบื้องต้นเกี่ยวกับอัลกอริทึมโดย Cormen, Leiserson และคณะ
      การแนะนำแบบกว้างมากที่ครอบคลุมอัลกอริธึมพื้นฐานและโครงสร้างข้อมูลรวมถึงเทคนิคการวิเคราะห์พื้นฐาน ข้อความมาตรฐานที่ใช้บ่อยเพื่อจุดประสงค์ในการสอนและมีให้ในรุ่นที่ 3 (ดังนั้นความผิดพลาดส่วนใหญ่ควรได้รับการกำจัดในขณะนี้) แบบฝึกหัดมากมาย
    • อัลกอริทึมโดย Sedgewick และ Wayne
      อีกข้อความมาตรฐานในรุ่นที่สี่ของมัน กว้างน้อยกว่า Cormen แต่ให้ความสำคัญกับรายละเอียดการใช้ จำนวนของวัสดุออนไลน์รวมทั้งหลักสูตรฟรีที่ Coursera แบบฝึกหัดมากมาย
    • รู้เบื้องต้นเกี่ยวกับอัลกอริทึม - วิธีการสร้างสรรค์โดย Udi Manber
      ค่อนข้างบางหัวข้อที่เลือก แต่นำเสนอด้วยความสนใจกับการสอน มุ่งเน้นไปที่กลยุทธ์การอุปนัย มีแบบฝึกหัดและวิธีแก้ปัญหามากมาย (หรืออย่างน้อยคำแนะนำ) สำหรับบางคน ข้อมูลอ้างอิงสำรองที่ดีหากคุณไม่ชอบหนังสือเรียนที่แนะนำเพราะเป็นสไตล์ที่ผิดปกติ
    • คณิตศาสตร์คอนกรีตโดย Graham, Knuth และ Patashnik
      ครอบคลุมคณิตศาสตร์ไม่ต่อเนื่องซึ่งเกี่ยวข้องกับการวิเคราะห์อัลกอริทึม หายากในการมุ่งเน้นความต้องการด้านวิทยาศาสตร์คอมพิวเตอร์และความเข้มงวด คุณภาพสูงมาก แบบฝึกหัดมากมายพร้อมทางออก
  • O

    • แนะนำการวิเคราะห์อัลกอริทึมโดย Sedgewick และ Flajolet
      เทคนิคพื้นฐานสำหรับการวิเคราะห์อัลกอริทึมที่แม่นยำ เขียนโดยผู้บุกเบิกภาคสนาม นอกจากนี้ยังมีหลักสูตรออนไลน์ฟรี
    • The Art of Computer Programmingโดย Knuth
      การอ้างอิงสำหรับอัลกอริธึมคุณภาพสูงระดับต่ำและวิเคราะห์อย่างแม่นยำสำหรับปัญหาทั้งหมด ยังทำหน้าที่เป็นข้อมูลอ้างอิง
  • แบบสำรวจขั้นสูง

    • โครงสร้างข้อมูลที่ใช้งานได้จริงโดย Okasaki
      Classic และวรรณคดีขั้นพื้นฐานมักเน้นที่กระบวนทัศน์กระบวน หากคุณต้องการทำงานในกระบวนทัศน์การทำงานจำเป็นต้องใช้เทคนิคใหม่สำหรับโครงสร้างข้อมูลที่มีประสิทธิภาพ หนังสือเล่มนี้เป็นภาพรวมอย่างละเอียดทั่วบริเวณ
    • โครงสร้างข้อมูลขั้นสูงโดยทองเหลือง
      บางครั้งเทคนิคพื้นฐานไม่เพียงพอ นี่คือภาพรวมเกี่ยวกับโครงสร้างข้อมูลขั้นสูงที่มีรหัสและการอ้างอิงจำนวนมาก
    • อัลกอริทึมสำหรับปัญหาหนักโดย
      ทฤษฎีความซับซ้อนของHromkovič บอกเรา (ในฐานะผู้ปฏิบัติงาน) ไม่ต้องมองหาอัลกอริทึมที่แน่นอน แต่มีประสิทธิภาพสำหรับปัญหาธรรมชาติมากมาย มีเทคนิคมากมายสำหรับการแก้ไขปัญหาเหล่านี้ ข้อความนี้แสดงให้คุณเห็นว่า
  • วรรณคดีเฉพาะ

    • คอมไพเลอร์: หลักการเทคนิคและเครื่องมือ aka มังกรหนังสือโดย Aho et al,
      ควรคุณจำเป็นต้องสร้างหรือคนจรจัดกับคอมไพเลอร์นี้เป็น ข้อความมาตรฐานในพื้นที่
    • Network Flows: ทฤษฎีอัลกอริทึมและแอปพลิเคชันโดย Ahuja
      ปัญหามากมายที่สามารถจำลองเป็นปัญหาการไหลของเครือข่าย หนังสือเล่มนี้ให้ความคุ้มครองเต็มรูปแบบของฟิลด์
    • แบบจำลองความน่าจะเป็นเชิงกราฟโดย Koller และตัว
      แบบกราฟิกฟรีดแมนเป็นเครื่องมือสำคัญในการสร้างแบบจำลองสถานการณ์สำหรับการเรียนรู้ของเครื่อง (อื่น ๆ ) ความน่าจะเป็น นี่คือภาพรวมที่ครอบคลุมเกี่ยวกับความซับซ้อน มีความเกี่ยวข้องกับการเรียนการสอนออนไลน์ฟรี
    • คู่มือของอัลกอริทึมการจับคู่สตริงที่แน่นอนโดยการจับคู่สตริง Charras และ Lecrog
      เป็นงานที่สำคัญมากเมื่อจัดการกับข้อมูล หนังสือเล่มนี้แสดงรายการอัลกอริทึมที่เกี่ยวข้องกับงานส่วนใหญ่ (หากไม่ใช่ทั้งหมด) รวมถึงคำอธิบายระดับสูงรวมถึงการปรับใช้
    • Analytic Combinatoricsโดย Sedgewick และ Flajolet
      การดำน้ำทางคณิตศาสตร์อย่างลึกซึ้งหลังจาก "การแนะนำการวิเคราะห์อัลกอริทึม" โดยผู้เขียนคนเดียวกัน ไม่ใช่สำหรับทุกคน แต่เป็นทองคำสำหรับผู้ที่สนใจ
    • อัลกอริทึมเกี่ยวกับสตริงต้นไม้และลำดับโดย Gusfield
      หากคุณจำเป็นต้องจัดการกับข้อมูลสตริงจำนวนมาก (โดยเฉพาะในบริบททางชีววิทยา) นี่เป็นหนังสือที่เข้าถึงได้เนื่องจากให้ภาพรวมของโครงสร้างข้อมูลและอัลกอริธึมที่เกี่ยวข้อง
  • สำหรับผู้ประกอบการ

    • รูปแบบการเขียนโปรแกรมแบบขนานโดย Mattson et al.
      ในทางปฏิบัติคุณอาจต้องการใช้หลายเครื่องเพื่อจัดการกับปัญหาใหญ่ หนังสือเล่มนี้เป็นภาพรวมระดับสูงที่ขับเคลื่อนด้วยตัวอย่างสำหรับวิธีการเช่นนั้นคือวิธีจัดระเบียบและย้ายข้อมูลและตัวแทนการคำนวณ นอกจากนี้ยังกล่าวถึงวิธีการนำไปใช้กับเครื่องมือที่มีอยู่
    • คำแนะนำเกี่ยวกับอัลกอริทึมทดลองโดย McGeoch
      เมื่อการวิเคราะห์เชิงทฤษฎียากหรือหยาบเกินไปคุณต้องทำการทดลอง นี่คือการแนะนำวิธีการออกแบบการทดลองเกี่ยวกับอัลกอริทึมอย่างถูกต้อง
    • Definitive ANTLR 4 การอ้างอิงโดย Parr
      คุณมักจะต้องใช้ภาษาและเครื่องมือเฉพาะโดเมนในการวิเคราะห์ ANTLR เป็นตัวสร้างคอมไพเลอร์ที่เป็นผู้ใหญ่และสะดวกสบายและนี่คือหนังสือที่เหมาะที่สุดสำหรับการเรียนรู้วิธีใช้มัน Parr ยังมีหนังสืออื่น ๆ เกี่ยวกับ DSL ที่ควรค่าแก่การเช็คเอาท์

หากคุณต้องการข้อมูลล่าสุดคุณควรพิจารณาให้คนของคุณเข้าถึงวารสารและการประชุมทางวิชาการโดยการร่วมมือกับห้องสมุดมหาวิทยาลัย นอกจากนี้คุณยังสามารถให้พวกเขาเข้าร่วมการประชุมตามหัวข้อที่เกี่ยวข้อง บริษัท ของคุณ.

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


และแน่นอนส่งพวกเขามาที่นี่พร้อมกับปัญหาที่น่าสนใจ :)
Raphael


@Bartek: ไม่เคยได้ยินดังนั้นฉันไม่สามารถแนะนำได้
Raphael

4

นี่คือคอลเล็กชั่นหนังสือแบบสุ่มเกี่ยวกับอัลกอริธึมขั้นสูงจากสิ่งที่ฉันพิจารณาว่าเป็นหนังสือที่ดีเกี่ยวกับอัลกอริธึมขั้นสูง แน่นอนว่านี่เป็นเพียงความเห็นส่วนตัวของฉันและมีหนังสือดีๆอีกหลายเล่ม

  • อัลกอริทึมการประมาณโดย Vijay V. Vazirani
  • การออกแบบอัลกอริทึมการประมาณโดย David P. Williamson, David B. Shmoys
  • เรขาคณิตเชิงคำนวณ: การแนะนำโดยอัลกอริทึมแบบสุ่มโดย Ketan Mulmuley
  • อัลกอริทึมแบบสุ่มโดย Rajeev Motwani, Prabhakar Raghavan
  • อัลกอริทึมเกี่ยวกับสตริงต้นไม้และลำดับโดย Dan Gusfield
  • การเพิ่มประสิทธิภาพ Combinatorial โดย William J. Cook, William H. Cunningham, William R. Pulleyblank, Alexander Schrijver

คุณควรพิจารณาหนังสือ Kleinberg / Tardos ซึ่งเป็นตำราเรียนที่ดี

นอกจากนี้คุณควรรู้ว่าในบางหัวข้อมี "คู่มือ" ซึ่งให้ภาพรวมของสารานุกรมบนฟิลด์ (ตัวอย่างเช่นคู่มือของเรขาคณิตการคำนวณ) แก้ไขโดย JR Sack, J. Urrutia ขอให้สังเกตว่าคู่มือเหล่านี้มีราคาแพง ดังนั้นการซื้อพวกเขาอาจช่วยให้คุณใช้จ่าย 5k


1
คุณพูดว่านี่เป็นคอลเลกชัน "สุ่ม" คุณมีเหตุผลพิเศษในการแนะนำหนังสือเหล่านั้นหรือไม่ OP ควรทำอย่างไรกับส่วนที่เหลืออีก $ 4.5k
กราฟิลส์

4

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

1) Cormen เป็นข้อความมาตรฐาน Sedgewick เป็นข้อความมาตรฐานอื่น ฉันได้รับเพิ่มเติมจาก Sedgewick เสมอ แต่ YMMV คุณดูเหมือนจะมีงบประมาณ ซื้อทั้งคู่

2) ฉันไม่มีสำเนาของ "The Garbage Collection Handbook" แต่ฉันมีสำเนาย่อของการสำรวจก่อนหน้าของ Jones & Lin เกี่ยวกับการเก็บขยะ หากคุณตั้งใจจะจัดการหน่วยความจำอัตโนมัติคุณควรซื้อรุ่นนี้

3) คุณยังมีหนังสือที่มีประโยชน์มากมายเกี่ยวกับทฤษฎีการแยกวิเคราะห์และออโตมาตะ แต่คุณขาดหนังสือสองเล่ม (สามเล่ม) ที่ฉันคิดว่ามีประโยชน์มากที่สุด: ทฤษฎีการแยกวิเคราะห์ของ Sippu & Soisalon-Soisinen และเทคนิคการแยกวิเคราะห์ของ Dick Grune คู่มือปฏิบัติ อย่างแรกคือภาพรวมที่ดีของทฤษฎีและอย่างที่สองเป็นการสรุปภาพรวมของการปฏิบัติ (โดยทั้งหมดได้รับหนังสือมังกรด้วย แต่ฉันจะเดิมพันว่าคุณจะจบลงด้วยการใช้ Grune เพิ่มเติม)

4) ห้องสมุดทุกแห่งในโครงสร้างข้อมูลต้องมีสำเนาของ "โครงสร้างข้อมูลที่ทำงานได้อย่างสมบูรณ์" ของ Okasaki ฉันไม่คิดว่าฉันเคยอ่านหนังสือเล่มนี้ที่มีความคิดที่น่าสนใจมากมาย

5) ฉันไม่ได้เป็นเจ้าของ "Algorithms on Strings" ของ Maxime Crochemore แต่ฉันหวังว่าฉันจะทำ ใช้ประโยชน์ได้จริงและมีความคิดที่เป็นประโยชน์มากมาย

  • อัลกอริทึมใน C ++ / Java / C (เลือกหนึ่งอัน), Third Edition โดย Robert Sedgewick สองเล่ม แอดดิสัน - เวสลีย์ 2544

  • คู่มือรวบรวมขยะโดย Richard Jones, Antony Hosking และ Eliot Moss

  • ทฤษฎีการแยกวิเคราะห์โดย Seppo Sippu และ Eljas Soisalon-Soininen เล่มที่สอง: เล่ม 1 ภาษาและการแยกวิเคราะห์ ฉบับ 2 LR (k) และ LL (k) การแยกวิเคราะห์ Springer, 1988

  • เทคนิคการแยกวิเคราะห์คำแนะนำเชิงปฏิบัติรุ่นที่สองโดย Dick Grune และ Ceriel JH Jacobs Springer, 2008

  • โครงสร้างข้อมูลที่ทำงานได้อย่างหมดจดโดย Chris Okasaki เคมบริดจ์, 1998

  • อัลกอริทึมเกี่ยวกับสตริงโดย Maxime Crochemore, Christophe Hancart, Thierry Lecroq เคมบริดจ์, 2007

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.