ฉันได้เรียนรู้เกี่ยวกับการเรียงลำดับ Radix เมื่อเร็ว ๆ นี้ และหนึ่งในแหล่งข้อมูลที่ฉันใช้คือหน้า Wikipedia ในขณะนี้มีย่อหน้าต่อไปนี้เกี่ยวกับประสิทธิภาพของอัลกอริทึม:
หัวข้อประสิทธิภาพของการเรียงลำดับ Radix เมื่อเปรียบเทียบกับอัลกอริธึมการเรียงลำดับอื่นๆ นั้นค่อนข้างยุ่งยากและอาจมีความเข้าใจผิดค่อนข้างมาก การเรียงลำดับ Radix จะมีประสิทธิภาพเท่ากัน มีประสิทธิภาพน้อยกว่า หรือมีประสิทธิภาพมากกว่าอัลกอริธึมที่ใช้การเปรียบเทียบที่ดีที่สุดหรือไม่ ขึ้นอยู่กับรายละเอียดของสมมติฐานที่ทำขึ้น ความซับซ้อนในการเรียงลำดับ Radix คือ O(wn) สำหรับคีย์ n ซึ่งเป็นจำนวนเต็มขนาดคำ w บางครั้ง w จะถูกนำเสนอเป็นค่าคงที่ ซึ่งจะทำให้การเรียงลำดับ Radix ดีขึ้น (สำหรับ n ที่มีขนาดใหญ่เพียงพอ) มากกว่าอัลกอริธึมการเรียงลำดับตามการเปรียบเทียบที่ดีที่สุด ซึ่งทั้งหมดจะทำการเปรียบเทียบ O(n log n) เพื่อเรียงลำดับ n คีย์ อย่างไรก็ตาม โดยทั่วไป w ไม่สามารถถือเป็นค่าคงที่ได้: หากคีย์ n ทั้งหมดแตกต่างกัน อย่างน้อย w จะต้องมีบันทึก n เพื่อให้เครื่องที่เข้าถึงโดยสุ่มสามารถจัดเก็บไว้ในหน่วยความจำ ซึ่งให้ ความซับซ้อนของเวลาที่ดีที่สุด O(n log n) นั่นดูเหมือนจะทำให้การเรียงลำดับ Radix มีประสิทธิภาพเท่าเทียมกันมากที่สุดกับการเรียงลำดับตามการเปรียบเทียบที่ดีที่สุด (และแย่กว่านั้นถ้าคีย์ยาวกว่า log n มาก) .
ส่วนที่เป็นตัวหนากลายเป็นอุปสรรคที่ฉันไม่สามารถผ่านไปได้ ฉันเข้าใจว่าโดยทั่วไปการเรียงลำดับ Radix คือ O(wn) และจากแหล่งข้อมูลอื่น ๆ ได้เห็นว่า O(n) สามารถทำได้อย่างไร แต่ไม่เข้าใจว่าทำไม n คีย์ที่แตกต่างกันจึงต้องใช้เวลา O(n log n) ในการจัดเก็บในรูปแบบสุ่ม เข้าถึงเครื่อง ฉันค่อนข้างแน่ใจว่ามันขึ้นอยู่กับคณิตศาสตร์ง่ายๆ แต่น่าเสียดายที่ความเข้าใจที่มั่นคงยังคงอยู่นอกเหนือความเข้าใจของฉัน
ความพยายามที่ใกล้ที่สุดของฉันมีดังนี้:
เมื่อกำหนดฐาน 'B' และตัวเลขในฐานนั้น 'N' ตัวเลขสูงสุด 'N' สามารถมีได้คือ:
(ล็อกB ของ N) + 1
หากตัวเลขแต่ละตัวในรายการที่กำหนด L ไม่ซ้ำกัน เราจะได้มากถึง:
L *((logB ของ N) + 1) ความเป็นไปได้
ถึงจุดนั้นฉันไม่แน่ใจว่าจะก้าวหน้าไปอย่างไร
มีใครช่วยขยายส่วนด้านบนด้วยตัวหนาและแจกแจงว่าทำไม n คีย์ที่แตกต่างกันจึงต้องการบันทึกขั้นต่ำสำหรับพื้นที่เก็บข้อมูลที่เข้าถึงโดยสุ่ม