[回复]
[修改] [删除]
[返回版面]
|
1 |
作者: admin, 讨论版: 算法集锦, 发表时间: 2016-04-02 22:23:13 PST
标题: Crack a Keycode
关键字:
Crack a Keycode
Also see:
- Career cup discussion
- https://en.wikipedia.org/wiki/De_Bruijn_sequence
de Bruijn construction by Lyndon Words. See here
Java – De Bruijn
public static StringBuilder sequence;
public static int[] a;
public static int alphabet;
public static int subLength;
// De Bruijn Sequence for alphabet k
// and subsequence of length n
public String crackSequence(int k, int n) {
alphabet = k; subLength = n;
sequence = new StringBuilder();
a = new int[n + 1];
db(1, 1);
return sequence.toString();
}
// Lyndon Words
private void db(int t, int p) {
if (t > subLength) {
if (subLength % p == 0)
for (int i = 1; i < p + 1; ++i) sequence.append(a[i]);
} else {
a[t] = a[t - p];
db(t + 1, p);
for (int j = a[t - p] + 1; j < alphabet; ++j) {
a[t] = j;
db(t + 1, t);
}
}
}
--
※ 来源: homecox.com [来自: 72.]
|
|
|