有很多方法可以对此进行建模。正如您所描述的,一种方法是使用多维数组,其中每个索引是链中的下一个字符,最终结果是计数。
# Two character sample:
int counts[][] = new int[26][26]
# ... initialize all entries to zero
# 'a' => 0, 'b' => 1, ... 'z' => 25
# For example for the string 'apple'
# Note: I'm only writing this like this to show what the result is, it should be in a
# loop or function ...
counts['a'-'a']['p'-'a']++
counts['p'-'a']['p'-'a']++
counts['p'-'a']['l'-'a']++
counts['l'-'a']['l'-'e']++
然后,要随机生成名称,您将计算给定字符的总结果数(例如:在前面的示例中,'p' 的 2 个结果)并为其中一个可能的结果选择一个加权随机数。
对于较小的尺寸(最多 4 个字符)应该可以正常工作。对于任何更大的东西,您可能会开始遇到内存问题,因为(假设您使用的是 AZ)N 长度链的 26^N 个条目。
几年前我写过类似的东西。我想我使用来自维基百科的随机页面来获取种子数据来生成权重。