Urutkan nilai yang tidak terikat ke dalam skala terikat?

Saya memiliki sekumpulan nilai tidak terikat yang disimpan dalam array (ini adalah NSArray, jika itu membantu). Nilainya dapat berkisar dari 0 hingga tak terhingga (pada kenyataannya nilai maksimalnya adalah sekitar 100.000.000).

Saya perlu mengurutkan nilai dalam array saya ke dalam skala 0 hingga 20.

Misalnya, jika saya mempunyai kumpulan 1000, 3123, 31, 31 akan menjadi 0, 1000 akan menjadi 10 dan < strong>3123 akan menjadi 20. Array bervariasi dalam jumlah anggota dan nilai maksimal, jadi saya tahu jika ada banyak nilai dengan rentang berbeda, banyak dari nilai tersebut akan menempati posisi yang sama pada skala. Seringkali, jumlah item akan melebihi 20 (rata-rata jumlah item adalah sekitar 100).

Jika jumlah item lebih dari 20, beberapa item harus memiliki peringkat yang sama.

Saya memerlukan ini untuk representasi visual dari populasi lagu per kueri penelusuran, yang nilai-nilai tersebut merupakan representasi global dari posisi lagu di tangga lagu global.

Apakah mungkin membuat algoritma seperti itu?


person Kristina Brooks    schedule 18.07.2011    source sumber
comment
Apakah rentang Anda 1–20 (seperti yang Anda klaim) atau 0–20 (seperti yang disarankan dalam contoh Anda)?   -  person Gareth Rees    schedule 19.07.2011
comment
Saya akan menggunakan skala logaritmik tetap dalam kasus seperti itu.   -  person starblue    schedule 19.07.2011


Jawaban (3)


Jika saya memahami Anda benar, Anda hanya ingin mengurutkan nilai Anda secara menaik dan memetakannya ke kisaran 0 hingga 20? Jadi, Anda cukup menghitung berapa banyak nilai yang Anda miliki (misalnya 11), bagi rentang Anda dengan angka ini - 1 (misalnya 20/(11 - 1) = 2) dan tetapkan setiap nilai dengan angka yang sesuai (misalnya 0, 2, 4, 6, 8...)

person Daniel    schedule 18.07.2011
comment
Maka Anda akan mendapatkan selisih di bawah 1 (tetapi selalu di atas 0) seperti 0, 0,3, 0,6, 0,9, 1,2... - person Daniel; 19.07.2011

Urutkan susunannya. Sekarang kalikan indeks setiap item dengan (20 / ([myArray count] - 1)); Perhatikan bahwa hitungan HARUS> 1. Saya kira Anda tidak akan memiliki lebih dari 20 item?

person Rudy Velthuis    schedule 18.07.2011

Apakah perhitungan persentase suka membantu Anda? yaitu menggunakan nilai maksimal sebagai 100% (yaitu 20) dan sisanya dipetakan sebagai persentase dari nilai maksimal. Untuk mantanmu:

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

Dengan cara ini nilai akhir (pada skala 0-20) masih memiliki distribusi angka pada set awal.

person Davinc    schedule 17.08.2011