2009-10-12 64 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