Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加权置换算法_C#_.net_Algorithm - Fatal编程技术网

C# 加权置换算法

C# 加权置换算法,c#,.net,algorithm,C#,.net,Algorithm,小组: 我正在构建一个能够感知上下文的业务规则引擎——但它是加权的——或者换句话说,每个业务规则都有一个由键的段定义的粒度级别。这些段不是组合的,因为它们不能按任何顺序加权,而是像组合锁一样可置换(有趣的是,命名不当,但被广泛接受) 但是,为了减少提供业务规则所需的代码量,我们只构建了排除文件,这意味着每个段可能最终都有一个特定的键值或全部键值 所以,既然我们有一个抽象的背景,让我们举一个具体的例子。定义的分段如下所示: 业务线(LOB) 公司 陈述 现在,让我们假设这个例子的LOB是ABC,C

小组:

我正在构建一个能够感知上下文的业务规则引擎——但它是加权的——或者换句话说,每个业务规则都有一个由键的段定义的粒度级别。这些段不是组合的,因为它们不能按任何顺序加权,而是像组合锁一样可置换(有趣的是,命名不当,但被广泛接受)

但是,为了减少提供业务规则所需的代码量,我们只构建了排除文件,这意味着每个段可能最终都有一个特定的键值或全部键值

所以,既然我们有一个抽象的背景,让我们举一个具体的例子。定义的分段如下所示:

  • 业务线(LOB)
  • 公司
  • 陈述
  • 现在,让我们假设这个例子的LOB是ABC,Company是G,State是WY。如果你将其分解,我将得到以下排列:

    • ABCúGúWY
    • 全部
    • ABC_ALL_WY
    • 全部
    • 好的
    • 全部
    • 全部
    • 全部
    然而,我需要一个算法来解决这个问题。段还必须按上述顺序返回,因为必须始终首先找到最有限的规则

    我期待您的回复,并提前感谢大家

    publicstaticvoidmain(字符串[]args)
    
    public static void Main(string[] args)
    {
        List<string> inputValues = new List<string>() { "ABC", "G", "WY" };
        List<string> results = new List<string>();
    
        int permutations = (int)Math.Pow(2.0, (double)inputValues.Count);
    
        for (int i = 0; i < permutations; i++)
        {
            int mask = 1;
            Stack<string> lineValues = new Stack<string>();
            for (int j = inputValues.Count-1; j >= 0; j--, mask <<= 1)
            {
                if ((i & mask) == 0)
                {
                    lineValues.Push(inputValues[j]);
                }
                else
                {
                    lineValues.Push("ALL");
                }
            }
            results.Add(string.Join("_", lineValues.ToArray())); //ToArray can go away in 4.0(?) I've been told.  I'm still on 3.5
        }
    
        foreach (string s in results)
        {
            Console.WriteLine(s);
        }
    
        Console.WriteLine("Press any key to exit...");
        Console.ReadKey(true);
    }
    
    { 列表输入值=新列表(){“ABC”、“G”、“WY”}; 列表结果=新列表(); int置换=(int)Math.Pow(2.0,(double)inputValues.Count); for(int i=0;i<置换;i++) { int-mask=1; Stack lineValues=新堆栈();
    对于(int j=inputValues.Count-1;j>=0;j-,mask如果我答对了问题,您应该:

    -Generate all binary strings of length N (there will be 2^N of them)
    -sort them by number of bits set
    -generate rules. Rule has 'ALL' in position i, if bit number i in the corresponding binary string is set
    

    只有三个部分吗?还有,你能发布到目前为止你有什么东西,让我们知道你被困在哪里吗?你不应该把你的团队领导的电子邮件直接复制到so中。如果他们也读了怎么办?@AntonTykhyy-我想我不明白你在说什么。这不是我的团队领导写的。@JasonWilliams-可能不止三个,只是在这个例子中只有三个。我想在这个答案上+1你,但我不能,因为我还没有足够的分数。我会尽快。