ต้นไม้ AVL และโลกแห่งความจริง


14

ในโรงเรียนเราได้รับการสอนวิธีที่เราสามารถปรับสมดุลต้นไม้ AVL จากการแทรกหรือการลบ

ความรู้ประเภทนี้จะมีประโยชน์จริง ๆ ในโลกแห่งความเป็นจริงได้อย่างไร? ใครสามารถยกตัวอย่างว่าเมื่อความรู้ประเภทนี้จะมีประโยชน์จริงหรือไม่

จากสิ่งที่ฉันเห็นในที่ทำงานรายละเอียดดังกล่าวแทบจะไม่เคยเกิดขึ้น ...

ฉันสามารถดูได้ว่ารายละเอียดความรู้เกี่ยวกับอัลกอริทึมและโครงสร้างข้อมูลบางอย่างมีความสำคัญ แต่ไม่ได้รายละเอียดเช่นการหมุนของต้นไม้ AVL (และแนวคิดรายละเอียดที่คล้ายกัน)

ขอบคุณ!


7
มันมีประโยชน์ในการสัมภาษณ์ถ้านับว่าเป็นโลกแห่งความจริง
Kevin

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

คำตอบ:


13

การศึกษาต้นไม้ AVL จะมีประโยชน์ด้วยเหตุผลดังต่อไปนี้:

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

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

  • มันช่วยให้คุณสามารถเขียนชุดรูปแบบของคุณเองหรือสร้างโครงสร้างข้อมูลชนิดใหม่ทั้งหมด

  • คุณอาจต้องใช้แผนผัง AVL สำหรับไลบรารีหรือแพลตฟอร์มใหม่

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

หากคุณต้องการดูว่าการรู้อัลกอริทึมสำคัญแค่ไหนในโลกแห่งความเป็นจริงอ่าน " How to Kill a Great idea! " บทความใน Inc เกี่ยวกับการล่มสลายของ Friendster และการประยุกต์ใช้หลักการพื้นฐานเพียงเล็กน้อยเพื่อปรับปรุงประสิทธิภาพอาจช่วยพวกเขาได้


บทความที่น่าสนใจ แต่ฉันไม่เห็นว่าต้นไม้ AVL จะช่วยเพื่อนได้อย่างไร
Eratosthenes

ฉันอยากเห็นตัวอย่างเช่น B + -Trees ใช้สำหรับการจัดทำดัชนีฐานข้อมูล
Luca Fülbier

5

นอกเหนือจากคะแนน Macneils ...

ต้นไม้สีแดงดำอาจมีประโยชน์มากกว่าโดยตรงเนื่องจากมีการดำเนินการที่มีประสิทธิภาพและไม่ได้รับการสนับสนุนอย่างแพร่หลายในการใช้งานไลบรารีมาตรฐานเช่น C ++ std::map(อย่างน้อย AFAIK) ต้นไม้สีแดงดำสามารถรองรับ "แยก" (ตัดต้นไม้ออกเป็นสองส่วนหนึ่งมีคีย์น้อยกว่าคีย์ที่ระบุและหนึ่งมีคีย์มากกว่า) และ "เข้าร่วม" (ย้อนกลับรวมต้นไม้ของปุ่มขนาดใหญ่ด้วยต้นไม้ขนาดเล็ก คีย์) สามารถทำได้ในเวลา O (log n) แต่ถ้าสิ่งเหล่านี้ได้รับการสนับสนุนในไลบรารีคอนเทนเนอร์มาตรฐานดูเหมือนว่าจะเป็นสิ่งที่ซ่อนอยู่

อย่างไรก็ตามโครงสร้างข้อมูล "augmenting" เป็นเรื่องธรรมดา ตัวอย่างง่ายๆคือการเพิ่มข้อมูลขนาดของทรีย่อยให้กับโหนดในเกือบทุกโครงสร้างข้อมูลทรีเพื่อรองรับการห้อย O (log n) ตัวอย่างที่ซับซ้อนยิ่งขึ้น ได้แก่ ต้นไม้ช่วงเวลา

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

แน่นอนว่าการพัฒนาโครงสร้างข้อมูลแบบเพิ่มเติมคุณต้องเข้าใจโครงสร้างข้อมูลแบบไม่เติมข้อมูล

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


1
+1 สำหรับการเพิ่มโครงสร้างข้อมูลแม้ว่ามันจะเป็นเรื่องยากที่จะทำ โปรแกรมเมอร์ส่วนใหญ่ไม่จำเป็นต้องมุ่งมั่นเพื่อประสิทธิภาพ (อย่างอื่นเราก็คงจะใช้ C ++ / C / Fortran / Assembly)
Matthieu M.

@ Matthieu - ฉันเชื่อว่าเป็นเรื่องปกติ แต่เฉพาะในสภาพแวดล้อมการพัฒนาบางประเภท นั่นไม่ใช่ความขัดแย้ง, ซื่อสัตย์เพราะ ... ผิดพลาด, ดี ...
Steve314

ฉันเห็นด้วยอย่างยิ่ง! : D
Matthieu M.

5

ไม่

มันไม่มีประโยชน์ในโลกแห่งความเป็นจริง ...

ยกเว้นที่จะทำให้คุณคิดว่า

โลกแห่งความเป็นจริงนั้นมีปัญหาที่ยากกว่ามากซึ่งส่วนใหญ่ยังไม่มีวิธีแก้ปัญหาที่รู้จักกันดี

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