ทำไมเป็น Radix เรียง


23

ในการเรียงลำดับ radix เราแรกเรียงตามเลขนัยสำคัญน้อยที่สุดจากนั้นเราเรียงตามหลักนัยสำคัญที่น้อยที่สุดรองและอื่น ๆ และจบลงด้วยรายการที่เรียงลำดับ

ตอนนี้ถ้าเรามีรายการหมายเลขเราต้องการบิตเพื่อแยกความแตกต่างระหว่างตัวเลขเหล่านั้น ดังนั้นจำนวนกี่เรียงผ่านที่เราทำจะเป็นn แต่ละรอบใช้เวลาและด้วยเหตุนี้เวลาทำงานของการเรียง Radix คือnlognlognO(n)O(nlogn)

แต่เป็นที่ทราบกันดีว่าเป็นอัลกอริธึมเชิงเส้นเวลา ทำไม?


นี่คือเหตุผลที่การเรียงลำดับเชิงเส้นเวลามักต้องการให้อินพุตเป็นจำนวนเต็มในช่วงบางช่วงคงที่ การจัดเรียง Radix ต้องใช้ช่วงคงที่ของตัวเลข ในตัวอย่างของคุณคุณสมมติว่าช่วงเป็นแต่ช่วงจำนวนเต็มใด ๆ เป็นไปได้สำหรับตัวเลข ตัวอย่างเช่นคุณสามารถเลือก[0,1][0,n]
Joe

คำตอบ:


19

หากเรามีรายการหมายเลขเราต้องการ bitsnlogn

ไม่: ถ้าเรามีรายการตัวเลขระหว่างถึงเราต้องการบิต ไม่มีความสัมพันธ์ระหว่างและโดยทั่วไป02k1kklogn

ถ้าตัวเลขที่มีทั้งหมดที่แตกต่างกันแล้วและ Radix เรียงลำดับตัวเลขที่แตกต่างกันดังนั้นจึงมีความซับซ้อนเวลาของการn) โดยทั่วไปความซับซ้อนของการเรียงตัวของ Radix คือโดยที่คือจำนวนองค์ประกอบที่จะเรียงลำดับและคือจำนวนบิตในแต่ละองค์ประกอบlognkΩ(nlogn)Θ(nk)nk

ที่จะบอกว่าความซับซ้อนของการเรียงตัวของ Radix คือO(n)หมายถึงการใช้ขนาดบิตคงที่สำหรับตัวเลข นี่ก็หมายความว่าสำหรับขนาดใหญ่พอที่จะมีค่าซ้ำกันมากมายn


มีทฤษฎีบททั่วไปที่อาร์เรย์หรือรายการวิธีการที่ผลงานโดยการเปรียบเทียบสององค์ประกอบในช่วงเวลาที่ไม่สามารถทำงานได้เร็วกว่าการเรียงลำดับเป็นในกรณีที่เลวร้ายที่สุด การเรียงลำดับ Radix ไม่ทำงานโดยการเปรียบเทียบองค์ประกอบ แต่วิธีการพิสูจน์เดียวกันทำงาน การจัดเรียง Radix เป็นกระบวนการตัดสินใจในการพิจารณาว่าการเปลี่ยนแปลงแบบใดที่จะใช้กับอาเรย์ มีn ! การเรียงสับเปลี่ยนของอาเรย์และการเรียงลำดับฐานข้อมูลจะใช้การตัดสินใจแบบไบนารีนั่นคือการตัดสินใจว่าจะสลับสององค์ประกอบหรือไม่ในแต่ละขั้นตอน หลังจากmการตัดสินใจแบบไบนารีการเรียงลำดับ radix สามารถตัดสินใจระหว่างการเปลี่ยนแปลง2 m ไปถึงn ! การเรียงสับเปลี่ยนที่เป็นไปได้มันเป็นสิ่งจำเป็นที่Θ(nlogn)n!m2mn! )mlog(n!)=Θ(nlogn)

ข้อสันนิษฐานในการพิสูจน์ที่ฉันไม่ได้เขียนข้างต้นคืออัลกอริทึมจะต้องทำงานในกรณีที่องค์ประกอบแตกต่างกัน ถ้าเป็นที่รู้กันมาก่อนว่าองค์ประกอบนั้นไม่แตกต่างกันทั้งหมดจำนวนการเรียงสับเปลี่ยนที่เป็นไปได้นั้นน้อยกว่าค่าเต็ม! . เมื่อเรียงลำดับหมายเลขk -bit เป็นไปได้ที่จะมีองค์ประกอบที่แตกต่างกันเพียงnเมื่อn 2 kเท่านั้น ในกรณีที่ความซับซ้อนของการจัดเรียง Radix แน่นอนΩ ( n log n ) สำหรับค่าที่มากขึ้นของnจะต้องมีการชนกันซึ่งจะอธิบายถึงวิธีการเรียงลำดับของ Radix ที่มีความซับซ้อนน้อยกว่าΘ (n!knn2kΩ(nlogn)nเมื่อ n > 2 kΘ(nlogn)n>2k


1
มุมมองทางเลือกคือโมเดลต้นทุน word-RAM: เครื่องของเราสามารถทำงานกับจำนวนเต็มของบิตในเวลาคงที่ (เครื่องปัจจุบันที่มีw = 64 ) ด้วยวิธีนี้ขั้นตอนหนึ่งของการจัดเรียงแบบกระจายพร้อมถัง2 วัตต์สามารถทำได้ในเวลาO ( 1 )โดยการเข้าถึงองค์ประกอบอาร์เรย์ที่สอดคล้องกันโดยตรง ด้วยวิธีนี้การเรียงตัวของ Radix จะเป็นเส้นตรงสำหรับจำนวนเต็มnจำนวนของw = O ( log n )บิตแต่ละตัว ww=642wO(1)nw=O(logn)
เซบาสเตียน

9

O(n)0k1kΘ(n+k)k=O(n)

ddΘ(d(n+k))dk=O(n)


1
[0,N1]N=O(nd)dO(d)O(n)

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