Псевдослучайное поколение дерева каталогов?

Обновлен плагин Fabric gradle до 1.28.0

dependencies {
   classpath 'io.fabric.tools:gradle:1.28.0'
}
6
задан unwind 24 March 2009 в 12:21
поделиться

3 ответа

Как Вы упоминаете в своем втором редактировании, я, вероятно, реализовал бы все это как обход дерева файла с PRNG, решающим "изменение в каталоге", "создают каталог", "перемещают один уровень вверх", "создают файл", "удаляют файл" и имеют другое значение для определения что файл удалить, что каталог измениться на и генерировать названия файлов и каталогов.

Я использовал похожий метод для стресс-теста сервер рабочего процесса, который я записал (хотя я не должен был отслеживать то, где объекты работы были, просто должен был случайным образом выбрать для работы на).

1
ответ дан 17 December 2019 в 07:09
поделиться

Если это только для тестирования, что не так с некоторым простым, наивным алгоритмом поколения? Как, генерируйте случайное количество (1-10) подкаталогов, генерируйте имена их, затем каждого каталога рекурсивно генерируют подкаталоги и некоторую сумму файлов.

Это легко настраиваемо, и можно управлять семенем для rand. Для более броских потребностей распределение сумм файлов/каталогов может быть нелинейным, но что-то, что удовлетворяет Вашим потребностям больше.

Звуки что-то, что может быть сделано на скорую руку в полчаса и добраться, покончило. Мне не удается видеть потребность в чем-то mathemathical или комплекс. Если это не только для забавы, конечно :-)

2
ответ дан 17 December 2019 в 07:09
поделиться

Это - ряд различных проблем, который делает его забавной загадкой.

Сначала у нас есть генератор псевдослучайного числа. Существует много доступного материала. Я только ожидаю функцию, которая создает число в диапазоне 0.. n-1.

Затем у нас есть алгоритм для определения количества подузлов на единственном узле. Заманчиво использовать линейную функцию, но это не справедливое представление действительности. Таким образом, можно создать следующую функцию:

randomsize() {
  int n = Random(0,10);
  if (n<10) return n;

  return Random(0,9) + 10 * random;
}

Эта функция производит небольшие числа. Большинство будет в диапазоне 0.. 9, но вершина фактически бесконечно. Если Вы хотите иметь большие числа, Вы могли бы также использовать больший порог

randomsize() {
  int n = Random(0,100);
  if (n<10) return n;

  return Random(0,9) + 10 * random;
}

Последняя проблема состоит в том, как создать дерево. Это довольно просто. Но необходимо иметь в виду, что algorith должен закончиться. Таким образом, необходимо выполнить одно из следующих действий:

  • используйте макс. глубину
  • постепенно уменьшите сгенерированное число на основе уровня вложенности
  • определите количество листов как процент общих подузлов. Этот процент должен увеличить в более высоких уровнях (10-50 на первом уровне, 20-60 во втором.. 50-100 в пятом, 60-100 в шестом, до 90-100 в nineth и выше.

Конечно, можно настроить параметры для создания необходимого дерева.

1
ответ дан 17 December 2019 в 07:09
поделиться
Другие вопросы по тегам:

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