ประโยชน์ของการสำรวจเส้นทางก่อนและหลังการสั่งซื้อของต้นไม้ไบนารี


13

นี่อาจไร้เดียงสามาก แต่ฉันก็สงสัยว่ามันเป็นบริบทของต้นไม้ไบนารี (ธรรมดาเรียงและสมดุล) ของการสำรวจเส้นทางทั้งหมด:

  • การสั่งซื้อล่วงหน้าครั้งแรกในเชิงลึก
  • ความลึกเป็นลำดับแรก
  • สั่งซื้อโพสต์แรกลึก
  • กว้างแรก

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

AFAICS มีบางประเภทและการกำหนดค่าของต้นไม้ไบนารีซึ่งเรียงตามลำดับและความกว้างก่อนอาจให้ข้อได้เปรียบบางอย่าง:

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

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

อย่างไรก็ตามฉันไม่สามารถนึกถึงสถานการณ์ที่ก่อนและหลังการสำรวจเส้นทางจะให้ประโยชน์มากกว่าอีกสอง

คำตอบ:


13

คุณต้องทำสิ่งต่าง ๆ ด้วยต้นไม้เช่นแปลระหว่างโครงสร้างข้อมูลและการแทนอนุกรมบางอย่างเช่นในไฟล์หรือในภาษา

ตัวอย่างเช่นสมมติว่าคุณมีต้นไม้แยกวิเคราะห์ดังนี้

    *
   / \
  +   \
 / \   \
A   B   C

คุณสามารถทำให้มันเป็นอันดับ* + A B Cโดยการเดินตามลำดับคำนำหน้าหรือA B + C *โดยการเดินตามลำดับ postfix หากคุณทำงานกับโปรเซสเซอร์ภาษาสิ่งเหล่านี้จำเป็นต้องเป็นเรื่องที่สอง


ตัวอย่างที่ดีมาก! และสังเกตว่าการให้คำแนะนำในการแวะผ่านนั้นA + B * Cเป็นเรื่องที่เข้าใจได้ง่ายสำหรับผู้ใช้ทั่วไปมากกว่าคำนำหน้าของคำสั่ง postfix
Kilian Foth

3
@KilianFoth ยกเว้นว่าไม่ใช่สิ่งที่ต้นไม้พูด - มันบอกว่า (A + B) * C อย่างน้อยก็ต่อตาฉัน แม้ว่านิ้วมือ HP-28 ของฉันเช่นรุ่น AB + C * ก็ใช้ได้ :-)
sdg

@Kilian: sdg ถูกต้อง ด้วยความไม่สมบูรณ์คุณจะต้องคำนึงถึงความสำคัญก่อนเว้นแต่คุณจะใส่วงเล็บไว้รอบ ๆ ทุกสิ่ง
Mike Dunlavey

13

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

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

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


Wikipedia ณ วันที่ 10 พ.ย. 2019 มีการเปลี่ยนแปลงและคำอธิบายแรกเป็นของ Post-Order ซึ่งสร้างความสับสน นั่นคือเหตุผลที่ฉันลงเอยที่นี่ค้นหาแหล่งข้อมูลอื่น
whoan

5

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

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

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