2012-02-07 13 views
0

チーム:加重順列アルゴリズム

私は文脈認識しているビジネス・ルール・エンジンを構築しています - しかし、それは加重だ - 言い換えれば、各ビジネスルールは、キーのセグメントによって定義された粒度のレベルを持っています。セグメントは、どの順序でも重み付けすることはできないが、コンビネーションロックのようにコンパルトリアルではありません(興味深いことに、不適切な名前が付けられていますが広く受け入れられています)。

しかし、ビジネスルールを提供するために必要なコードの量を減らすため、各セグメントが特定のキー値またはALLで終わる可能性があることを意味する除外ファイルを作成しています。

私たちは抽象的な背景を持つので、具体的な例を考えてみましょう。定義されたセグメント以下のとおりである。

  1. ビジネスのライン(LOB)
  2. 会社

それでは、LOBがABCであることをこの例では想定してみましょう、当社はGで、州はワイオミング州です。あなたはそれを打破した場合、私は、次の順列を取得する必要があります。

  • ABC_G_WY
  • ABC_G_ALL
  • ABC_ALL_WY
  • ABC_ALL_ALL
  • ALL_G_WY
  • ALL_G_ALL
  • ALL_ALL_WY
  • ALL_ALL_ALL

しかし、私はその問題を解決するアルゴリズムが必要です。 は、常に最も有限のルールを最初に見つけなければならないので、セグメントは上記の順序で返されなければなりません

ご返信いただきありがとうございます。

+0

は今まで3つのセグメントはありますか?また、あなたが持っている物を何でも投稿できますか?あなたはどこにいるのですか? –

+1

チームリーダーのメールをそのままSOにコピーしないでください。読んだらどうしますか? –

+0

@AntonTykhyy - 私はあなたが言っていることを理解していないと思います。これは私のチームリーダーからのものではありません。 –

答えて

1
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); 
} 
+0

注文を修正しました – Servy

+0

私はこの回答であなたを+1しますが、まだ十分なポイントがないのでできません。できるだけ早く私はします。 –

0

私は右の質問を取得する場合、あなたは必要があります。

-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 
関連する問題