2009-10-12 42 views
2

我想简要介绍一下,VCS软件,并且这样做我想要生成一组随机文件,在随机排列的目录的数量随机目录/文件。我正在用Python编写脚本,但我的问题是简要的:如何生成一个随机目录树,每个目录的平均子目录数量和每个目录的文件的广泛分布?生成指定的文件和深度

澄清:我不是在比较不同的VCS回购格式(例如SVN VS混帐VS汞柱),但配置软件与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'的近似值,我如何生成树?我如何填充文件?

我会很感激只是一些指针,以良好的资源上的算法,我可以使用。我的搜索只发现漂亮的小程序/闪光灯。

回答

4

为什么不下载一些真正的开源代码库并使用它们?

你有没有想过进入文件?那是随机数据呢?

+2

我喜欢这个。例如,Keith Packard使用Mozilla的源代码来测试Subversion和Git:http://keithp.com/blogs/Repository_Formats_Matter/他并不只是采用当前的结账方式,他使用进口商来获取整个历史。结论:“Mozilla CVS存储库为2.7GB,导入Subversion后增长到8.2GB,在Git下缩小到450MB,由于Mozilla的结账大约为350MB,所以整个项目的历史相当不错(从1998年开始)只有更多的空间。“ – steveha 2009-10-12 07:46:20

+0

文件将包含标题信息和随机数据(将“搅动”)。 两个原因产生它(我坦率地承认这是没有铁包参数): 1.实事求是地讲,我无法下载超过有关数据的MB的100秒以上。除非我在ISP的“免费下载”范围内(可能,但不太可能)找到某些东西,否则我会很快达到2GB的数据限制。特别是如果我想测试10k-100k以上的文件。 2.最终,我会想跨越VCS方法具有相同的数据(我的猜测也有可能与真实的回购...) 不过,当然值得考虑的比较性能。 – detly 2009-10-12 08:09:54

+0

找到本地的一个源代码副本?我确定你所在地区有人在大型项目上开发......对假数据进行测试不会给你真正的结果......你会发现只有在使用真实数据时才会出现异常。 – 2009-10-12 08:26:00

0

你的问题是相当费时耗力,但我认为它归结为要求具有一定的统计特性的随机数发生器。

如果你不喜欢python的随机数生成器,你可以看一下pypi上的一些其他统计软件包,或者如果你想要一些更重的任务,可能是GNU科学图书馆的python绑定。

http://sourceforge.net/projects/pygsl/

http://www.gnu.org/software/gsl/

+0

这是更多的随机数。也许得到一个随机数,例如指数分布,平均数D.创建这么多的目录。对于每个目录,下降到它,重复,直到我达到L级。然后填充文件。 – detly 2009-10-12 08:52:15