ฟังก์ชั่นที่อาจเกิดขึ้นของต้นไม้ Splay: ทำไมต้องรวมบันทึกของขนาด?


16

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

การวิเคราะห์การทำงานโดยการกำหนดแต่ละองค์ประกอบในต้นไม้น้ำหนักโดยพลแล้วการตั้งค่าขนาดs ( x )ของโหนดที่จะเป็นผลรวมของน้ำหนักของโหนดในทรีย่อยที่ฝังรากที่x จากนั้นพวกเขาใช้เวลาบันทึกของค่านี้ที่จะได้รับการจัดอันดับR ( x )ของโหนดดังนั้นR ( x ) = บันทึกs ( x ) ในที่สุดฟังก์ชั่นที่อาจเกิดขึ้นของต้นไม้ถูกกำหนดให้เป็นผลรวมของการจัดอันดับของโหนดทั้งหมดwis(x)xr(x)r(x)=logs(x)

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

ฟังก์ชั่นที่อาจเกิดขึ้นของต้นไม้สเปรย์นั้นสอดคล้องกับสมบัติทางธรรมชาติของต้นไม้หรือไม่? มีเหตุผลบางอย่างนอกเหนือจาก "การทำงาน" หรือไม่ที่พวกเขาจะเลือกศักยภาพนี้ (ฉันอยากรู้อยากเห็นเป็นพิเศษเพราะชุดของหลักสูตรนี้ระบุว่า "การวิเคราะห์เป็นเวทมนตร์ดำ [N] o ความคิดวิธีค้นพบ")

ขอบคุณ!


ฉันเคยได้ยินคำอธิบายนี้ "มันเป็นเวทมนตร์ดำ" มาก่อนเช่นกัน คุณลองส่งอีเมลถึง Sleator และ Tarjan หรือไม่
jbapple

@ jbapple ฉันยังไม่ได้ส่งอีเมลถึงพวกเขาเนื่องจากฉันหวังว่า "ชุมชนใหญ่" จะสามารถช่วยเหลือได้ ฉันคิดด้วยว่าการกระตุกคนเกี่ยวกับงานที่พวกเขาทำเมื่อ 30 ปีก่อนอาจไม่จำเป็นต้องตอบสนองออกไป :-)
templatetypedef

ฉันไม่คุ้นเคยกับมันมากนัก แต่ฉันแค่ดูที่กระดาษอย่างคร่าวๆฉันคิดว่าเหตุผลเดียวที่พวกเขาต้องการเปลี่ยนแปลงเล็กน้อยโดยฟังก์ชั่นที่อาจเกิดขึ้นหลังจากการดำเนินการสเปรย์เช่นถ้าเราแทนที่ด้วยบันทึกล็อกหรือด้วยl o g ดูเหมือนว่าทุกอย่างยังทำงานได้ดี (ฉันไม่ได้พิสูจน์ แต่ดูเหมือนว่าจะต้องใช้คณิตศาสตร์อย่างง่าย) แต่ถ้าเราปล่อยให้มันเป็นsแล้วก็ตัดทอนวิเคราะห์ในขณะที่ถูกต้อง แต่มันไม่ได้เป็นส่วนบนที่ดี (บางอย่างเช่น( m + n ) 2 ) มันไม่เกี่ยวข้องกับคุณสมบัติของต้นไม้เลย loglogloglogs(m+n)2
Saeed

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

คำตอบ:


13

วิธีหาศักยภาพรวมของบันทึก

ลองพิจารณาอัลกอริทึม BST ที่การเข้าถึงองค์ประกอบxแต่ละครั้งจะจัดเรียงองค์ประกอบใหม่ในเส้นทางการค้นหาPของx ที่เรียกว่าเส้นทางก่อนไปยังต้นไม้บางต้นที่เรียกว่าต้นไม้หลัง สำหรับองค์ประกอบใด ๆให้s ( )และs ' ( )เป็นขนาดของต้นไม้ย่อยรากที่ก่อนและหลังการปรับปรุงใหม่ตามลำดับ ดังนั้นs ( )และs ' ( )อาจแตกต่าง IFF PAxPxas(a)s(a)as(a)s(a)aP

ยิ่งกว่านั้นจัดเรียงองค์ประกอบหลาย ๆ อย่างตลอดเวลาในเส้นทางการค้นหาในทุกเวลา ลองเรียกอัลกอริทึมชนิดนี้ว่า "อัลกอริธึม" ตัวอย่างเช่นต้นไม้สเปรย์เป็นของท้องถิ่น มันจัดเรียงใหม่มากที่สุด 3 รายการพร้อมกันโดย zig, zigzig และ zigzagA

ตอนนี้อัลกอริทึมในท้องถิ่นใด ๆ ที่สร้างใบไม้ "จำนวนมาก" ในต้นไม้หลังเช่นต้นไม้สเปรย์มีคุณสมบัติที่ดีดังต่อไปนี้

เราสามารถสร้างแผนที่นั้นf:PP

  1. มีหลายเส้นตรงมีPที่s ' ( ( ) ) s ( ) / 2aPs(f(a))s(a)/2
  2. มีหลายอย่างต่อเนื่องเป็นPที่ s ' ( ( ) )อาจมีขนาดใหญ่ แต่นิด ๆ ที่มากที่สุดnaPs(f(a))n
  3. องค์ประกอบอื่น ๆP , s ' ( ( ) ) s ( )aPs(f(a))s(a)

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

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

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

ป.ล. เอกสารนี้ยังแสดงถึงข้อ จำกัด ของผลรวมการบันทึกที่อาจเกิดขึ้น นั่นคือหนึ่งสามารถพิสูจน์ความพึงพอใจของการเข้าถึงบทแทรกผ่านผลรวมของการบันทึกที่อาจเกิดขึ้นกับอัลกอริทึมเฉพาะที่

การตีความผลรวมของบันทึกอาจเกิดขึ้น

มีอีกวิธีหนึ่งในการกำหนดศักยภาพของ BST ในกระดาษของ Georgakopoulos และ McClurkinซึ่งมีความเป็นไปได้เช่นเดียวกับศักยภาพรวมของบันทึกในกระดาษของ Sleator Tarjan แต่นี่เป็นสัญชาตญาณที่ดีสำหรับฉัน

ตอนนี้ฉันสลับไปที่รูปแบบของกระดาษ เรากำหนดน้ำหนักทุกโหนดยู Let W ( U )เป็นผลรวมของน้ำหนักของU 's ทรีย่อย (นี่เป็นเพียงขนาดของคุณw(u)uW(u)uu 's ทรีย่อยเมื่อน้ำหนักของทุกโหนดเป็นหนึ่ง.)

ตอนนี้แทนการกำหนดตำแหน่งบนโหนดที่เรากำหนดตำแหน่งให้ชิดขอบซึ่งพวกเขาเรียกว่าปัจจัยความคืบหน้า

pf(e)=log(W(u)/W(v)).

และศักยภาพของต้นไม้คือS

Φ(S)=eSpf(e).

ความเป็นไปได้นี้มีการตีความตามธรรมชาติ: หากในระหว่างการค้นหาเราข้ามขอบเราลดพื้นที่การค้นหาจากผู้สืบทอดของuไปยังผู้สืบทอดของv , การลด frantional ของW ( u ) / W ( v )(u,v)uvW(u)/W(v) )ปัจจัยความคืบหน้าของเราคือการวัดลอการิทึมของ 'ความคืบหน้า' นี้ดังนั้นชื่อของมัน [จากส่วนที่ 2.4]

สังเกตว่านี่เป็นศักยภาพของ Sleator Tarjan ที่เท่ากันและเพิ่มขึ้นบนเส้นทาง

แก้ไข:ปรากฎว่าคำนิยามทางเลือกนี้และสัญชาตญาณที่อยู่เบื้องหลังมันถูกอธิบายมานานแล้วโดย Kurt Mehlhorn ดูหนังสือ "โครงสร้างข้อมูลและอัลกอริธึม" หนังสือเล่มที่ 1 ตอนที่ 3 ของฉัน 6.1.2 Splay Trees หน้า 263 - 274

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