ฉันเพิ่งเขียนโค้ดบางอย่างที่ฉันคิดว่าไม่มีประสิทธิภาพมาก แต่เนื่องจากมีเพียงไม่กี่ค่าฉันจึงยอมรับ อย่างไรก็ตามฉันยังคงสนใจอัลกอริทึมที่ดีกว่าสำหรับสิ่งต่อไปนี้:
- รายการของวัตถุ X แต่ละชิ้นจะถูกกำหนดเป็น "น้ำหนัก"
- สรุปน้ำหนัก
- สร้างตัวเลขสุ่มจาก 0 ถึงผลรวม
- วนซ้ำผ่านวัตถุลบน้ำหนักออกจากผลรวมจนกว่าผลรวมจะไม่เป็นบวก
- เอาวัตถุออกจากรายการแล้วเพิ่มลงในส่วนท้ายของรายการใหม่
รายการ 2,4 และ 5 ต้องใช้n
เวลาดังนั้นมันจึงเป็นO(n^2)
อัลกอริธึม
สามารถปรับปรุงได้ไหม
ตัวอย่างของการสลับแบบถ่วงน้ำหนักองค์ประกอบมีโอกาสมากขึ้นที่จะอยู่ข้างหน้าด้วยน้ำหนักที่สูงขึ้น
ตัวอย่าง (ฉันจะสร้างตัวเลขสุ่มเพื่อทำให้เป็นจริง):
6 สิ่งของที่มีน้ำหนัก 6,5,4,3,2,1; ผลรวมคือ 21
ฉันเลือก 19: 19-6-5-4-3-2 = -1
ดังนั้น 2 ไปในตำแหน่งแรกน้ำหนักตอนนี้ 6,5,4,3,1; ผลรวมคือ 19
ฉันเลือก 16: 16-6-5-4-3 = -2
ดังนั้น 3 ไปในตำแหน่งที่สองตอนนี้น้ำหนักอยู่ที่ 6,5,4,1; ผลรวมคือ 16
ฉันเลือก 3: 3-6 = -3
ดังนั้น 6 ไปในตำแหน่งที่สามตอนนี้น้ำหนักอยู่ที่ 5,4,1; ผลรวมคือ 10
ฉันเลือก 8: 8-5-4 = -1
ดังนั้น 4 ไปที่ตำแหน่งที่สี่ตอนนี้น้ำหนักอยู่ที่ 5,1; ผลรวมคือ 6
ฉันเลือก 5: 5-5=0
ดังนั้น 5 ไปในตำแหน่งที่ห้าน้ำหนักตอนนี้ 1; ผลรวมคือ 1
ฉันเลือก 1: 1-1=0
ดังนั้น 1 ไปที่ตำแหน่งสุดท้ายฉันไม่มีน้ำหนักอีกต่อไปฉันเสร็จแล้ว