อัลกอริธึมเชิงเส้นเวลาแบบกำหนดแน่นอนเพื่อตรวจสอบว่าหนึ่งอาเรย์เป็นเวอร์ชันที่เรียงลำดับของอีกอันหรือไม่


19

พิจารณาปัญหาต่อไปนี้:

อินพุต:สองอาร์เรย์และของความยาวโดยที่อยู่ในลำดับที่เรียงABnB

ค้นหา:ไม่และมีรายการเดียวกัน (กับหลายหลากของพวกเขา)?AB

อัลกอริทึมที่กำหนดได้เร็วที่สุดสำหรับปัญหานี้คืออะไร
สามารถแก้ไขได้เร็วกว่าการเรียงลำดับหรือไม่ สามารถแก้ปัญหานี้ในเวลาเชิงเส้นที่กำหนดได้หรือไม่?


1
FWIW แนวทางความน่าจะเป็นคือการแฮชด้วยฟังก์ชันแฮชคำสั่งที่เป็นอิสระ Carter และ Wegman เขียนหนึ่งในเอกสารต้นฉบับเกี่ยวกับเรื่องนี้ ( sciencedirect.com/science/article/pii/0022000081900337 ) แต่ฉันไม่เห็นอะไรเลยในการอ้างอิงของกระดาษนั้น
KWillets

1
ข้อความที่คุณอ้างถึงนั้นเกี่ยวกับโมเดลเครื่องจักรทัวริงซึ่งเป็นเพียงความสนใจเชิงทฤษฎีเท่านั้น อัลกอริทึมมักจะวิเคราะห์เกี่ยวกับรูปแบบ RAM
Yuval Filmus

อ้านั่นคือโมเดลที่ฉันกำลังมองหา ฉันปรับคำถาม
Albert Hendriks

ทำไมคุณไม่รวมรายการในอาร์เรย์แล้วเปรียบเทียบผลรวม เกี่ยวกับชื่อของคุณมันเป็นเส้นตรงและตอบคำถาม 'เป็นหนึ่งในรุ่นเรียงลำดับของอื่น ๆ ? ' ฉันรู้ว่ามันไม่ใช่รุ่นเครื่องจักรทัวริง แต่เป็นวิธีแก้ปัญหาในทางปฏิบัติ
atayenel

1
@AlbertHendriks คุณ (ส่วนใหญ่) ไม่สามารถเรียงลำดับอาร์เรย์ในO(nlogn)บนเครื่องทัวริง ขอบเขตที่ต่ำกว่าของ SAT (เช่นcs.cmu.edu/~ryanw/automated-lbs.pdf ) เป็นจริงสำหรับเครื่อง RAM ขออภัยที่ทำให้เข้าใจผิดก่อนหน้านี้
Yuval Filmus

คำตอบ:


14

คุณไม่ได้ระบุรูปแบบการคำนวณของคุณดังนั้นฉันจะถือว่ารูปแบบการเปรียบเทียบ

พิจารณากรณีพิเศษซึ่งในอาร์เรย์จะนำมาจากรายการ { 1 , 2 } × { 3 , 4 } × × { 2 n - 1 , 2 n } ในคำที่ฉัน TH องค์ประกอบทั้ง2 ฉัน- 1หรือ2ผมB

{1,2}×{3,4}××{2n1,2n}.
i2i12i

ฉันเรียกร้องว่าถ้าขั้นตอนวิธีการสรุปว่าและBมีองค์ประกอบเดียวกันว่าอัลกอริทึมที่มีการเปรียบเทียบองค์ประกอบในแต่ละBคู่ใน อันที่จริงสมมติว่าอัลกอริทึมสรุปว่าและBมีองค์ประกอบเดียวกัน แต่ไม่เคยเปรียบเทียบองค์ประกอบแรกของBคู่ใน ถ้าเราสลับองค์ประกอบแรกอัลกอริทึมจะดำเนินการในลักษณะเดียวกันแม้ว่าคำตอบจะแตกต่างกัน นี้แสดงให้เห็นว่าอัลกอริทึมต้องเปรียบเทียบองค์ประกอบแรก (และองค์ประกอบอื่น ๆ ) กับคู่ในABBAABBAA

ซึ่งหมายความว่าถ้าและBมีองค์ประกอบเดียวกันแล้วหลังจากการตรวจสอบขั้นตอนวิธีการนี้รู้ว่าเรียงลำดับของ ดังนั้นมันจะต้องมีอย่างน้อยn ! ใบที่แตกต่างกันและดังนั้นจึงต้องใช้เวลาΩ ( n log n )ABAn!Ω(nlogn)


ฉันคิดว่าสิ่งนี้จะบอกเป็นนัยว่าโดยทั่วไป แต่เห็นได้ชัดว่ารูปแบบการเปรียบเทียบนั้นแตกต่างจากแบบนั้น P=Ω(nlogn)
Albert Hendriks

@AlbertHendriks เป็นรุ่นเดียวกับที่ใช้เพื่อแสดง n lg n ขอบเขตล่างสำหรับการเรียงลำดับ หมายความว่าการดำเนินการเดียวที่คุณสามารถทำได้คือการเปรียบเทียบจากนั้นคุณจะไม่สามารถทำได้ดีกว่า ฉันคิดว่านี่ตอบคำถามของคุณ
Kaveh

[Cntd] เราไม่มีขอบเขตที่แข็งแกร่งแม้แต่การเรียงลำดับ! และถ้าคุณสามารถเรียงลำดับได้เร็วกว่า n lg n คุณสามารถใช้เพื่อแก้ไขปัญหาได้เร็วกว่า n lg n
Kaveh

1
@AlbertHendriks คุณรู้เกี่ยวกับอัลกอริธึมเชิงเส้นเวลาสำหรับการเรียงลำดับจำนวนเต็มหรือไม่? ค้นหาใน CLRS กรณีของคุณอาจเป็นหนึ่งในกรณีที่เราสามารถจัดเรียงในเวลาเชิงเส้น
Kaveh

6
จำนวนเต็มสามารถเรียงลำดับใน (ดูnada.kth.se/~snilsson/fast-sorting ) หรือในเวลาที่คาดหวังO ( n O(nloglogn)(ดูieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1181890) หรือแม้กระทั่งในเวลาเชิงเส้นถ้าขนาดของคำมีขนาดใหญ่พอ (ดู LNCS 8503, p. 26ff) O(nloglogn)
Yuval Filmus

10

คำตอบนี้พิจารณารูปแบบการคำนวณที่แตกต่าง: รุ่น RAM ราคาต่อหน่วย ในรูปแบบนี้คำพูดของเครื่องมีขนาดและการดำเนินงานที่พวกเขาใช้เวลาO ( 1 )เวลา นอกจากนี้เรายังถือว่าสำหรับความเรียบง่ายเหมาะกับว่าแต่ละองค์ประกอบอาร์เรย์ในคำหนึ่งเครื่อง (และเพื่อให้เป็นที่มากที่สุดn O ( 1 )ในขนาด)O(logn)O(1)nO(1)

เราจะสร้างเส้นเวลาสุ่มอัลกอริทึมที่มีข้อผิดพลาดด้านเดียว (อัลกอริทึมอาจประกาศสองอาร์เรย์จะมีองค์ประกอบเดียวกันแม้ว่านี้ไม่ได้เป็นกรณี) สำหรับปัญหาที่ยากลำบากมากขึ้นในการระบุว่าสองอาร์เรย์1 , ... , nและb 1 , , b nมีองค์ประกอบเดียวกัน (เราไม่จำเป็นต้องใด ๆ ของพวกเขาที่จะเรียง.) ขั้นตอนวิธีการของเราจะทำให้ข้อผิดพลาดกับความน่าจะเป็นที่มากที่สุด1 / na1,,anb1,,bn1/n

ความคิดคือตัวตนต่อไปนี้ถือ IFF อาร์เรย์มีองค์ประกอบเหมือนกัน: การคำนวณชื่อพหุนามเหล่านี้จะใช้เวลานานเกินไป แต่เราเลือกสุ่มนายกรัฐมนตรีpและสุ่มx 0และทดสอบว่า

i=1n(xai)=i=1n(xbi).
px0n i = 1 ( x - a i ) - n i = 1 ( x - b i ) a i , b ฉันn O ( 1 ) 2 n n O ( n ) = n O ( n ) O ( n ) Ω ( n ) n 2 p n
i=1n(x0ai)i=1n(x0bi)(modp).
หากอาร์เรย์มีค่าเท่ากันการทดสอบจะผ่านไปเสมอดังนั้นเราควรให้ความสนใจกับกรณีที่อาร์เรย์ต่างกัน โดยเฉพาะสัมประสิทธิ์ไม่ใช่ศูนย์ เนื่องจากมีขนาดเป็นสัมประสิทธิ์นี้มีขนาดเป็นและมีค่ามากที่สุดไพรม์ ปัจจัยที่มีขนาด(n) ซึ่งหมายความว่าถ้าเราเลือกชุดอย่างน้อยช่วงที่มีขนาดอย่างน้อย (พูด) แล้วสำหรับนายกสุ่มของชุดนี้จะถือมีโอกาสอย่างน้อยที่ i=1n(xai)i=1n(xbi)ai,binO(1)2nnO(n)=nO(n)O(n)Ω(n)n2p p 1 - 1 / n n i = 1 ( x - a i ) - n i = 1 ( x - b i ) 0n2p11/nx 0 p 1 - n / p 1 - 1 / n n n
i=1n(xai)i=1n(xbi)0(modp).
การสุ่มโมดูโลจะเป็นพยานในเรื่องนี้ด้วยความน่าจะเป็น (เนื่องจากพหุนามของดีกรีที่ส่วนใหญ่มีรากมากที่สุด )x0p1n/p11/nnn

โดยสรุปหากเราเลือกขนาดสุ่มโดยประมาณในกลุ่มของช่วงเวลาที่แตกต่างกันอย่างน้อยและสุ่ม moduloดังนั้นเมื่ออาร์เรย์ไม่มีองค์ประกอบเดียวกันการทดสอบของเราจะล้มเหลว กับความน่าจะเป็นn) การรันการทดสอบต้องใช้เวลาเนื่องจากพอดีกับจำนวนคำของเครื่องจักรn 2 n 2 x 0 p 1 - O ( 1 / n ) O ( n ) ppn2n2x0p1O(1/n)O(n)p

ใช้การทดสอบเวลา primality พหุนามและเนื่องจากความหนาแน่นของจำนวนเฉพาะที่มีขนาดประมาณเป็นเราสามารถเลือกนายกสุ่มในเวลา(1)} การเลือกสุ่มโมดูโลสามารถดำเนินการในรูปแบบต่างๆและทำง่ายขึ้นเนื่องจากในกรณีที่เราไม่จำเป็นต้องมีการสุ่มชุดสมบูรณ์x_0 Ω ( 1 /บันทึกn ) p ( บันทึกn ) O ( 1 ) x 0 p x 0n2Ω(1/logn)p(logn)O(1)x0px0

โดยสรุปอัลกอริทึมของเราทำงานในเวลาเสมอเอาท์พุท YES ถ้าอาร์เรย์มีองค์ประกอบเดียวกันและเอาต์พุต NO ที่มีความน่าจะเป็นถ้าอาร์เรย์ไม่มีองค์ประกอบเดียวกัน เราสามารถปรับปรุงความน่าจะเป็นข้อผิดพลาดสำหรับการใด ๆ คงC1 - O ( 1 / n ) 1 - O ( 1 / n C ) CO(n)1O(1/n)1O(1/nC)C


1
ในขณะที่อัลกอริทึมนี้ถูกสุ่มมันอธิบายวิธีการใช้ความคิดในบางคำตอบอื่น ๆ เพื่อให้พวกเขาใช้งานได้จริง มันยังมีข้อได้เปรียบเหนือวิธีการ hashtable: มันอยู่ในสถานที่
Yuval Filmus

ฉันคิดว่า OP ไม่ชอบอัลกอริธึมที่น่าจะเป็นเพราะเขาไม่ชอบอัลกอริธึมเชิงเส้นเวลาที่คาดหวังโดยใช้ตารางแฮช
Kaveh

Kaveh คุณพูดถูก แต่แน่นอนว่าโซลูชันนี้น่าสนใจและควรเก็บไว้มันแก้ปัญหากรณีอัลกอริธึมที่น่าจะเป็น นอกจากนี้ฉันคิดว่ามันใช้โมเดลที่ฉันกำลังมองหา
Albert Hendriks

1
ฉันแค่สงสัยว่าสัญกรณ์ O (1 / n) นั้นถูกต้องหรือไม่ แน่นอนฉันรู้ว่าคุณหมายถึงอะไร แต่ฉันคิดว่าตามคำจำกัดความของบิ๊กโอนี่เท่ากับ O (1)
Albert Hendriks

2
ไม่ใช่เลย. มันเป็นปริมาณล้อมรอบด้วยสำหรับขนาดใหญ่พอที่nนั่นคือการรับประกันที่ดีกว่า(1) C/nnO(1)
Yuval Filmus

-3

ฉันจะเสนออัลกอริทึมอื่น (หรืออย่างน้อยรูปแบบของอัลกอริทึมดังกล่าว)

โครงร่างสมมติว่าค่า (สมมติว่า " จำนวนเต็ม ") อยู่ในช่วง (แคบ?) ระหว่าง[min,max]

  1. ในเวลาสแกนทั้งสองอาร์เรย์เราสามารถค้นหาและค่าสำหรับทั้งสองและหลายหลากหากมีความแตกต่างเหล่านี้อาร์เรย์จะไม่เรียงสับเปลี่ยนกันO(n)minmax

  2. ลบminออกจากค่าทั้งหมดจากทั้งสองอาร์เรย์ (นี่คือความจริงที่ว่าหนึ่งอาร์เรย์ที่มีอยู่แล้วในการเรียงลำดับจะไม่ได้นำมาพิจารณาซึ่งน่าจะเป็นสิ่งที่ดีขึ้น)

  3. สมมติว่าค่าในอาร์เรย์เป็นตัวแทนของมวลชนและเราใช้การเร่งความเร็ว / ความเร็วกับขนาด (ซึ่งสามารถปรับปรุงให้มีขนาดบางกรณี)1c>1

  4. ย้ายฝูงจนกว่าจะถึงค่าสูงสุดของที่max-minนี้มีความซับซ้อนของn) สิ่งนี้ยอมให้ค้นหาทั้งค่าเดียวกันและพหุคูณของพวกมันหากสิ่งเหล่านี้แตกต่างกันอาร์เรย์จะไม่เรียงสับเปลี่ยนกัน อื่นตัดสินใจว่าอาร์เรย์เป็นพีชคณิตของกันและกันO((maxmin)n)

โปรดสังเกตว่ารูปแบบของอัลกอริทึมข้างต้นนั้นสามารถทำได้อย่างรวดเร็วในหลาย ๆ สถานการณ์

ชุดรูปแบบอัลกอริทึมข้างต้นเป็นรูปแบบของอัลกอริทึมการเรียงลำดับเวลาเชิงเส้นโดยใช้ " มวลที่กำลังเคลื่อนที่ " สัญชาตญาณทางกายภาพที่อยู่เบื้องหลังอัลกอริทึมการเรียงลำดับ "การเคลื่อนย้ายมวลชน " คือ:

สมมติว่ามูลค่าของแต่ละรายการแสดงถึงขนาดของมวลและจินตนาการว่าการจัดเรียงรายการทั้งหมดในบรรทัดและใช้แรงเร่งความเร็วเดียวกัน

จากนั้นแต่ละรายการจะเลื่อนขึ้นไปเป็นระยะทางที่เกี่ยวข้องกับมวลของมันยิ่งไกลน้อยลงและกลับกันมากขึ้น จากนั้นเพื่อดึงรายการที่เรียงลำดับเพียงรวบรวมรายการในลำดับย้อนกลับตามระยะทางที่เดินทาง

อัลกอรึทึมนี้เป็นแบบเส้นตรงเวลาและแบบกำหนดค่าได้แต่มีข้อแม้ว่าจำนวนของแรงเร่งเริ่มต้นและระยะทางในการเดินทาง (หรือเวลาที่ต้องรอ) สัมพันธ์กับการกระจายของค่า (เช่น " มวลชน "ปัจจัยด้านบน) เราสามารถลองแยกพื้นที่สำหรับรายการที่จะเดินทางเข้าไปในกริดและได้รับปัจจัยคงที่ในความเร็วอัลกอริทึม (และใช้รูทีนการเรียงลำดับแบบเร็วเพื่อเรียงลำดับรายการต่าง ๆ ในเซลล์เดียวกัน)maxmin

ในแง่นี้อัลกอริธึมด้านบนนั้นคล้ายกับอัลกอริธึมการเรียงตามตัวเลข (เช่นradix-sort , count-sort )

หนึ่งอาจคิดว่าอัลกอริทึมนี้อาจไม่ได้มีความหมายมากนัก แต่มันก็แสดงให้เห็นอย่างน้อยหนึ่งอย่าง นั่นคือ " พื้นฐาน " ที่ระดับกายภาพการเรียงลำดับหมายเลขโดยพลการเป็นการดำเนินการเชิงเส้นเวลาในจำนวนรายการ


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