从单个集合生成特定大小的所有组合的算法

本文关键字:算法 组合 集合 单个 | 更新日期: 2023-09-27 18:08:01

我正在寻找c#中的解决方案,以在给定的字符或单词列表上生成组合,以对zip文件执行字典攻击。因为我们丢失了密码文件。优点是我们知道上面可能出现的单词。字典应该包含我选择的所有单词的组合。所有字符/单词均为小写。

示例:假设我们有一组字符:

Set A = {A,B,C}
A,B,C   =3
AA,AB,AC
BA,BB,BC
CA,CB,CC    =9

AAA,AAB,AAC,ABA,ABB,ABC,ACA,ACB,ACC
BAA,BAB,BAC,BBA,BBB,BBC,BCA,BCB,BCC
CAA,CAB,CAC,CBA,CBB,CBC,CCA,CCB,CCA    = 27

TOTAL POSIBLE COMBINATION 39

在单词列表中,单个单词/字符最多只能重复4次。如果有这样的算法/逻辑,请建议。

从单个集合生成特定大小的所有组合的算法

下面是使用递归的c#实现:

static char[] A={'a','b','c'};
static int N = 3;
static void foo(string s)
{
    if (s.Length == N)
    {
        Console.WriteLine(s);
        return;
    }
    for (int i = 0; i < A.Length; i++)
    {
        string t = s;
        t += A[i];
        foo(t);
    }
}

演示

如果您希望稍后检索值,请在从函数foo()返回之前将字符串存储在全局数组中。