เรียงลำดับค่าที่ไม่ได้ผูกไว้ตามมาตราส่วนที่ถูกผูกไว้หรือไม่

ฉันมีชุดของค่าที่ไม่ได้ผูกไว้เก็บไว้ในอาร์เรย์ (จะเป็น NSArray ถ้าช่วยได้) ค่าสามารถอยู่ในช่วงตั้งแต่ 0 ถึงอนันต์ (ในความเป็นจริงค่าสูงสุดคือประมาณ 100,000,000)

ฉันต้องจัดเรียงค่าในอาร์เรย์ของฉันเป็นระดับ 0 ถึง 20

ตัวอย่างเช่น หากฉันมีชุดของ 1000, 3123, 31 31 จะเป็น 0, 1000 จะเป็น 10 และ < strong>3123 จะเป็น 20 อาร์เรย์จะแตกต่างกันไปตามจำนวนสมาชิกและค่าสูงสุด ดังนั้นฉันรู้ว่าหากมีค่าจำนวนมากที่มีช่วงต่างกัน ค่าเหล่านั้นจำนวนมากก็จะอยู่ในตำแหน่งเดียวกันในสเกล โดยส่วนใหญ่ จำนวนรายการจะมากกว่า 20 รายการ (จำนวนเฉลี่ยของรายการคือประมาณ 100)

เมื่อจำนวนรายการมากกว่า 20 รายการ บางรายการควรมีคะแนนเท่ากัน

ฉันต้องการสิ่งนี้เพื่อแสดงภาพความนิยมของเพลงต่อคำค้นหา โดยที่ค่าเหล่านั้นคือการแสดงตำแหน่งของเพลงทั่วโลกในชาร์ตทั่วโลก

เป็นไปได้ไหมที่จะสร้างอัลกอริทึมดังกล่าว?


person Kristina Brooks    schedule 18.07.2011    source แหล่งที่มา
comment
ช่วงของคุณคือ 1–20 (ตามที่คุณอ้างสิทธิ์) หรือ 0–20 (ตามที่แนะนำโดยตัวอย่างของคุณ)   -  person Gareth Rees    schedule 19.07.2011
comment
ฉันจะใช้มาตราส่วนลอการิทึมคงที่ในกรณีเช่นนี้   -  person starblue    schedule 19.07.2011


คำตอบ (3)


ถ้าฉันเข้าใจคุณถูกต้อง คุณแค่ต้องการเรียงลำดับค่าของคุณจากน้อยไปหามากและแมปค่าเหล่านั้นให้อยู่ในช่วง 0 ถึง 20 ดังนั้นคุณก็แค่นับจำนวนค่าที่คุณมี (เช่น 11) หารช่วงของคุณด้วยตัวเลขนี้ - 1 (เช่น 20/(11 - 1) = 2) และกำหนดแต่ละค่าด้วยตัวเลขที่เหมาะสม (เช่น 0, 2, 4, 6, 8...)

person Daniel    schedule 18.07.2011
comment
จากนั้นคุณจะได้ความแตกต่างที่ต่ำกว่า 1 (แต่จะสูงกว่า 0 เสมอ) เช่น 0, 0.3, 0.6, 0.9, 1.2... - person Daniel; 19.07.2011

จัดเรียงอาร์เรย์ ตอนนี้คูณดัชนีของแต่ละรายการด้วย (20 / ([myArray count] - 1)); โปรดทราบว่าการนับต้องเป็น > 1 ฉันเดาว่าคุณจะมีไม่เกิน 20 รายการใช่ไหม

person Rudy Velthuis    schedule 18.07.2011

เปอร์เซ็นต์เช่นการคำนวณช่วยคุณได้หรือไม่? นั่นคือใช้ค่าสูงสุดเป็น 100% (เช่น 20) และส่วนที่เหลือจะแมปเป็นเปอร์เซ็นต์ของค่าสูงสุด สำหรับแฟนเก่าของคุณ:

[ 1000 3123 31 ]
(31/3123)*20 = 2
(1000/3123)*20 = 6 (or 7)
(3123/3123)*20 = 20

วิธีนี้จะทำให้ค่าสุดท้าย (ในระดับ 0-20) ยังคงมีการกระจายของตัวเลขในชุดเริ่มต้น

person Davinc    schedule 17.08.2011