Допустим, у меня есть коллекция n объектов, и что каждый объект имеет ранжирование, связанное с ним, и эти ранжирования соответствуют целочисленным значениям от 1 до n .
Теперь предположим, что я хочу произвольно выбрать объект из коллекции. Но я не хочу просто выбирать число от 1 до n в случайном порядке; вместо этого я хочу сделать так, чтобы я с большей вероятностью выбрал число выше в списке (с рейтингом ближе к 1).
Предлагаемое решение: Вместо выбора от 1 до n , выберите от 1 до m , где m - некоторое число, значительно больше чем n ; затем используйте некоторую функцию отображения f : [1, m ] → [1, n ], которая отображает больше чисел в более высокие ранги, чем в более низкие ранги. Например, f (1), f (2), f (3) могут все вернуть 1, тогда как f (м ) является единственным, который сопоставляется с n , поэтому вероятность получить 1 в три раза выше, чем n . Надеюсь, это имеет смысл.
Итак, мой вопрос: если это кажется разумным алгоритмом, что такое разумная функция f , которая выполняет это, и какое отношение m / n будет достаточно большим для округления не мешает никому не выбирать номера?
[В моем конкретном сценарии n может быть довольно большим (в тысячах), поэтому решения, подобные представленному здесь , не очень практичны для этой ситуации. Также выбор есть «с заменой»; т.е. я выбираю объект один раз, а затем возвращаюсь; Мне все равно, если я выберу его снова сразу в следующий раз.]