【发布时间】:2021-06-05 15:21:44
【问题描述】:
传递给生成器的参数是什么:
- x - 字数;
- N 是字母的大小;
- L 是输出字的长度。
需要实现一个非递归算法,根据传入的三个参数返回一个单词。
Alphabet - 按字母顺序排列的拉丁字母,大写。
对于N = 5, L = 3,我们构造了x与单词的对应关系:
- 0:ABC
- 1:ABD
- 2:安倍
- 3:ACB
- 4: ACD
- 5:王牌
- 6:亚行
- 7:ADC
- 8 ADE
- 9:自动包围曝光
- 10 AEC
- 11 迪拉姆
- 12 BAC
- ...
我的算法实现适用于 L = 1; 2. 但是 L = 3 出现错误。该算法基于访问字母表时的移位。 h 数组存储新字典中字母的索引(已输入单词的字符被排除在外)。数组A 将索引转换h 存储到原始字典中(为从字母表中删除的每个字符添加缩进到左侧)。因此,最后,数组A 存储了没有重复的排列。
private static String getS (int x, int N, int L) {
String s = "ABCDEFGHJKLMNOPQ";
String out = "";
int [] h = new int [N];
int [] A = new int [N];
for (int i = 0; i <L; i ++) {
h [i] = (x / (factory (N - 1 - i) / factory (N - L)))% (N-i);
int sum = h [i];
for (int j = 0; j <i; j ++)
sum + = ((h [i]> = h [j])? 1: 0);
A [i] = sum;
out + = s.charAt (A [i]);
}
return out;
}
【问题讨论】:
-
您的标题与您的描述不符。您需要一个随机单词,还是按字母顺序排列的第 x 个单词?
-
@Dave 可能是的。我的意思是 x 是随机的,但对于每个 x 有一个单词
标签: algorithm random generator permutation combinatorics