ฉันควรลงทุนในโครงสร้างข้อมูลและอัลกอริทึมต่อไปหรือไม่ [ปิด]


28

วันนี้ฉันลงทุนอย่างมากในโครงสร้างข้อมูลและอัลกอริทึมและพยายามแก้ปริศนาการเขียนโปรแกรมบางอย่าง
ฉันพยายามเขียนโปรแกรมและแก้ปัญหาด้วย Java และ Clojure

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

จากการศึกษาโครงสร้างข้อมูลและอัลกอริธึมฉันจะกลายเป็นโปรแกรมเมอร์ที่ดีขึ้นหรือวิชาเหล่านั้นมีความสำคัญในช่วงปีการศึกษา?


5
คุณกำลังทำงานกับโครงสร้างข้อมูลและอัลกอริทึมใด คุณกำลังใช้ตัวต่อในการเขียนโปรแกรมอะไร
oosterwal

ฉันกำลังทำงาน / ยังทำงานกับตารางแฮชแผนที่ฮีปกราฟต้นไม้และอัลกอริธึมประกอบ (การข้ามการแฮชการค้นหาการแทรกการลบและอัลกอริทึมการเรียงลำดับ) ปริศนามาจากการแข่งขัน TopCoder และ Google Code Jam
Chiron

คำตอบ:


24

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

ขั้นต่ำระดับความรู้สำหรับขั้นตอนวิธีและ datastructures เพื่อที่จะประสบความสำเร็จจะทำให้คุณต้อง:

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

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

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

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


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

1
อืมการเขียนอัลกอริธึมของ Ukkonen ใน Python นั้นยากพอฉันสามารถจินตนาการได้ว่าจะทำในชุดประกอบ
rjzii

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

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

14

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

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

ฉันเห็นผู้คนจำนวนมากกระโดดเข้าไปในสิ่งต่าง ๆ เช่น Qt ที่จบลงด้วยการถามคำถามที่แสดงความรู้เป็นศูนย์ของ C ++ (ตัวอย่าง) พวกเขากำลังพยายามข้ามขั้นตอนมากเกินไปและในที่สุดมันใช้เวลานานกว่าในการเรียนรู้ ฉันจะบอกว่าคุณอยู่ในเส้นทางที่ถูกต้อง


ฉันทำการเขียนโปรแกรม Java อย่างมืออาชีพ (หมายถึงฉันว่าจ้าง) ตั้งแต่ปี 2007 ตอนนี้ฉันกำลัง (อย่างน้อยก็หวังว่า) จะพัฒนา iOS
Chiron

9

คุณไม่ต้องเสียเวลา

หากในระหว่างการทำงานคุณต้องใช้เครื่องมือหรือกรอบงานที่คุณไม่เคยใช้มาก่อนคุณจะได้เรียนรู้และใช้งาน

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

สิ่งที่ฉันพยายามจะพูดคือสิ่งนี้คือสิ่งที่คุณจะไม่เรียนรู้ด้วยการทำคุณต้องเรียนรู้ด้วยการเรียนรู้ไม่ว่าจะในสถานการณ์ทางวิชาการหรือการลงทุนส่วนตัวที่คุณพยายาม ทำเดี๋ยวนี้.


6

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


1

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

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

โดโรธีลงไปที่โพรงกระต่าย!


1

ฉันใช้เวลาไปกับการแฮ็คใน C / C ++ ด้วย OpenGL ฉันรู้ภาษาและ API ดีพอ ... และฉันได้กลายเป็นนักพัฒนาและโปรแกรมเมอร์ที่สมเหตุสมผลเนื่องจากประสบการณ์นั้น ที่กล่าวว่าความรู้อัลกอริทึมจริงที่จำเป็นในการแก้ปัญหาต่าง ๆ พบว่าฉันเพิ่งจะสามารถเข้าใจ

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

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

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


0

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

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