คุณจะพิสูจน์ได้อย่างไรว่าความสูงที่คาดหวังของแผนภูมิการค้นหาแบบไบนารีที่สร้างแบบสุ่มด้วยโหนดคือ ? มีหลักฐานใน CLRS รู้เบื้องต้นเกี่ยวกับอัลกอริทึม (บทที่ 12.4) แต่ฉันไม่เข้าใจ
คุณจะพิสูจน์ได้อย่างไรว่าความสูงที่คาดหวังของแผนภูมิการค้นหาแบบไบนารีที่สร้างแบบสุ่มด้วยโหนดคือ ? มีหลักฐานใน CLRS รู้เบื้องต้นเกี่ยวกับอัลกอริทึม (บทที่ 12.4) แต่ฉันไม่เข้าใจ
คำตอบ:
ก่อนอื่นเรามาคิดถึงเรื่องนี้กันก่อน ในสถานการณ์ที่ดีที่สุดต้นไม้มีความสมดุลอย่างสมบูรณ์ ในสถานการณ์ที่เลวร้ายที่สุดทรีจะไม่สมดุลกันทั้งหมด:
เริ่มต้นจากรูตโหนดต้นไม้ที่เหลือนี้มีสองเท่าของโหนดจำนวนมากที่แต่ละระดับความลึกที่สำเร็จเช่นต้นไม้มีn = ∑ h i = 0 2 i = 2 h + 1 - 1โหนดและความสูงh (ซึ่งอยู่ใน กรณีนี้ 3) ด้วยคณิตศาสตร์น้อยn ≤ 2 ชั่วโมง+ 1 - 1 → ชั่วโมง≤ ⌈ เข้าสู่ระบบ2 ( n + 1 ) - 1 ⌉ ≤ ⌊ ลิตรoซึ่งจะบอกว่ามันมีความสูง O ( บันทึกn ) สำหรับต้นไม้ที่ไม่สมดุลทั้งความสูงของต้นไม้เป็นเพียง n - 1 → O ( n ) ดังนั้นเราจึงมีขอบเขตของเรา
หากเราสร้างต้นไม้ที่สมดุลจากรายการที่สั่งเราจะเลือกองค์ประกอบกลางให้เป็นรูตโหนดของเรา ถ้าเราจะแทนการสุ่มสร้างต้นไม้ใด ๆ ของnโหนดได้อย่างเท่าเทียมกันมีแนวโน้มที่จะได้รับเลือกและความสูงของต้นไม้ของเราคือเอชอีฉันกรัมเอชทีทีอาร์อีอี = 1 + สูงสุด( เอชอีฉันกรัมเอชทีลิตรe f t s u b t r e เรารู้ว่าในต้นไม้ค้นหาไบนารีทรีย่อยทางซ้ายจะต้องมีคีย์น้อยกว่าโหนดราก ดังนั้นถ้าเราสุ่มเลือกองค์ประกอบ i t h , ทรีย่อยด้านซ้ายมีองค์ประกอบi-1และทรีย่อยด้านขวามีองค์ประกอบn-iดังนั้นจึงมีขนาดกะทัดรัดมากขึ้น: h n =1+สูงสุด( h i -
ในขณะที่ฉันแน่ใจว่าคุณสังเกตเห็นฉันได้เบี่ยงเบนไปเล็กน้อยจากวิธีการที่ CLRS พิสูจน์สิ่งนี้เพราะ CLRS ใช้เทคนิคการพิสูจน์ที่ค่อนข้างธรรมดาสองอย่างที่ไม่น่าไว้วางใจสำหรับมือใหม่ สิ่งแรกคือการใช้เลขชี้กำลัง (หรือลอการิทึม) ของสิ่งที่เราต้องการค้นหา (ในกรณีนี้ความสูง) ซึ่งทำให้คณิตศาสตร์คำนวณออกมาได้สะอาดมากขึ้นเล็กน้อย ที่สองคือการใช้ฟังก์ชั่นตัวบ่งชี้ (ซึ่งฉันจะไม่สนใจที่นี่) CLRS กำหนดความสูงแบบเอ็กซ์โพเนนเชียลเมื่อดังนั้นการเกิดซ้ำแบบอะนาล็อกคือY n = 2 × สูงสุด( Y i - 1 , Y n - i ).
สมมติว่าเป็นอิสระ (แต่ละองค์ประกอบของการดึง (จากองค์ประกอบที่มีอยู่) จะเป็นรากของทรีย่อยโดยไม่คำนึงถึงการดึงก่อนหน้านี้ทั้งหมด) เรายังคงมีความสัมพันธ์: ซึ่งฉันได้ทำสองขั้นตอน: (1) ย้าย1
ณ จุดนี้ CLRS จะดึงการเหนี่ยวนำ
n^k
) ข้อสรุปจะเหมือนกันเพราะคำเหล่าk
นี้จะถูกทิ้งไว้ในสัญกรณ์ O ขนาดใหญ่ (วิธีที่ 3 ถูกทิ้ง) แต่ถ้าเราแทนในบางสิ่งบางอย่างที่ชี้แจง ( e^n
) ก็จะยังคงเป็นที่ถูกต้องบนผูกพันเพียงไม่แน่นหนึ่ง เรารู้ว่าความสูงที่คาดไว้นั้นเป็นอย่างน้อยลอการิทึมดังนั้นการพิจารณาว่าเป็นลอการิทึมส่วนใหญ่ทำให้แน่น