ฉันกำลังมองหาอัลกอริทึมการเรียงลำดับที่สามารถทำงานกับข้อมูลจำนวนมากได้เช่นสามารถทำงานได้แม้ว่าชุดข้อมูลทั้งหมดไม่สามารถเก็บไว้ในหน่วยความจำหลักได้ในครั้งเดียว
ผู้สมัครคนเดียวที่ฉันพบจนถึงขณะนี้คือการเรียงลำดับการผสาน: คุณสามารถใช้อัลกอริทึมในลักษณะที่จะสแกนชุดข้อมูลของคุณในแต่ละการผสานโดยไม่ต้องเก็บข้อมูลทั้งหมดในหน่วยความจำหลักในครั้งเดียว การเปลี่ยนแปลงของ merge sort ฉันมีในใจได้อธิบายไว้ในบทความนี้ในส่วนของการใช้งานด้วยเทปไดรฟ์
ฉันคิดว่านี่เป็นทางออกที่ดี (มีความซับซ้อน O (nx log (n)) แต่ฉันอยากรู้ว่ามีวิธีการเรียงลำดับอื่น ๆ (เร็วกว่า) เรียงลำดับที่สามารถทำงานกับชุดข้อมูลขนาดใหญ่ที่ไม่เหมาะกับหน่วยความจำหลัก
แก้ไข
นี่คือรายละเอียดเพิ่มเติมตามคำตอบที่ต้องการ:
- ข้อมูลจะต้องมีการเรียงลำดับเป็นระยะเช่นหนึ่งครั้งในหนึ่งเดือน ฉันไม่จำเป็นต้องแทรกบางระเบียนและมีการเรียงลำดับข้อมูลที่เพิ่มขึ้น
- ไฟล์ข้อความตัวอย่างของฉันมีขนาดประมาณ 1 GB UTF-8 แต่ฉันต้องการแก้ปัญหาโดยทั่วไปแม้ว่าไฟล์จะเป็น 20 GB ก็ตาม
- ไม่ได้อยู่ในฐานข้อมูลและเนื่องจากข้อ จำกัด อื่น ๆ จึงไม่สามารถทำได้
- ข้อมูลถูกทิ้งโดยผู้อื่นเป็นไฟล์ข้อความฉันมีรหัสของตัวเองเพื่ออ่านไฟล์ข้อความนี้
- รูปแบบของข้อมูลเป็นไฟล์ข้อความ: อักขระบรรทัดใหม่เป็นตัวคั่นเร็กคอร์ด
การปรับปรุงที่เป็นไปได้อย่างหนึ่งที่ฉันนึกไว้คือการแบ่งไฟล์ออกเป็นไฟล์ที่มีขนาดเล็กพอที่จะเรียงในหน่วยความจำและท้ายที่สุดผสานไฟล์เหล่านี้ทั้งหมดโดยใช้อัลกอริทึมที่ฉันได้อธิบายไว้ข้างต้น