เหตุใด CS จึงสอนให้จดจำ? [ปิด]


23

ฉันได้รับวิทยาการคอมพิวเตอร์ระดับสูงสำหรับปีที่ผ่านมานี้ในโรงเรียนมัธยม ดูเหมือนกับว่าเราได้รับการสอนให้จดจำรหัสและฟังก์ชั่นต่างๆไม่ใช่วิธีที่จะใช้ทรัพยากรและมีประสิทธิภาพในการใช้เอกสารและสิ่งที่คล้ายกัน

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

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

เหตุใด CS จึงสอนโดยเน้นที่การท่องจำรหัสและฟังก์ชั่นซึ่งแตกต่างจากการสอนทักษะที่มีประโยชน์รวมถึงวิธีใช้และตีความเอกสารรหัสตัวอย่างโปรแกรมดีบั๊กและสิ่งอื่น ๆ


34
CS ไม่ได้เกี่ยวกับการท่องจำรหัสและฟังก์ชั่น คุณกำลังเรียน CS อยู่ที่ไหน ฉันขอแนะนำปัญหาที่แท้จริงได้ไหมว่าหลักสูตรที่คุณเรียนนั้นเป็นเรื่องไร้สาระ?
Andres F.

1
@AndresF OP อยู่ในสาขาวิทยาการคอมพิวเตอร์ขั้นสูงซึ่งเป็นหลักสูตรที่เปิดสอนสำหรับนักเรียนมัธยมปลาย (ก่อนเข้ามหาวิทยาลัย)

3
@GlennNelson โอ๊ะโอ! ฉันอ่านผิด ตกลงในกรณีนี้esqew : คุณจะรู้สึกโล่งใจในระดับมหาวิทยาลัย CS ไม่ได้เกี่ยวกับการท่องจำรหัสในระดับมหาวิทยาลัย คุณจะต้องอ่านสิ่งต่าง ๆ มากมาย;) การศึกษา CS ไม่จำเป็นต้องเกี่ยวกับการหางานด้วย (คุณอาจจะผิดหวังถ้าคุณคิดว่ามันเป็น)
Andres F.

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

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

คำตอบ:


37

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

ตัวอย่างเช่นคุณควรรู้อัลกอริทึมการเรียงลำดับหลายวิธีการใช้งานวิธีการทำงานเมื่อใช้งานได้ดีที่สุดและเมื่อไม่ควรใช้ สิ่งนี้สามารถค้นหาได้เสมอ แต่ไม่ควรจะเป็น - อีกต่อไปเกินกว่าที่นักคณิตศาสตร์จะต้องค้นหา 6 ครั้ง 8


9
คุณควรรู้ธรรมชาติพื้นฐานของอัลกอริธึมการเรียงลำดับ แต่เป็นเวลาประมาณ 15 ปีแล้วที่ฉันมีโอกาสเขียนสิ่งอื่นนอกเหนือจากการเรียงลำดับฟอง (สำหรับ N ขนาดเล็กมากบางครั้งก็เป็นคำตอบที่ดีกว่า)
Loren Pechtel

1
ฉันหวังว่าฉันจะบอกได้ว่าทุกวิชาวิทยาศาสตร์คอมพิวเตอร์นั้นดี ที่โรงเรียนมัธยมของฉันพวกเขาสอนไวยากรณ์พื้นฐานของจาวา ... ตลอดทั้งปี หลายคนในชั้นเรียนคุยโม้ว่าเป็น "โปรแกรมเมอร์" เมื่อพวกเขาไม่สามารถอธิบายความแตกต่างระหว่าง Bubble Sort และอัลกอริทึมของ Dijkstra ได้
Daniel Gratzer

2
เป็นตัวอย่างให้ที่คุณสามารถดูคำใด ๆ ในพจนานุกรมเหตุผลที่คุณควรจะสามารถที่จะเข้าใจบทความนี้ในmeantone แต่สมองของเราจัดการกับความไม่เข้าใจที่ซ้อนกันจำนวน จำกัด เท่านั้น
Benjol

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

2
@kaoD: และการท่องจำการอ้างอิงนั้นจะไม่ช่วยอะไรนิดหน่อย มันไม่ได้เกี่ยวข้องกับการคิดค้นอะไรมันเป็นเพียงแค่การคัดลอก ข้อแตกต่างเพียงอย่างเดียวระหว่างการตอบคำถามจากหน่วยความจำและการคัดลอกจากวิกิพีเดียคือการที่เก็บไว้ใน RAM และอีกอันถูกเก็บไว้ในสมองของคุณ มันยังคงเป็นสำเนา
DeadMG

14

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

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

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


2
+1 อาเมน ฉันเคยสอนการเขียนโปรแกรมในระดับวิทยาลัยและเป้าหมายของฉันคือการย้ายนักเรียนให้เร็วที่สุดเท่าที่จะเป็นไปได้เพื่อให้พวกเขาสามารถทำโครงการเฉพาะของตนเองได้ ฉันเกลียดเมื่อครูปฏิบัติเช่นเดียวกับการท่องจำหรือทำสิ่งที่ "ถูก" สิ่งที่ฉันพยายามทำคือวางทักษะให้เพียงพอเพื่อปลดปล่อยความคิดสร้างสรรค์ของนักเรียน
Mike Dunlavey

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

ได้ยินได้ยิน! มันตลกดีที่ฉันไม่เคยเก่งในโรงเรียนมาก่อน คะแนน ACT ไม่ดีคะแนนไม่ดี ฯลฯ แต่เมื่อได้รับการแนะนำให้รู้จักกับ CS ทุกอย่างก็สมเหตุสมผล แน่นอนว่าฉันต้องดิ้นรนในบางพื้นที่ แต่ฉันได้เรียนรู้ที่จะเอาชนะสิ่งต่าง ๆ ที่ทำให้ฉันกลับมาจากแนวคิดการทำความเข้าใจที่ฉันได้เรียนรู้ในชั้นเรียน CS ของฉัน
rudolph9

10

อย่าปล่อยให้การศึกษาเข้ามายุ่งเกี่ยวกับการศึกษาของคุณ

- มาร์กทเวน

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

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

หลังจากปีนั้นฉันกลับไปที่รูทีน "ปกติ" ของฉันกลับไปที่ชั้นเรียนปกติการบ้านการสอบและโครงงาน ชั้นเรียนยังคงน่าเบื่อไม่มีอะไรใหม่ให้เรียนรู้ทั้งหมดเหมือนกัน ดังนั้นฉันจึงตัดสินใจเข้าร่วมการประกวดเขียนโปรแกรมเช่นผู้ตัดสิน UVA ออนไลน์ , โค้ดเชฟและออยเลอร์โปรเจ็กต์จากนั้นฉันดูการบรรยายที่MIT Open Course Wareและฉันยังคงเรียนรู้ด้วยตัวเอง แต่แตกต่างกัน

บทเรียน: อย่าปล่อยให้สิ่งที่เกิดขึ้นทำให้สิ่งที่เกิดขึ้น หากคุณไม่พอใจกับวิธีการเรียนรู้ของคุณเปลี่ยนมัน!

* ไม่ใช่การตัดสินใจที่ฉลาดที่สุดที่ฉันเคยทำ


4
"อย่าปล่อยให้สิ่งต่าง ๆ เกิดขึ้นทำให้สิ่งต่าง ๆ เกิดขึ้น", - หากเคยมีคำพูดให้ใช้ชีวิตพวกมัน!
GrandmasterB

+1 สำหรับคำพูด ฉัน <ส่วนใหญ่> ไม่จำเป็นต้องอ่านคำตอบที่เหลือ
Chani

3

ขึ้นอยู่กับสิ่งที่คุณพยายามจะจดจำ ...

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

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

เมื่อคุณมีหน่วยความจำพื้นฐานบางหน่วยความจำมันง่ายกว่าที่จะทำสิ่งต่าง ๆ เช่นตีความเอกสาร เอกสารอาจบ่งบอกว่ามีการใช้รายการและคิดว่าโปรแกรมเมอร์รู้โดยปริยายว่านี่หมายความว่าส่วนแทรกคือ O (1) และการค้นหาคือ O (n) หน่วยการสร้างมีความเสถียรมากขึ้นเมื่อเวลาผ่านไป - คุณมีโอกาสมากที่จะใช้เครื่องมือดีบั๊กใหม่ ๆ ทุกสองสามปี


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

3

"ทำไม CS ถึงสอนให้จดจ่อกับการท่องจำ ... ซึ่งต่างจากการสอนทักษะที่มีประโยชน์" - ฉันคิดว่าคุณลดการท่องจำมากเกินไป เช่นเดียวกับที่คุณควรฝึกเขียนโค้ดแปลเอกสารใช้ debugger คุณควรฝึกท่องจำ

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

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


2
การไม่ต้องค้นหา API นั้นมาจากการฝึกฝนไม่ใช่การสอน API เป็นการศึกษาที่เป็นทางการ
DeadMG

@DeadMG: ความสามารถในการจดจำสิ่งต่าง ๆ มาพร้อมกับการฝึกฝนเช่นเดียวกับทุกอย่างอื่น การขอให้คุณจดจำ API บางตัวไม่ใช่เป้าหมายในตัวเอง แต่เป็นวิธีการฝึกอบรมหัวหน้าของคุณในการเก็บข้อมูลเพื่อที่คุณจะได้ไม่ต้องค้นหาบ่อยๆ และฉันไม่ได้พูดเกี่ยวกับ API ถ้าฉันจำสิ่งพิเศษได้นั่นเป็นทริปน้อยที่ฉันต้องทำกับไฟล์ Google / MSDN / ซอร์สอื่นและด้วยการฝึกฝนสิ่งนี้ทำให้คุณทำงานได้เร็วขึ้น .
DXM

ฝึกฝนกับ API เฉพาะนั้น ไม่จดจำสิ่งต่าง ๆ โดยทั่วไป และเวลาที่ใช้ในการศึกษาเป็นเชิงอรรถเล็ก ๆ เมื่อเทียบกับเวลามืออาชีพ
DeadMG

2

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

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

หากนักเรียนไม่สามารถทำสิ่งนี้ได้พวกเขาไม่มีความเชี่ยวชาญในหัวข้อนั้นอาจเป็นความคุ้นเคยที่ผ่านไป


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

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

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

-2

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

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

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

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


2
Gee คนไม่รำคาญอธิบาย downvotes หรืออะไรอย่างนั้นของคุณ ....
DeadMG

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

@ David: คุณไม่จำเป็นต้องรู้ว่า heapsort ทำงานอย่างไร การใช้งานโดยใช้อัลกอริทึมการเรียงลำดับใด ๆ จะดี
DeadMG

ไม่เฉพาะในกรณีนั้นมันจะไม่ มันต้องจัดการกับเหตุการณ์จำนวนมากบ่อยครั้งบนระบบที่อาจมีปัญหามากเกินไป สำหรับโครงการนั้นเราต้องการประสิทธิภาพและเราได้มันมา สำหรับบริบทที่เกิดขึ้นครั้งเดียวในอาชีพการงานที่ค่อนข้างยาวและทั้งหมดของการเรียงลำดับของฉันเป็นเวลานานได้รับสิ่งที่ต้องการของ SQL ORDER BYและ C ++ ของstd::sortครอบครัว
David Thornley

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