เรามีรายการจำนวนหนึ่งที่ผู้ใช้จะสามารถจัดระเบียบตามลำดับที่ต้องการได้ ชุดของไอเท็มไม่ได้เรียงลำดับ แต่แต่ละไอเท็มมีคีย์การเรียงซึ่งสามารถแก้ไขได้
เรากำลังมองหาอัลกอริทึมที่จะอนุญาตให้สร้างคีย์การเรียงลำดับใหม่สำหรับรายการที่เพิ่มหรือย้ายให้เป็นรายการแรกรายการสุดท้ายหรือระหว่างสองรายการ เราหวังว่าจะต้องแก้ไขคีย์การเรียงลำดับของรายการที่จะถูกย้าย
อัลกอริทึมตัวอย่างจะมีแต่ละคีย์การเรียงลำดับเป็นหมายเลขทศนิยมและเมื่อวางรายการระหว่างสองรายการให้ตั้งค่าคีย์การเรียงเป็นค่าเฉลี่ย การวางรายการแรกหรือสุดท้ายจะใช้ค่านอกสุด + - 1
ปัญหาที่นี่คือความแม่นยำจุดลอยตัวอาจทำให้การเรียงลำดับล้มเหลว การใช้จำนวนเต็มสองจำนวนแทนจำนวนเศษส่วนในทำนองเดียวกันอาจทำให้ตัวเลขมีขนาดใหญ่จนไม่สามารถแสดงได้อย่างแม่นยำในประเภทตัวเลขปกติ (เช่นเมื่อถ่ายโอนเป็น JSON) เราไม่ต้องการใช้ BigInts
มีอัลกอริทึมที่เหมาะสมสำหรับสิ่งนี้ที่จะใช้งานได้ตัวอย่างเช่นการใช้สตริงซึ่งจะไม่ได้รับผลกระทบจากข้อบกพร่องเหล่านี้หรือไม่?
เราไม่ได้มองหาการสนับสนุนการเคลื่อนไหวจำนวนมาก แต่อัลกอริทึมที่อธิบายไว้ข้างต้นอาจล้มเหลวในจำนวนจุดลอยตัวที่มีความแม่นยำสองเท่าหลังจากผ่านไป 50 ครั้ง
A, B, C
- A, AA, B, C
- -A, AA, AB, B, C
A, AA, AAA, AAB, AAC, AB, AC, B, C
แน่นอนคุณอาจต้องการเว้นวรรคจดหมายของคุณให้มากขึ้นเพื่อที่ว่าสายอักขระจะไม่เติบโตอย่างรวดเร็ว แต่ก็สามารถทำได้