2009-07-30 9 views
5

パーミュテーションと置換グループの操作を実装するC++テンプレートクラスはありますか? このクラスでは、積と逆数、乗算などを実装する必要があります。順列を持つ演算を実装するC++クラスはありますか?

+0

現代のC++では、このためにクラスを使用しません。おそらく、複数の関数テンプレートを使用します。サポートする操作ごとに1つの関数テンプレート。実際の入力範囲はテンプレート化されています。 – MSalters

+0

機能プログラミングはオプションではありません。オブジェクト指向プログラミングは良いです。私は本当にテンプレートクラスが必要です。 –

+2

@MSalters:2つの順列を取り、それらの順列の積を返す関数の "入力範囲"とは何ですか?あなたは、その順列自体が、不透明なオブジェクトではなくイテレータのペアとしてクライアントに最もよく表されることを示唆していますか?私はAlexeyがグループ理論の知識がもっとあるものの後ろにstd :: next_permutationよりも後ろにいると思います。 –

答えて

3

Thisは最高ですが、C言語のため、ラッパーを作成する必要があります。 CodeCogsもコンビナトリアルのライブラリを提供します。

-3

STLには、アルゴリズムhの置換のための関数が含まれています。ここにその例があります。

 
int main() { 
    int myints[] = {1,2,3}; 
    cout << "The 3! possible permutations with 3 elements:\n"; 
    sort (myints,myints+3); 
    do { 
    cout << myints[0] << " " << myints[1] <<" " << myints[2] << endl; 
    } while (next_permutation (myints,myints+3)); 
    return 0; 
} 
+2

"アルゴリズム"ではなく "アルゴリズム"です! – KTC

+1

例えば、逆パーミュテーションを見つけるのにはどうすればいいですか? –

+0

それはしません。この関数は単に置換グループのメンバーを列挙します。グループの構造については何も知らず、定義された順序を持つ入力配列の要素に依存しています。 –

0

私には分かりませんが、実装するのは簡単です。内部的には、順列をベクトルとして表すことができます。 (1 3 4 2 7 5 6)は、1-7、1-> 1,2-、3-> 4、4-> 2などを送信するパーマであるか、 (1)(2 3 4)(5 7 6)を実行し、これらの操作を実装します。おそらく、テンプレートの引数は置換グループのサイズになります。