リストのすべての定義済み長さ順列を昇順で取得しようとしています。昇順リスト順列
For example, take the set: "ABCDE"
I'd like the returning result to be:
ABC, ABD, ABE, ACD, ACE, ADE, BCD, BCE, BDE, CDE
つまり、「B」は「A」(昇順)の前には表示されませんが、この要件内のすべてのバリエーションを希望します。
私はLINQを使用したくないので、これを実装する最も速い方法を見つけようとしています(速度はこのアプリケーションの要素です)。
は、これまでのところ私は、文字のリストのリストがあります:
List<List<char>> Combinations;
内側の「リスト」は「ABC」(文字である各文字)のような組み合わせになり、そして外側のリストは次のようになりますすべての組み合わせのリスト
各結果セットの長さ(上記の例では3)は動的である必要があるので、何らかの再帰が必要になると思っています...実装方法を理解できません。
ご協力いただければ幸いです!
EDIT
これまでのところ、ここで私は(私が近づいてるように感じる持っているものだ...私はちょうどそれが実際に最終的なリストを構築するために取得することはできません(労働組合が機能していません - 私が間違ってそれを使用しています):
private List<List<char>> AscendingPermute(List<char> InMovements, int Combinations)
{
List<List<char>> Ret = new List<List<char>>();
for(int i = 0; i <= InMovements.Count - Combinations; i++)
{
if(Combinations <= 1){
Ret.Add(new List<char>() {InMovements[i] });
return Ret;
}
else
{
Ret.Union(AscendingPermute(InMovements.GetRange(1, InMovements.Count - 1), Combinations - 1));
}
}
return Ret;
}
私は正しい軌道に乗って何が行方不明アム
おかげ
は、可能性の指数数( '2^N '正確には)ありますが、あなたはしませんあなたが本当にそれらのすべてを望むなら、あまりにも速くなります。 – amit
あなたはこれまで何を持っていますか? – 48klocs
私はnCkの可能性があると思う(nは最初のリストの長さ、kは結果の各リストの長さです)、それは2^nではありません。 – zmbq