ปรับปรุง: ฉันขยายคำตอบนี้ลงในกระดาษคัดแยกกับค่าเฉลี่ยของl g ( n ! ) + o ( n )lg(n!)+o(n)การเปรียบเทียบ
ใช่อัลกอริทึมดังกล่าวมีอยู่ ฉันจะพิสูจน์ได้ว่าถูกผูกมัด แต่ภายใต้สมมติฐานการสุ่มแบบสุ่มเราก็จะได้ . ฉันยังพยายามที่จะอธิบายสำหรับและε})l g ( n ! ) + o ( n ) l g ( n ! ) + O ( n 1 - ε ) n 0.5 + o ( 1 ) O ( n 0.5 - ε )lg(n!)+o(n)lg(n!)+O(n1−ε)n0.5+o(1)O(n0.5−ε)
เราสามารถสันนิษฐานได้ว่าองค์ประกอบทั้งหมดนั้นแตกต่างกันโดยให้คำอธิบายประกอบถ้าจำเป็น กรณีเฉลี่ยใช้องค์ประกอบที่แตกต่างในลำดับสุ่ม เราสามารถคำนวณจำนวนเฉลี่ยของการเปรียบเทียบโดยเพิ่มการสูญเสียเอนโทรปีสำหรับการเปรียบเทียบแต่ละครั้งเมื่อเทียบกับการใช้เหรียญยุติธรรม
จุดเริ่มต้นคือการเรียงลำดับการแทรกด้วยการค้นหาแบบไบนารีเพื่อตัดสินใจว่าจะแทรกองค์ประกอบถัดไปลงในชุดย่อยเรียงลำดับแล้ว เมื่อ , การแทรกใช้ที่การเปรียบเทียบส่วนใหญ่, ซึ่ง (ในแง่ของเอนโทรปี) นั้นเหมาะสมที่สุดกับปัจจัยการเติม (และสำหรับความซับซ้อนของค่าเฉลี่ย,ใช้ได้เช่นกัน) ตอนนี้เมื่อไม่ใกล้เคียงกับกำลังของ 2 การแทรกองค์ประกอบนั้นไม่ดี (แม้ในกรณีทั่วไปและไม่คำนึงถึงวิธีที่เรารักษาความสมดุลของแต่ละคำถาม) แต่ถ้าเสียการเปรียบเทียบเราสามารถคัดไปยังการกระจายแบบประมาณ ในช่วงเวลาของS ( 1 - ε ) 2 m ≤ | S | ≤ 2 m - 1 m O ( ε ) 2 m ≤ | S | ≤ ( 1 + ε ) 2 m | S | A o ( 1 ) A SS(1−ε)2m≤|S|≤2m−1mO(ε)2m≤|S|≤(1+ε)2m|S|Ao(1)ASของความยาวใกล้เคียงกับกำลังสองเราได้รับการปรับให้เหมาะสม
เราบรรลุสิ่งนี้โดยการเพิ่มองค์ประกอบในแบทช์และบางครั้งการเปรียบเทียบองค์ประกอบของแบทช์กับแต่ละอื่น ๆ อย่างมีประสิทธิภาพเช่นช่วงเวลาของสอดคล้องกับองค์ประกอบลดลงในลักษณะกึ่งสุ่ม (และมีการกระจายความน่าจะเป็นของภายในช่วงเวลา เกือบเครื่องแบบ) และเมื่อความยาวช่วงก็พอใกล้กับอำนาจของ 2, ทำค้นหา binary แทรกS A A ASAAA
โครงสร้างทั่วไป
เราจะเก็บเซตย่อยขององค์ประกอบที่เรียงลำดับแล้วและสำหรับองค์ประกอบที่ไม่เรียงลำดับแต่ละเราจะติดตามช่วงเวลาที่น้อยที่สุดของของโดยที่ทราบว่าตั้งอยู่ คือความยาวของ ; นั้นขึ้นอยู่กับช่วงเวลาS A I A S A | ฉันA | I A I A = I BSAIASA|IA|IAIA=IB
ให้เป็น: เปรียบเทียบกับและจากนั้น (ตามลำดับแบบสุ่ม) เปรียบเทียบและกับองค์ประกอบที่เกี่ยวข้องของจนกระทั่งช่วงเวลาของพวกเขาเป็น disjoint (หรือมีความยาว 1) องค์ประกอบของถูกเลือก (ในลักษณะที่สอดคล้องกัน) เพื่อทำให้ความน่าจะเป็นสำหรับการเปรียบเทียบใกล้ที่สุดเท่าที่จะทำได้ 1/2 สมมติว่าเมื่อเรียกว่ามีการกระจายอย่างสม่ำเสมอในI_B เนื่องจากความไม่ลงรอยกันในท้ายที่สุดคงไว้ซึ่งสมมติฐานที่เหมือนกันC o m p a r e ( A , B ) A B A B S S C o m p a r e ( A , B ) I A ⨯ I B C o m p a r eCompare(A,B)ABABSSCompare(A,B)IA×IBCompare
ส่วนต่อไปนี้สามารถอ่านได้อย่างอิสระจากกัน
อัลกอริทึมAl g ( n ! ) + o ( n )lg(n!)+o(n)
รับ: เรียงรายการและชุดขององค์ประกอบที่ไม่เรียงลำดับ ; ; องค์ประกอบที่ไม่ได้เรียงลำดับเป็นญาติสุ่มSS เมตรเมตร∈ โอห์ม ( 1 ) ∩ o ( | S | ) SSmm∈ω(1)∩o(|S|)S
ทำซ้ำ (1) - (3) ในขณะที่เป็นไปได้:
1. เลือกสององค์ประกอบและจากแบทช์ด้วย (ตัวเลือกใดก็ได้)
2. RunB)
3. ถ้าใกล้เคียงกับกำลัง 2 (หมายเหตุ 1)ลบออกจากแบตช์ (โดยไม่ลืม ) และทำในทำนองเดียวกันกับBในที่สุด: แทรกองค์ประกอบทั้งหมดลงในและเรียงลำดับให้เสร็จสมบูรณ์A B I A = I B C o มp a r e ( A , B ) | ฉันA |ABIA=IB
Compare(A,B)
|IA|A I A BAIAB
SS
หมายเหตุ 1:สำหรับ "ใกล้เพียงพอ" ข้อผิดพลาดสัมพัทธ์ใด ๆ(เนื่องจากฟังก์ชันของ ) ทำงานตราบเท่าที่องค์ประกอบจะถูกลบออกในขั้นตอน (4) (เป็นไปได้โดยหมายเหตุ 2) ภายใต้การสันนิษฐานแบบสุ่มสันนิษฐานการใช้ข้อผิดพลาดที่เกี่ยวข้องกับการจับภาพองค์ประกอบอนุญาตอัลกอริทึมการเรียงลำดับการเปรียบเทียบแบบเปรียบเทียบo ( 1 ) m m - o ( m ) c log log m / log m m ( 1 - log - Θ ( c ) m ) l g ( n ! ) + O ( n log log n / log n )o(1)mm−o(m)cloglogm/logmm(1−log−Θ(c)m)lg(n!)+O(nloglogn/logn)
หมายเหตุ 2:เนื่องจากลำดับการเปรียบเทียบที่เหมือนกันนำไปสู่ช่วงเวลาการโยงที่เท่ากันองค์ประกอบเกือบทั้งหมดจะผ่านขั้นตอน (1)ครั้ง (ยกเว้นลบออกในขั้นตอนที่ 4) ในการเริ่มต้นถ้าและเราเลือกเราเปรียบเทียบกับองค์ประกอบและการใช้งานแต่ละขั้นตอน (3) ถึงมีความน่าจะเป็นในการลดในครั้ง ทีนี้สำหรับทุกอัตราส่วนที่ไม่ใช่พลังที่มีเหตุผลเท่ากับ 2 เรามีและเราก็จะได้Ω ( บันทึกเมตร) < B S [ ≈ ( 1 - 1 / √Ω(logm)A<BAA2 )| S| ]AO(1)| ฉันA| ≈1/(1-1/ √S[≈(1−1/2–√)|S|]AO(1)|IA|2 )>1∀ε>0∀d>0∃เมตร,n∈N≈1/(1−1/2–√)a>11 - ε < a md 2 n <1+εo(n)∀ε>0∀d>0∃m,n∈N1−ε<amd2n<1+εo(n) ขอบเขต
แนวโน้มอัลกอริทึมl g ( n ! ) + O ( n 1 - ε )lg(n!)+O(n1−ε)
โมดูโลสมมุติฐานการสุ่มเราสามารถบรรลุเปรียบเทียบโดยเฉลี่ยดังนี้l g ( n ! ) + O ( n 1 - ε )lg(n!)+O(n1−ε)
สุ่มสับเปลี่ยนรายการและเรียงลำดับครึ่งแรกลงในรายการขณะที่เก็บครึ่งหลังเป็นแบทช์ที่ไม่เรียงลำดับSS
ทำซ้ำจนกว่าชุดเป็นที่ว่างเปล่า:
สุ่มเลือก{} ให้\} หากเป็นที่ว่างเปล่าเอาจากชุดและใส่ลงในSมิฉะนั้น:∈ ชุดG = { B ∈ ชุด: | P ( A < B ) - 0.5 | < n - 0.51 ε } G A SA∈batchG={B∈batch:|P(A<B)−0.5|<n−0.51ε}GAS
- หากมีเช่นนั้นที่มีความน่าจะเป็น (พูด≥0.05),ทำภายในข้อผิดพลาดสัมพัทธ์ของกำลัง 2, รันและหากประสบความสำเร็จ (เช่นอยู่ภายในข้อผิดพลาดสัมพัทธ์ของกำลัง 2) เอาจากชุดและใส่ลงในSB ∈ G Θ ( 1 ) C o m p a r e ( A , B ) | ฉันA | n - ε C o m p a r e ( A , B ) | ฉันA | n - ε A SB∈GΘ(1)Compare(A,B)|IA|n−εCompare(A,B)|IA|n−εAS
- ถ้าไม่มีเช่นวิ่งสำหรับสุ่มB∈GB ∈ G C o มพีR E ( , B ) B ∈ GB∈GCompare(A,B)B∈G
ถ้าสมมติฐานการสุ่มของเราใช้งานได้ (เช่นการกระจายความยาวของช่วงเวลาและตำแหน่งสุ่มพอ) จากนั้นตลอดกระบวนการส่วนใหญ่สามารถเปรียบเทียบได้อย่างมีประสิทธิภาพเมื่อเทียบกับการเลือกองค์ประกอบ (กับความยาวช่วงเวลาต่างกัน) ดังนั้นโดยทั่วไปแล้วเราสามารถเลือกการเปรียบเทียบสำหรับ (1) ด้านบนและถ้าเราโชคไม่ดีกับผลการเปรียบเทียบเรายังคงได้รับโอกาสดังนั้นการบรรลุ (ถ้ามีขนาดเล็กพอพูด 0.01) a -comparison algorithm ด้วยการเปลี่ยนแปลงและการประมาณบางอย่างการคำนวณทั้งหมดสามารถทำ quasilinear: กำหนดองค์ประกอบA n Θ ( 1 ) n Θ ( 1 ) Θ ( บันทึกn ) ε l g ( n ! ) + O ( n 1 - ε ) A BAnΘ(1)nΘ(1)Θ(logn)εlg(n!)+O(n1−ε)Aคำนวณความยาวของช่วงเวลาที่มีแนวโน้มจากนั้นค้นหา s ด้วยความยาวกลางและช่วงเวลาโดยประมาณที่เหมาะสมB
มีหลายวิธีในการเพิ่มประสิทธิภาพการเปรียบเทียบ แต่อุปสรรคคือการเปรียบเทียบแต่ละครั้งอาจจบลงด้วยความโชคร้ายและเรามีการเปรียบเทียบจำนวน จำกัด หากหลังจากการปรับให้เหมาะสมแล้วทำการเปรียบเทียบโดยเฉลี่ย 4 ครั้งและ 'ประสบความสำเร็จ' ด้วยความน่าจะเป็น 1/4 เราจะได้0.09C o มพีR E ( , B ) ε ≈ ( 1 - ε ) / 4 / เข้าสู่ระบบ4 / 3 2 ≈ 0.09Compare(A,B)ε≈(1−ε)/4/log4/32≈0.09
วิธีที่ดีกว่าอาจจะดีกว่าคือรอจนกระทั่งช่วงเวลาใกล้เคียงกับกำลังของ 2 โดยไม่ควบคุมความยาวแต่ละช่วง แต่เป็นการกระจายความยาว
ความพยายามที่อัลกอริทึมl g ( n ! ) + n 0.5 + o ( 1 )lg(n!)+n0.5+o(1)
สมมติว่าและเราจะได้รับองค์ประกอบที่ไม่มีการเรียงลำดับขององค์ประกอบมีช่วงเวลายังได้รับด้วยโดยปกติแล้วและกระจายอย่างสม่ำเสมอ (มากถึงข้อผิดพลาดแบบสุ่มและถือด้วยความแม่นยำเพียงพอแม้ว่าจะมีเงื่อนไขใน ) จากนั้นเราสามารถเรียงลำดับรายการที่สูญเสียค่าเฉลี่ยของการเปรียบเทียบดังนี้:
(*) แทรกองค์ประกอบทั้งหมดตามลำดับเริ่มต้นrfloor}} วิธีนี้จะแทรกองค์ประกอบทั้งหมดเมื่อความยาวช่วงเวลาใกล้เคียงกับกำลังของ 2| S | = n n I A | ฉันA | n 1 - o ( 1 ) | ฉันA ||S|=nnIA|IA|n1−o(1)2 ⌊ l g | ฉันA | ⌋ A<S[i]n0.5+o(1)| ฉันA||IA|2⌊lg|IA|⌋A<S[i]n0.5+o(1)
2⌊lg|IA|⌋|IA|2⌊lg|IA|⌋
ขั้นตอนวิธีการเรียงลำดับจะได้รับ: สุ่มสับเปลี่ยนรายการและจัดเรียงครึ่งแรกSหากต้องการแทรกครึ่งหลังให้ทำการกระจายสิทธิ์และทำ (*) ด้านบนSS
ในการสร้างกระจายถูกต้องเราสามารถทำการแจกแจงแบบสุ่มและจากนั้นหักส่วนที่ถูกต้องขององค์ประกอบสำหรับแต่ละขณะสุ่มส่วนที่เหลือ (ทำซ้ำหากจำเป็น) อย่างไรก็ตามในขณะนี้ควรแก้ไขทั่วโลกเราไม่ทราบว่าสามารถควบคุมได้ในระดับท้องถิ่นด้วยความแม่นยำที่ต้องการหรือไม่ (ด้วยเหตุนี้คำว่า "ความพยายาม" ด้านบน)|IA|2⌊lg|IA|⌋|IA|2⌊lg|IA|⌋|IA|/2⌊lg|IA|⌋|IA|/2⌊lg|IA|⌋|IA|2⌊lg|IA|⌋|IA|2⌊lg|IA|⌋
ในการสร้างการกระจายแบบสุ่มเราสามารถใช้กับยกเว้นว่าด้วยเริ่มต้นเหมือนกันทั้งหมดเราไม่คาดหวังการสุ่มที่ความลึก sublogarithmic (เช่นมีนานพอ) แต่ผมคาดว่าเราจะได้รับการสุ่มที่ระดับความลึก sublogarithmic ใช้ generalizations (อาจใด ๆ ทางเลือกที่เหมาะสมจะทำงาน) ของเพื่อองค์ประกอบ: ถ้าเราให้องค์ประกอบพันกันยุ่ง (เช่น เชื่อมต่อโดยใช้ผลการเปรียบเทียบ) เราควรจะมีเกี่ยวกับ noncommuting ทางเลือกสำหรับแต่ละเปรียบเทียบกับSสิ่งนี้ควรอนุญาตCompare(A,B)Compare(A,B)P(A<B)≈0.5P(A<B)≈0.5IAIAIAIACompareComparek=ω(1)k=ω(1)k=ω(1)k=ω(1)kkSSO(logkn+logk)O(logkn+logk)ความลึกของการสุ่มตามที่ต้องการ (สมมติว่าไม่ใหญ่เกินไปเนื่องจากเราต้องการความลึกเพื่อเบี่ยงเบนองค์ประกอบต่าง ๆ ) ผมคาดหวังว่าการประมวลผลที่สามารถทำ quasilinear ถ้าใช้ขนาดเล็กพอที่kkkΘ(logk)Θ(logk)kk
เนื่องจากการเปรียบเทียบกับใช่ความน่าจะเป็นเพียงแค่ทำให้เสียเอนโทรปีการสุ่มเริ่มต้นและความไม่สม่ำเสมอขององค์ประกอบในช่วงเวลาที่ จำกัด นั้นจะต้องมีขยะเอนโทรปี หากการกระจายรูปร่างประสบความสำเร็จเพียงพอพอเอนโทรปีของเสียส่วนใหญ่เกิดจากช่วงความยาวช่วงไม่ตรงกันระหว่าง (*) (ดังนั้น )1/2+n−0.51/2+n−0.5O(1/n)O(1/n)no(1)no(1)n0.5+o(1)n0.5+o(1)
เป็นไปได้รวมกัน:lg(n!)+O(n0.5−ε)lg(n!)+O(n0.5−ε) หากการกระจายรูปร่างทำงานได้ดีพอและเราทำให้ขนาดแบทช์เท่ากับและ คัดสรรองค์ประกอบใน (*) (ด้านบน) เราสามารถแทรกทั้งหมดยกเว้นองค์ประกอบเหล่านี้ที่มีขยะเอนโทรปีดังนี้ แยกเป็นเกือบเท่ากันทุกช่วงเวลาและเมื่ออยู่ระหว่างการแทรกจะหยุดตามช่วงเวลาปฏิเสธ (เช่นยกเลิกการแทรก) ถ้าช่วงเวลานั้นยาวเกินไปจึงลดความผันแปรของความยาวของช่วงเวลาเหล่านี้|S|+n0.5+ε|S|+n0.5+ε≈n0.5+ε≈n0.5+ε≈n0.5+ε≈n0.5+εn0.5−ε/2+o(1)n0.5−ε/2+o(1)SSnεnεIAIAΘ(nε/2)Θ(nε/2)คูณด้วยซึ่งจะลดความผันแปรของความยาวแบบสุ่มช่วงในครั้งตามต้องการ ตอนนี้เราสามารถใช้อัลกอริทึมในการแทรกองค์ประกอบที่เหลือด้วยหากมีขนาดเล็ก พอ.n1−o(1)n1−o(1)nε/2−o(1)nε/2−o(1)lg(n!)+O(n1−ε)lg(n!)+O(n1−ε)O(n0.5−ε′)O(n0.5−ε′)εε
ความซับซ้อนของการเรียงลำดับที่แย่ที่สุด: เป็นไปได้ มากที่สุดที่มีอัลกอริทึมการเรียงด้วยการเปรียบเทียบกรณีที่แย่ที่สุด สำหรับการหาค่ามัธยฐานมีช่องว่างเชิงเส้นระหว่างการเปรียบเทียบกรณี (เปรียบเทียบ) และกรณีที่เลวร้ายที่สุด (อย่างน้อยการเปรียบเทียบ) อย่างไรก็ตามสำหรับการเรียงลำดับมีอิสระมากมายสำหรับการจัดเรียงการเปรียบเทียบและการค้นหาอัลกอริทึมการเรียงลำดับใหม่lg(n!)+o(n)lg(n!)+o(n)1.5n+o(n)1.5n+o(n)(2+ε)n−O(1)(2+ε)n−O(1)