有26個字符,長度最多爲n。所以串的總數爲:
Total Number of Strings = \sum_{i=1}^n 26^i
我們需要每一個這些以相等的概率是被選擇:
P(string s is chosen) = 1/TotalNumStrings
現在考慮你提出選擇一個隨機的長度,然後選擇的策略一個隨機的那個長度的字符串。因此,通過貝葉斯法則,我們有:
P(string s being chosen which has length i) =
P(string s being chosen | string has length i) *
P(we want a string of length i) = (1/26^i) * (1/n) = 1/(26^i * n)
這不等於1/TotalNumStrings。你已經知道這是行不通的,但是這激發了正確的選擇策略。
現在選擇的字符串如下:
P(string s being chosen which has length i) =
P(string s being chosen | string has length i) *
P(we want a string of length i) =
1/(26^i) * P(chosen string has length i) = 1/NumStrings.
因此,我們有P(選擇的字符串具有長度i)= 26^I/NumStrings!田田。
所以總結一下選擇策略如下。首先選擇長度爲i,概率爲26^i/NumStrings。然後在該類別中選擇一個任意字符串。
參見http://stackoverflow.com/questions/3066707/how-do-i-generate-a-random-string-of-up-to-a-certain-length – 2013-04-07 23:44:25
@DavidEisenstat PaxDiablo了那裏有一個很好的解 – 2013-04-08 01:04:26
@JimBalter PaxDiablo提供了兩種解決方案。第一個是靠近我的,但是對錯誤的分佈進行抽樣,第二個需要高頻。 – 2013-04-08 01:10:12