การแก้ไขความสัมพันธ์ที่เกิดซ้ำกับการโทรซ้ำสองครั้ง


10

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

ในการทำเช่นนี้ฉันถามตัวเองว่ารันไทม์ T(n,พี)T(n,p) จะเป็นในกรณีที่ quicksort มักจะเกิดขึ้นกับพาร์ทิชันในบางส่วน 0<พี120<p12 ดังนั้น พี(n-1)p(n1) องค์ประกอบอยู่ในพาร์ทิชันด้านซ้ายและ (1-พี)(n-1)(1p)(n1) อยู่ในพาร์ทิชันที่เหมาะสม (ออกจาก 11 องค์ประกอบ pivot ที่อยู่ตรงกลาง)

ไม่ยากที่จะเห็นว่า T(n,พี)T(n,p) ให้ขอบเขตบนสำหรับกรณีที่แย่ที่สุดที่ พีp เป็นพาร์ติชันที่ได้รับอนุญาตไม่สมดุลมากที่สุดเช่นเดียวกับพาร์ทิชันที่มีเศษส่วน >พี>p จะมีความสมดุลมากขึ้นและมีรันไทม์ขนาดเล็กลงและเศษส่วนใด ๆ <พี<p ไม่อนุญาต

เห็นได้ชัดว่า T(n,12)T(n,12) เป็นกรณีที่ดีที่สุดและ T(n,0)T(n,0)เป็นกรณีที่แย่ที่สุดของ quicksort ทั้งสองมีความสัมพันธ์ที่เกิดซ้ำง่าย ๆ ที่พบในแหล่งข้อมูลการศึกษาใด ๆ แต่ฉันไม่มีเงื่อนงำวิธีการศึกษาT(n,พี)T(n,p)โดยทั่วไป ความสัมพันธ์ที่ชัดเจนจะเป็น:

T(n,พี)=n+T(พี(n-1),พี)+T((1-พี)(n-1),พี)

T(n,p)=n+T(p(n1),p)+T((1p)(n1),p)

ที่นี่ฉันติดอยู่ ฉันพยายามค้นหาไปรอบ ๆ แต่วรรณกรรมทั้งหมดที่ฉันสามารถเข้าใจเกี่ยวกับการหารและพิชิตอัลกอริธึมเอา "หาร" ตามตัวอักษรและ"โกง"การวิเคราะห์โดยใช้ความจริงที่ว่าพาร์ติชั่นมีขนาดเท่ากันเสมอ คงที่

ฉันไม่ทราบวิธีจัดการกับการโทรซ้ำสองครั้งและไม่ทราบว่าจะลบการปัดเศษหรือไม่ นี่เป็นไปได้ที่จะแก้ปัญหาเชิงวิเคราะห์และถ้าใช่เป็นอย่างไร

PS: ฉันไม่สนใจ asymptotics (ซึ่งง่ายต่อการแสดง Θ(nเข้าสู่ระบบn)Θ(nlogn) สำหรับค่าคงที่ใด ๆ พีp) ฉันสนใจที่จะกลายเป็น quicksort ที่ช้าลงเท่าไหร่พีp เล็กลงตัวอย่างเช่นฉันสนใจอัตราส่วน T(n,0.25)T(n,0.5)T(n,0.25)T(n,0.5).

PPS: ในฐานะนักเรียนระดับปริญญาตรีฉันต้องขออภัยถ้าฉันทำสิ่งที่ชัดเจนเกินไปเรื่องยาวเกินไปหรือไม่ได้อธิบายไว้ และในขณะที่ฉันไม่รู้ว่ามันถูกดูที่นี่มากเท่ากับไซต์ SE อื่น ๆ ฉันจะทราบว่านี่เป็นความสนใจส่วนตัวไม่ใช่การบ้าน

คำตอบ:


9

ดังที่คุณกล่าวถึงทฤษฎีของ Akra – Bazziแสดงให้เห็นว่าวิธีการแก้ปัญหาการเกิดซ้ำT(n,พี)T(n,p) คือ O(nเข้าสู่ระบบn)O(nlogn) เพื่อทุกสิ่ง พี(0,1)p(0,1). อย่างไรก็ตามสิ่งนี้ไม่เปิดเผยลักษณะของการพึ่งพาพีp. เพื่อกำหนดหลังเราสามารถใช้วิธีการเรียกซ้ำต้นไม้

ที่รากของแผนภูมิการเรียกซ้ำเป็นช่วงเวลา {1,...n}{1,n}. ลูกทั้งสองของมันคือช่วงเวลา{1,...,พีn}{1,,pn} และ {พีn+1,...,n}{pn+1,,n}ซึ่งมีความยาวทั้งหมดอีกครั้ง nn. แต่ละโหนดเหล่านี้มีลูกสองคน (สมมติว่าnnมีขนาดใหญ่พอ) และอื่น ๆ เพื่อความง่ายเราไม่สนใจข้อผิดพลาดในการปัดเศษนั่นคือเราถือว่าพีnpnเป็นจำนวนเต็ม นี่เป็นเพียงด้านเทคนิคและฉันจะไม่กังวลเกี่ยวกับมัน เราหยุดกระบวนการเมื่อใดก็ตามที่โหนดมีความยาวไม่เกิน11. ความซับซ้อนของอัลกอริทึมเป็นสัดส่วนกับความยาวทั้งหมดของช่วงเวลาในต้นไม้ เมื่อไหร่พี1/2p1/2ที่ใบ (โหนดที่เราจะหยุดกระบวนการ) มีความลึกที่แตกต่างกันและที่ทำให้มันยากมากที่จะตรวจสอบความซับซ้อนโดยรวม

เราสามารถได้รับขอบเขตบนอย่างง่ายโดยสังเกตว่าต้นไม้มีมากที่สุด เข้าสู่ระบบ1-พี(1/n)log1p(1/n) ระดับ: แต่ละโหนดเป็นปัจจัยอย่างน้อย 1-พี1pเล็กกว่าพาเรนต์ เช่นเดียวกับในการวิเคราะห์พี=1/2p=1/2ความยาวรวมของช่วงเวลาในทุกระดับไม่เกิน nnและเราได้รับขอบเขตบนของ O(nเข้าสู่ระบบ1-พี(1/n))O(nlog1p(1/n))ในเวลาทำงาน ตั้งแต่เข้าสู่ระบบ1-พี(1/n)=เข้าสู่ระบบn/เข้าสู่ระบบ(1-พี)-1log1p(1/n)=logn/log(1p)1 และ เข้าสู่ระบบ(1-พี)-1=-เข้าสู่ระบบ(1-พี)=พี±O(พี2)log(1p)1=log(1p)=p±O(p2) สำหรับขนาดเล็ก พีpเราสามารถเขียนสิ่งนี้เป็น O(nเข้าสู่ระบบn/พี)O(nlogn/p).

นี่คือการคำนวณที่แม่นยำยิ่งขึ้น พิจารณาระดับเสื้อt. สมมติว่าเราไม่หยุดกระบวนการเมื่อถึงช่วงเวลาเล็ก ๆ เราสามารถสร้างจุดสุดยอดแบบสุ่มโดยการเสื้อt ขั้นตอนซึ่งเราแต่ละคนไปทางซ้ายพร้อมกับความน่าจะเป็น พีp และขวา (พูด) ด้วยความน่าจะเป็น 1-พี1p. แต่ละครั้งที่เราทำขั้นตอนซ้ายบันทึกของความยาวของช่วงเวลาลดลงตาม-เข้าสู่ระบบพีlogpและทุกครั้งที่เราทำตามขั้นตอนที่ถูกต้องก็จะลดลงตาม -เข้าสู่ระบบ(1-พี)log(1p). จุดสุดยอดอยู่ในต้นไม้จริงของบันทึกของความยาวที่ลดลงมากที่สุดเข้าสู่ระบบnlogn. น้ำหนักรวมของช่วงเวลาในระดับเสื้อt ของต้นไม้เป็นความน่าจะเป็นที่จุดสุดยอดที่สร้างขึ้นตามกระบวนการนี้สอดคล้องกับการลดลงของที่มากที่สุด เข้าสู่ระบบnlogn. นั่นคือถ้าDD คือการกระจายซึ่งเท่ากับ -เข้าสู่ระบบพีlogp ด้วยความน่าจะเป็น พีp และ -เข้าสู่ระบบ(1-พี)log(1p) ด้วยความน่าจะเป็น 1-พี1pและ X1,...,Xเสื้อ~DX1,,XtD มีความเป็นอิสระจากนั้นน้ำหนักรวมของระดับ เสื้อt คือ ราคา[X1++Xเสื้อเข้าสู่ระบบn]Pr[X1++Xtlogn]. สำหรับซุปเปอร์คงที่เสื้อtตัวแปรสุ่ม X1++Xเสื้อX1++Xt มีการกระจายโดยทั่วไปประมาณค่าเฉลี่ย [-พีเข้าสู่ระบบพี-(1-พี)เข้าสู่ระบบ(1-พี)]เสื้อ[ - p บันทึกp - ( 1 - p ) บันทึก( 1 - p ) ] t และความแปรปรวนเชิงเส้นใน เสื้อเสื้อดังนั้นสำหรับ เสื้อเสื้อ ความพึงพอใจ [-พีเข้าสู่ระบบพี-(1-พี)เข้าสู่ระบบ(1-พี)]เสื้อ(เข้าสู่ระบบn)/2[ - p บันทึกp - ( 1 - p ) บันทึก( 1 - p ) ] t ( บันทึกn ) / 2ความน่าจะเป็นใกล้เคียงกับ 11ในขณะที่สำหรับ เสื้อเสื้อ ความพึงพอใจ [-พีเข้าสู่ระบบพี-(1-พี)เข้าสู่ระบบ(1-พี)]เสื้อ2เข้าสู่ระบบn[ - p บันทึกp - ( 1 - p ) บันทึก( 1 - P ) ] เสื้อ2 เข้าสู่ระบบnจะบอกว่ามันใกล้เคียงกับศูนย์มาก การกำหนดชั่วโมง(พี)=-พีเข้าสู่ระบบพี-(1-พี)เข้าสู่ระบบ(1-พี)h ( p ) = - p บันทึกp - ( 1 - p ) บันทึก( 1 - p ) (เรียกว่าฟังก์ชั่นไบนารีเอนโทรปี) เราสรุปได้ว่าเวลาทำงานคือ Θ(nเข้าสู่ระบบn/ชั่วโมง(พี))Θ ( n บันทึกn / h ( p ) ) ชุดเครื่องแบบ พีพี, เช่น nn ) เช่นพี0p0 เรามี ชั่วโมง(พี)-พีเข้าสู่ระบบพีh(p)plogpดังนั้นประมาณการก่อนหน้านี้ของเราจึงไม่แน่น

อีกวิธีหนึ่งในการดูการวิเคราะห์เดียวกันก็คือการมีลำดับสุ่มตัวแปรที่ไม่สิ้นสุด X1,X2,...X1,X2, เหมือนเมื่อก่อนและกำหนดเวลาหยุด TT เป็นครั้งแรก เสื้อt ดังนั้น X1++Xเสื้อเข้าสู่ระบบnX1++Xtlogn. เวลาทำงานนั้นเป็นสัดส่วนกับnE[T]nE[T]. ทฤษฎีการต่ออายุเบื้องต้นนั้นระบุว่าLimnE[T]/เข้าสู่ระบบn=1/E[D]=1/ชั่วโมง(พี)limnE[T]/logn=1/E[D]=1/h(p)หมายความว่าขนาดทั้งหมดของช่วงเวลาเท่ากับ (1+โอ(1))nเข้าสู่ระบบn/ชั่วโมง(พี)(1+o(1))nlogn/h(p). แม่นยำยิ่งขึ้นสำหรับทุกค่าคงที่พีp ขนาดทั้งหมดของช่วงเวลาคือ (1+αพี(n))nเข้าสู่ระบบn/ชั่วโมง(พี)(1+αp(n))nlogn/h(p)ที่ไหน αพี(n)=โอ(n)αp(n)=o(n). การบรรจบกันในทฤษฎีการต่ออายุเบื้องต้นเป็นแบบเอ็กซ์โพเนนเชียลในพารามิเตอร์เวลา -เข้าสู่ระบบnlogn ในกรณีของเรา - ดังนั้นควรเป็นพหุนาม nn, นั่นคือ, αพี(n)=O(n-พี)αp(n)=O(nCp). การบรรจบกันอาจจะเหมือนกันสำหรับพี(δ,1-δ)p(δ,1δ) สำหรับใด ๆ δ>0δ>0.


สรุปความยาวรวมของช่วงเวลาในทรีเรียกซ้ำซึ่งเป็นสัดส่วนกับเวลาทำงานเป็นรูปแบบต่อไปนี้สำหรับทุก ๆ พีp: T(n,พี)=(1+โอ(1))nเข้าสู่ระบบnชั่วโมง(พี),

T(n,p)=(1+o(1))nlognh(p),
ที่ไหน เข้าสู่ระบบnlogn และ ชั่วโมง(พี)=-พีเข้าสู่ระบบพี-(1-พี)เข้าสู่ระบบ(1-พี)h(p)=plogp(1p)log(1p) จะถูกนำไปที่ฐานเดียวกันและ โอ(1)o(1) เป็นฟังก์ชั่นขึ้นอยู่กับ พีp และพุ่งไปที่ 00 กับ nn.

ยิ่งไปกว่านั้นมันอาจจะเป็นจริงสำหรับทุกคน δ>0δ>0 และใด ๆ พี(δ,1-δ)p(δ,1δ) มันเป็นความจริงที่ความยาวทั้งหมดของช่วงเวลานั้นเป็นรูปแบบ T(n,พี)=(1+O(n-δ))nเข้าสู่ระบบnชั่วโมง(พี),

T(n,p)=(1+O(nCδ))nlognh(p),
ที่ไหน δ>0Cδ>0 และค่าคงที่ O ใหญ่ที่ซ่อนอยู่นั้นขึ้นอยู่กับ δδ. โดยเฉพาะอย่างยิ่งมันควรเป็นกรณีที่สำหรับทุกค่าคงที่พี1,พี2p1,p2, LimnT(n,พี1)T(n,พี2)=ชั่วโมง(พี2)ชั่วโมง(พี1),
limnT(n,p1)T(n,p2)=h(p2)h(p1),
และการบรรจบกันนั้นเป็นไปอย่างรวดเร็ว

ขอบคุณสำหรับคำตอบด่วนของคุณ Yuval ฉันสับสนเล็กน้อยจากข้อเท็จจริงที่คุณใช้ΘΘ ในบทสรุปของคุณ ชั่วโมง(พี)h(p) เป็นค่าคงที่และไม่ได้หมายความว่าไม่เกี่ยวข้องภายใต้ ΘΘ? ฉันตัดสินใจที่จะเขียนโปรแกรมทดสอบเล็กน้อยซึ่งแสดงให้เห็นว่าn=100000000000000n=100000000000000 เปรียบเทียบ T(n,0.1)/T(n,0.5)T(n,0.1)/T(n,0.5)ระหว่างวิธีการวิเคราะห์และวิธีการคำนวณมีข้อผิดพลาด 0.03 ดูเหมือนจะค่อนข้างใหญ่หรือคาดว่าจะเป็นเช่นนี้?
orlp

ค่าคงที่ใน ΘΘ เป็นชุดใน พีp. แม่นยำยิ่งขึ้นสำหรับค่าคงที่บางค่า,c,C เป็นกรณีที่สำหรับแต่ละ พีp มีอยู่ ยังไม่มีข้อความพีNp เช่นนั้นสำหรับ nยังไม่มีข้อความพีnNp, nเข้าสู่ระบบn/ชั่วโมง(พี)T(n,พี)nเข้าสู่ระบบn/ชั่วโมง(พี)cnlogn/h(p)T(n,p)Cnlogn/h(p). คุณอาจได้รับคำสั่งที่แข็งแกร่งยิ่งขึ้นของแบบฟอร์มT(n,พี)=(1+โอ(1))nเข้าสู่ระบบn/ชั่วโมง(พี)T(n,p)=(1+o(1))Cnlogn/h(p) สำหรับแต่ละคงที่ พีpซึ่ง o ตัวน้อยนั้นเกี่ยวกับ nn (แต่อาจขึ้นอยู่กับ พีp); Cไม่ควรขึ้นอยู่กับพีp.
Yuval Filmus

การบรรจบกันถึงขีด จำกัด ขึ้นอยู่กับ เข้าสู่ระบบnlognดังนั้นคุณอาจต้องการ เข้าสู่ระบบnlognมีขนาดใหญ่เพื่อให้ได้การประมาณที่ดีจริงๆ ในทางตรงกันข้ามข้อผิดพลาดสัมพัทธ์ของ 0.03 ไม่ได้เสียงที่มีขนาดใหญ่มาก คุณสามารถลองแก้ไขได้nn และพล็อตเวลาทำงานเป็นฟังก์ชั่นของ พีpเปรียบเทียบกับ 1/ชั่วโมง(พี)1/h(p).
Yuval Filmus

โอ้ฉันขอโทษฉันไม่ได้หมายถึงข้อผิดพลาดสัมพัทธ์ของ 0.03 แต่เป็นข้อผิดพลาดที่แน่นอน (2.13222 เทียบกับ 2.10339) พล็อตT(n,พี)T(n,p) เป็นหน้าที่ของ พีp, เกี่ยวข้องกับ 1/ชั่วโมง(พี)1/h(p) ให้ความแตกต่างสัมพัทธ์ 4% ด้วย T(1011,0.05)* * * *ชั่วโมง(0.05)T(1011,0.05)h(0.05) เป็น 96% ของ T(1011,0.4)* * * *ชั่วโมง(0.4)T(1011,0.4)h(0.4).
orlp

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