Сортировать несвязанные значения по связанной шкале?

У меня есть набор несвязанных значений, хранящихся в массиве (это 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