Я бы хотел профилировать какое-то программное обеспечение VCS, и для этого я хочу создать набор случайных файлов в случайно расположенных каталогах. Я пишу сценарий на Python, но мой вопрос вкратце: как создать случайное дерево каталогов со средним числом подкаталогов на каталог и некоторым широким распределением файлов на каталог?
Разъяснение: Я не сравниваю различные форматы репозитория VCS (например, SVN против Git против Hg), но профилирую программное обеспечение, которое имеет дело с SVN (и в конечном итоге другими) рабочими копиями и репозиториями.
Я хотел бы указать ограничения на общее количество файлов (назовите его 'N', вероятно, ~ 10k-100k) и максимальную глубину структуры каталогов ('L', вероятно, 2-10). Мне все равно, сколько каталогов генерируется на каждом уровне, и я не хочу, чтобы в конечном итоге было 1 файл на каталог или 100 тыс. В одном каталоге.
В дистрибутиве я не уверен, так как я не знаю, будут ли VCS (в частности SVN) работать лучше или хуже с очень однородной структурой или очень искаженной структурой. Тем не менее, было бы неплохо, если бы я мог придумать алгоритм, который не «выравнивал» для больших чисел.
Моими первыми мыслями были: сгенерировать дерево каталогов, используя какой-либо метод, а затем равномерно заполнить дерево файлами (обрабатывая каждый каталог одинаково, без учета вложенности). Мои кальки с обратной стороны конверта говорят мне, что если есть уровни 'L', с подкаталогами 'D' на каталог, и около sqrt (N) файлов на каталог, то будет около D ^ L, так что N = ~ sqrt (N) * (D ^ L) => D = ~ N ^ (1 / 2L). Итак, теперь у меня есть приблизительное значение для «D», как я могу сгенерировать дерево? Как мне заполнить файлы?
Я был бы благодарен только за некоторые ссылки на хорошие ресурсы по алгоритмам, которые я мог бы использовать. Мой поиск нашел только красивые апплеты / flash.