Young は主に組合せ論を目的とした Python 用の数学ライブラリです。
Young は次の URL からダウンロードできます。
[Young project page]
インストールするには大きく分けて2通りあります。
Windows 用のバイナリファイルの場合、ファイルをダブルクリックして 画面に従って操作すれば無事インストールは終了です。
現在はバイナリからのインストールは Windows からしか対応していません。
ソースからインストールするには、アーカイブをダウンロード後、コマンドラインから次のようにします。($VER は Young のバージョンです)
$ tar zxfv young-$VER.tar.gz $ cd young-$VER $ python setup.py install
Python のインタープリターから使う場合、まず young モジュールをインポートします。
>>> import young >>> from young import * # 手を抜く
上のスタイルでモジュールをインポートした場合、関数を呼び出すときに 毎回モジュールの名前を明示的に指定する必要があります。
>>> young.partition(10) >>> young.factorial(5)
Python のことはあまり知らず、young モジュールしか使わないなら下の方が楽でいいと思います。
まずは、基本的な計算から
>>> factorial(5) # 5 x 4 x 3 x 2 x 1 120 >>> factorial(5,3) # 5 x 4 x 3 60 >>> permutation(1,2,3) # (1,2,3) の順列 [[3, 1, 2], [2, 1, 3], [1, 3, 2], [2, 3, 1], [1, 2, 3], [3, 2, 1]] >>> permutation('xyz') # 'x', 'y', 'z' の順列 [['z', 'x', 'y'], ['y', 'x', 'z'], ['x', 'z', 'y'], ['y', 'z', 'x'], ['x', 'y', 'z'], ['z', 'y', 'x']] >>> combination(4, 2) 6 >>> combination('python', 2) # 文字列 "python" から2文字選ぶ [['p', 'y'], ['p', 't'], ['p', 'h'], ['p', 'o'], ['p', 'n'], ['y', 't'], ['y', ' h'], ['y', 'o'], ['y', 'n'], ['t', 'h'], ['t', 'o'], ['t', 'n'], ['h', 'o'], ['h ', 'n'], ['o', 'n']]
カタラン数を少し。
>>> catalan(20) 6564120420L >>> for i in range(1, 10): # 1 から 9 までのカタラン数を表示 ... print i, catalan(i) ... 1 1 2 2 3 5 4 14 5 42 6 132 7 429 8 1430 9 4862
次に自然数 N に対して分割を与えます。
>>> partition(5) (5) (4,1) (3,2) (3,1,1) (2,2,1) (2,1,1,1) (1,1,1,1,1) >>> p = partition(10) >>> p.size() # 10 の分割はどれだけあるのか 42 >>> p.take(5) # 10 の分割のうち、最初の 5 個を表示 (10) (9,1) (8,2) (8,1,1) (7,3) >>> p.drop(37) # 最後の 5 個を表示(42 - 37 = 5) (2,2,2,2,1,1) (2,2,2,1,1,1,1) (2,2,1,1,1,1,1,1) (2,1,1,1,1,1,1,1,1) (1,1,1,1,1,1,1,1,1,1) >>> p.last(5) # drop(37) と同じ (2,2,2,2,1,1) (2,2,2,1,1,1,1) (2,2,1,1,1,1,1,1) (2,1,1,1,1,1,1,1,1) (1,1,1,1,1,1,1,1,1,1)
次がメインのヤング図形です。
>>> y = young(4) >>> y (4) 1 2 3 4 (3,1) 1 2 3 4 1 2 4 3 1 3 4 2 (2,2) 1 2 3 4 1 3 2 4 (2,1,1) 1 2 3 4 1 3 2 4 1 4 2 3 (1,1,1,1) 1 2 3 4 >>> y.report() # 各分割に対して、どれだけ標準盤があるか partition number square ---------------------------------------- (4) 1 1 (3,1) 3 9 (2,2) 2 4 (2,1,1) 3 9 (1,1,1,1) 1 1 ---------------------------------------- total 10 24 >>> factorial(4) # チェック 24 >>> young(3,1,1) # 分割が (3,1,1) の標準盤 (3, 1, 1) 1 2 3 4 5 1 2 4 3 5 1 2 5 3 4 1 3 4 2 5 1 3 5 2 4 1 4 5 2 3 >>> y = young(6) >>> y.size() # 6 の分割を元にした標準盤がどれだけあるか 76 >>> y.take(4) # 6 を元にした標準盤から4個を表示 1 2 3 4 5 6 1 2 4 3 5 6 1 2 5 3 4 6 1 3 4 2 5 6
young の take/drop/last は partition の take/drop/last とは異なり、 表示順序がきれいにソートされていません。
サンプル
>>> y = young(4) >>> y.take(6) 1 2 3 4 1 2 3 4 1 2 4 3 1 3 4 2 1 2 3 4 1 2 3 4
ただし、これは将来的にはかわる可能性があります。
Young について書き残したことなど
しばらくは分割数の方をメインにライブラリを充実させていく予定です。
http://mathworld.wolfram.com/YoungTableau.html
mathworld ではヤング図形が上で示しているものとは上下逆に並んでいます。 堀田良之さんによると、大陸(フランス、ドイツなど)では mathworld のように 上向きに並べる習慣があるそうです。
Contact: | <etale @ users.sourceforge.jp> |
---|---|
Date: | $Date: 2003/07/19 12:46:40 $ |