【问题标题】:Random word generator with a equal probability of occurrence of letters [closed]字母出现概率相等的随机词生成器[关闭]
【发布时间】:2017-09-29 02:13:33
【问题描述】:

所以我用 c# 制作了一个非常简单的单词生成器程序,效果相对较好。我的问题是如何生成字母出现概率相等的单词,例如。 aaaa、aabb 或 abab

我的代码:

listView1.Items.Clear();

        int num_letters = 4;
        int num_words = 20;

      char[] letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();

       Random rand = new Random();

         for (int i = 1; i <= num_words; i++)
        {
           string word = "";
            for (int j = 1; j <= num_letters; j++)
            {
                int letter_num = rand.Next(0, letters.Length - 1);

               word += letters[letter_num];
            }

             listView1.Items.Add(word);

【问题讨论】:

  • 您似乎已经这样做了。我不明白你在问什么;你已经编写了代码来做你想做的事。
  • 另外,我注意到ToCharArray 是不必要的。没有它,您的程序也可以正常工作; letters 可以是 string
  • 在你的程序中他们会这样做!你已经得到了你想要的。单词中的每个字母都有 1/26 的机会成为字母表中的任何字母。
  • 你写的东西怎么让你相信它没有做你想做的事?
  • 当然可以。有 456976 个可能的单词,HJYY 就是其中之一,平均会在 456976 次尝试中生成一次。就像AAAA会在456976生成一次,OOPS会在456976生成一次,GOAT会在456976生成一次等等。

标签: c# random probability


【解决方案1】:

这个问题非常令人困惑。

如果您要问的是如何生成一个每个字母都不同的四字母单词,您可以这样做:

string letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string word = new string(letters.OrderBy(x=>random.NextDouble()).Take(4).ToArray());

这不是最有效的方法,但写起来又快又容易。

更新:我终于弄清楚了原始海报的要求。他们想要四个字符的字符串,这些字符串具有以下属性之一为真:

  • 四个字符相同
  • 两个不同的字符各出现两次
  • 四个字符都不一样

这很容易。两种可能的算法:

  • 从以下可能性中随机选择:“0000”、“0011”、“0101”、“0110”、“1001”、“1010”、“1100”、“0123”,无论您使用哪种分布觉得合适。然后根据我上面给出的算法选择四个随机的不同字母。然后搜索并替换模式字符串,以便用随机字符串中的第一个字符替换零,用第二个字符替换一个,依此类推。

  • 拒绝:


string word = null;
while(true) 
{
  word = GenerateRandomWord(); 
  if (AllFourAreDifferent(word)) return word;
  if (AllFourAreTheSame(word)) return word;
  if (TwoAndTwo(word)) return word;
}

现在您所要做的就是实现这四个辅助方法,每个方法都很简单。


使这个问题如此令人困惑的是,原始发帖人似乎不明白百分比和概率不是一回事。问题应该是“如何生成随机字符串,该字符串具有字符串的每个不同字符与字符串中的每个其他字符消耗相同部分的字符串的属性?”这与以相同概率出现的每个字符非常不同。

【讨论】:

  • 这在我的代码中应该是怎样的?
  • 这是否意味着x =&gt; random.NextDouble()的结果被缓存给orderby
  • @user5734658:这里有很多提示可以用来构建工作程序。
  • @MennovandenHeuvel:是的!
  • This is very different than every character occurring with the same probability. Imo,从语言上讲,它并没有你想象的那么不同。概率是对预期频率的描述。说你有 50% 的机会获得正面,实际上是在说 在大型数据集中,正面往往会出现大约一半的时间。但是,OP 没有看到 expected 频率(概率)和 resulting 频率(实际上是掷硬币并记下结果)之间存在差异
猜你喜欢
  • 2018-11-03
  • 1970-01-01
  • 2013-12-06
  • 2012-09-03
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
  • 2018-05-23
  • 2010-12-02
相关资源
最近更新 更多