У меня есть массив, который я хочу сортировать, основываясь на присвоении оценки каждому элементу массива.Сортировка/подсчет нелинейных сравнений
Предположим, что возможный диапазон баллов - 0-100. И чтобы получить этот балл, мы собираемся использовать 2 сравнительные точки данных: один с весом 75 и один с весом 25. Давайте назовем их valueA и valueB. И мы перенесем каждое значение в счет. Итак:
значение а (диапазон = 0-10,000)
VALUE млрд (диапазон = 0-70)
scoreA (диапазон = 0 - 75)
scoreB (диапазон = 0 - 25)
scoreTotal = scoreA + scoreB (0 - 100)
Теперь вопрос заключается в том, как переносить значение A на scoreA нелинейным способом с более тяжелым взвешиванием для того, чтобы быть близким к минимальному значению. Я имею в виду, что для valueA, 0 будет отличным счетом (75), но значение, скажем, 20, даст средний балл 37,5, а значение 100 будет давать очень низкий балл, например 5 , и тогда все большее будет иметь тенденцию к 0 (например, значение 5000 будет по существу 0). В идеале я мог бы настроить кривую с несколькими точками данных (например, 4 четверти точки), а затем алгоритм соответствовал бы этой кривой. Или, может быть, самое простое решение - создать кучу точек на кривой (скажем, 10) и сделать линейную транспозицию между каждым из этих 10 пунктов? Но я надеюсь, что есть намного более простой алгоритм для достижения этого, не вычисляя все точки на кривой, а затем, чтобы настроить 10 + переменных. Я бы предпочел 1 или 2 входа, чтобы определить, насколько крутая кривая. Возможное?
Мне не нужно что-то супер сложное или точное, просто простой алгоритм, поэтому есть больший вес для того, чтобы быть близким к минимуму диапазона, и менее утяжеленным для того, чтобы быть близким к максимальному диапазону. Надеюсь, это имеет смысл.
Моя статистика математика настолько ржавая Я даже не уверен, что это называется поиском решения. Все эти годы исчисления и статистики ничтожны.
Я реализую это в Objective C, но любой псевдокод c-ish/java-ish будет в порядке.
Отличное простое решение. Благодаря! – Joel
Есть ли способ сделать эту кривую более «S», в которой она сначала остается высокой, а затем падает и меняет форму в средней точке? Проблема с вышесказанным заключается в том, что всегда происходит быстрое первоначальное падение, что не является предполагаемым результатом. – Joel
@Joel Вы можете попробовать [логистическую функцию] (http://en.wikipedia.org/wiki/Logistic_function), см. [Здесь] (https://www.desmos.com/calculator/xzggc2jmhu) для примера; '(max * 2)/(1 + 2^[x/C])', где 'C' определяет скорость спуска; это сгладит спуск –