นักพัฒนาควรรู้อัลกอริทึมและโครงสร้างข้อมูลใดบ้าง [ปิด]


24

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

ในการเป็นผู้พัฒนา Java ที่ประสบความสำเร็จฉันจำเป็นต้องรู้อัลกอริธึมขั้นสูงทั้งหมดเช่นที่ได้รับในCLRSหรือไม่?

คุณสามารถแนะนำรายการหัวข้อที่ฉันควรเรียนรู้ตามลำดับจากมากไปน้อย

ฉันต้องรู้ไหม:

  • ที่ไหน?
  • เรียงลำดับ?
  • กราฟ / ต้นไม้?

etc?


1
@jonsca: การตลาดพันธมิตรใช่มั้ย ;)
Chankey Pathak

Nah, ดี, SE เปลี่ยนแปลงการเชื่อมโยงดังกล่าว แต่ฉันเพิ่งคิดว่าทุกคนไม่ทราบชื่อย่อเหล่านั้น :)
jonsca

คำตอบ:


17

บทนำสู่อัลกอริทึมของ Cormenเป็นหนังสือที่ดีสำหรับรากฐานทางทฤษฎีพื้นฐาน

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


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

ตกลงแม้ว่าเพียงแค่รับวิญญาณของสัญกรณ์ O ใหญ่ไปไกล
Joonas Pulakka

8

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

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


0

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


0

ฉันกำลังเรียนรู้จาวาวันนี้

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

ในการเป็นผู้พัฒนา Java ที่ประสบความสำเร็จฉันจำเป็นต้องรู้อัลกอริธึมขั้นสูงทั้งหมดเช่นที่ได้รับใน CLRS หรือไม่?

คุณสามารถแนะนำรายการหัวข้อที่ฉันควรเรียนรู้ตามลำดับความสำคัญของลำดับถัดมา

บอกชื่อบางหัวข้อที่ฉันต้องรู้ เช่นการค้นหาการเรียงลำดับกราฟต้นไม้เป็นต้น?

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

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

แยกการเรียนรู้ภาษาโปรแกรม (ในกรณีของคุณ Java) ด้วยการเรียนรู้การวิเคราะห์อัลกอริทึม (ซึ่งแตกต่างจาก "การท่องจำ" ของอัลกอริทึมและโครงสร้างข้อมูล)

George T. Heineman, Gary Pollice และ "Algorithms in a Nutshell" ของ Gary Seliceเป็นการเริ่มต้นที่ดี "อัลกอริทึม" โดย Sanjoy Dasgupta, Christos Papadimitriou และ Umesh Vaziraniเป็นตำราเรียนที่ดีอีกเรื่องหนึ่ง

ความคิดที่ดีที่สุดคือการใช้หลักสูตรสินเชื่อ 9-12 หลักสูตรในการเขียนโปรแกรมก่อนที่จะเข้าเรียนหลักสูตรระดับปริญญาตรีระดับ 3000 ในขั้นตอนวิธี นอกจากนี้การศึกษาด้วยตนเองกับหนังสือสองเล่มที่ฉันกล่าวถึงอาจเป็นทางเลือกที่ดี (การศึกษาด้วยตนเองอาจไม่เหมาะสำหรับทุกคน)

โชคดี!

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