2017-02-11 141 views
0

Path.GetRandomFileName返回一個由11個隨機字符組成的密碼強的字符串。它由8個字符+點+3個字符構成,如:「b253i5vu.psf」。 char可以是小寫字母或0到5之間的數字。所以可能的字符串數是32^11。使用Path.GetRandomFileName時發生衝突的機率

我的問題已經被問herehere,但答案都是錯誤的,因爲:

  1. 他們說,對於碰撞的機率是一些X值,而實際上這取決於如何目錄中已有許多文件。因此,例如,如果您有一個帶有Path.GetRandomFileName生成的100,000個文件的目錄,碰撞的可能性要高於對1000個文件的目錄。

  2. 他們沒有考慮到Birthday Problem

如果可能的話,我很感激,如果你能在某種程度上這是很容易使用誰沒有大學水平的數學知識,或者你可以給如何計算它說明人們目前的公式爲特定的值(例如,如果目錄有1000個文件)。

+0

[已有文件System.IO.Path.GetRandomFileName()的可能性重複](http://stackoverflow.com/questions/27945559/probability-of-already-existing-file-system-io-path -getrandomfilename) –

+0

「機會」是「概率」的同義詞,「碰撞」的含義與「已存在」完全相同,所以這個問題是http://stackoverflow.com/questions/27945559的確切副本/ probability-of-already-existing-file-system-io-path-getrandomfilename –

+0

目錄中現有文件的問題是不相關的。當您有1000個現有文件時發生衝突的概率與碰撞概率完全相同,如果您從空目錄開始並調用1000次函數來創建1000個文件。 –

回答

0

在數學stackexchange回答我的問題,幫助後,從一個人:

要計算概率的碰撞,用生日問題forumula,但與32^11,而不是365的概率爲:

1 - EXP((-n^2)/(2 * 32^11))

其中ñ是分別爲ALR的文件數用Path.GetRandomFilename生成了eady。

您可以使用類似WolframAlpha這樣的網站輕鬆計算概率。 。

對於離,如果n=1000,以下文本粘貼到WolframAlpha的搜索框:

1-exp((-1000^2)/(2*32^11)) 

,這將給你約1.38 * 10 ^( - 11)。

相關問題