【发布时间】:2011-01-10 03:09:29
【问题描述】:
如何根据常用语音中的使用频率随机生成字母?
任何伪代码都值得赞赏,但 Java 中的实现会很棒。否则,只需朝正确的方向戳一下就会有帮助。
注意:我不需要生成使用频率 - 我确信我可以轻松查找。
【问题讨论】:
-
欺骗stackoverflow.com/questions/2073235/random-weighted-choice 和许多其他人(搜索“加权随机生成”)
-
@Eli:抱歉 - 没有意识到它的名字。
-
fEnglish = new[] {8.167f,1.492f,2.782f,4.253f,12.702f,2.228f,2.015f,6.094f, 6.966f,0.153f,0.772f,4.025f,2.406f,6.749f,7.507f,1.929f,0.095f,5.987f, 6.327f,9.056f,2.758f,0.978f,2.361f,0.150f,1.974f,0.074f};然后... -
public static int RandomFromFrequencyArray(this float[] f) { float sum = 0f; foreach (float ff in f) sum += ff; int kF = f.Length; int result = 0; float sumSoFar = f[0]; float percentageResult = Random.Range(0f, sum ); while (sumSoFar < percentageResult) { ++result; sumSoFar += f[result]; if ( result >= kF ) {Debug.Log("woe..."); return (kF-1);} } return result; } -
频率数组不必加到 100。所以,这样做完全没问题:'(new[] {15f,5f,5f,1f}).RandomFromFrequencyArray();` For例如英语中的元音...只需从整个字母频率中取频率(因为它不必加到 100)...'int trueRandomVowel = (new[] {8.167f,12.702f,6.966f,7.507 f,2.758f}).RandomFromFrequencyArray(); return ("aeiou".ToCharArray())[v].ToString();'
标签: java algorithm random pseudocode