ฉันกำลังมองหาการอ้างอิงบรรณานุกรมสำหรับอัลกอริทึม / ปัญหาต่อไปนี้: ฉันตั้งชื่อมันว่า "BiSelect" หรือ "t-ary Select" หรือ "Select in Union of Sorted Array" แต่ฉันคิดว่ามันถูกนำมาใช้ภายใต้ชื่ออื่นหรือไม่?
ปัญหา
พิจารณาปัญหาต่อไปนี้:
ได้รับเคล็ดเรียงอาร์เรย์1 , ... , k , ขนาดนั้นn 1 , ... , n kและจำนวนเต็มเสื้อ∈ [ 1 .. Σ n ฉัน ]สิ่งที่เป็นเสื้อมูลค่า -th ของสหภาพเรียงของพวกเขา∪ ฉันฉัน ?
โซลูชั่น
มีอัลกอริทึมที่เรียบง่ายและสง่างามทำงานในเวลาถ้าk = 2 : ถ้าk = 2ให้เปรียบเทียบA 1 [ t / 2 ]กับA 2 [ t / 2 ]และรับเงินในA 1 [ t / 2 .. t ]และA 2 [ 1 ..หรือ A 1 [ 1 .. t / 2 ]และ A 2 [ t / 2 .. t ]ตามลำดับในทั้งสองกรณีที่มีพารามิเตอร์ t / 2 (และการปรับแต่งเล็กน้อยบางอย่างเมื่อ n 1หรือ n 2มีขนาดเล็กกว่า t )
นี่เป็นการสรุปถึงอัลกอริธึมที่ซับซ้อนกว่าเล็กน้อยซึ่งทำงานในเวลาสำหรับค่าที่มากขึ้นของkตามการคำนวณค่ามัธยฐานของค่าA i [ t / k ]สำหรับi ∈ [ 1 .. k ] : t / k องค์ประกอบที่เล็กที่สุดสามารถละเลยต่อไปในk / 2อาร์เรย์ที่ฉัน [ T / k ]มีขนาดเล็กกว่าค่ามัธยฐานและองค์ประกอบของการจัดอันดับใน[สามารถเพิกเฉยต่อไปในอาร์เรย์ k / 2อื่น ๆ ทำให้เกิดการแบ่งครึ่งของ tในการเกิดซ้ำแต่ละครั้ง (และค่าใช้จ่าย O ( k )สำหรับค่ามัธยฐาน)
อ้างอิง?
แรงจูงใจ
วิธีแก้ไขปัญหานี้มีแอปพลิเคชันสำหรับ Deferred Data Structure บนอาร์เรย์ (ที่จริงแล้วมันสามารถเห็นได้ว่าเป็นตัวดำเนินการในโครงสร้างข้อมูลที่เลื่อนออกไปสำหรับสหภาพของอาร์เรย์ที่เรียงลำดับ); และในวิธีที่ซับซ้อนยิ่งขึ้นไปยังการคำนวณแบบปรับตัวของรหัสฟรีที่ดีที่สุด