Основа установки Java JRE?

Это мой предпочтительный метод перетасовки, когда желательно не изменять оригинал. Это вариант алгоритма Fisher-Yates «наизнанку» , который работает над любой перечислимой последовательностью (длина source не обязательно должна быть известна с начала).

public static IList NextList(this Random r, IEnumerable source)
{
  var list = new List();
  foreach (var item in source)
  {
    var i = r.Next(list.Count + 1);
    if (i == list.Count)
    {
      list.Add(item);
    }
    else
    {
      var temp = list[i];
      list[i] = item;
      list.Add(temp);
    }
  }
  return list;
}

Этот алгоритм также может быть реализован путем выделения диапазона от 0 до length - 1 и случайного исчерпания индексов путем замены случайно выбранного индекса последним индексом до тех пор, пока все индексы не будут выбраны ровно один раз. Этот выше код выполняет то же самое, но без дополнительного распределения. Это довольно опрятно.

Что касается класса Random, это генератор чисел общего назначения (и если бы я запускал лотерею, я бы подумал об использовании чего-то другого). По умолчанию он также полагается на начальное значение по времени. Небольшое облегчение проблемы состоит в том, чтобы засеять класс Random с помощью RNGCryptoServiceProvider, или вы можете использовать RNGCryptoServiceProvider в методе, подобном этому (см. Ниже), чтобы генерировать равномерно выбранные случайные значения двойной с плавающей запятой, но запускать лотерею в значительной степени требует понимания случайности и характера источника случайности.

var bytes = new byte[8];
_secureRng.GetBytes(bytes);
var v = BitConverter.ToUInt64(bytes, 0);
return (double)v / ((double)ulong.MaxValue + 1);

Точка генерации случайного двойника (между 0 и 1 исключительно) заключается в использовании масштабирования для целочисленного решения. Если вам нужно выбрать что-то из списка на основе случайного двойного x, который всегда будет 0 <= x && x < 1, это прямо.

return list[(int)(x * list.Count)];

Наслаждайтесь!

9
задан Hack-R 27 November 2016 в 17:59
поделиться

2 ответа

Я не знаю ни о ком, кто отслеживает это публично регулярно (в отличие от Adobe, который продвигает его все шансы, которые они получают). Самой близкой, что я мог приехать, была эта статья с прошлого ноября. Основанный на его сайте, эти данные могли быть скошены немного, но я думаю мы довольно подобные числа также.

1
ответ дан 3 November 2019 в 08:57
поделиться

Существует очень грубый процент браузеров с некоторыми JRE доступен в Счетчике, хотя я не доверял бы ему. Sun имеет несколько полезной статистики с 2007, но их статистика с 2008 намного менее подробна. Они предполагают, что в 2007 "92%... установок JRE... является теперь Java SE 6", но кто знает, какой очень технический сайт они рассмотрели для получения того числа.

1
ответ дан 3 November 2019 в 08:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: