3
วิธีใช้การสลับแบบถ่วงน้ำหนัก
ฉันเพิ่งเขียนโค้ดบางอย่างที่ฉันคิดว่าไม่มีประสิทธิภาพมาก แต่เนื่องจากมีเพียงไม่กี่ค่าฉันจึงยอมรับ อย่างไรก็ตามฉันยังคงสนใจอัลกอริทึมที่ดีกว่าสำหรับสิ่งต่อไปนี้: รายการของวัตถุ 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 …
22
algorithms