レーマー符号

提供: testwiki
ナビゲーションに移動 検索に移動

数学とくに組合せ数学において、レーマー符号(レーマーふごう、テンプレート:Lang-en-short)は、n 個の数のすべての置換を符号化する方法の一つである。レーマー符号という名前はテンプレート:仮リンクに由来するが、この符号は少なくとも1888年には知られていた[1][2]

符号

レーマー符号は、n 個の数の置換が

n!=n×(n1)××2×1

個存在するという事実を利用している。置換 σ は 1, …, n の像の列 (σ1, …, σn) によって表すなら、n 個の数の並びによって符号化されることになる。しかし、こうした並びには置換を表さないもの(同じ数を二度使ったもの)も含まれている。ここで考察する符号は、先頭の数を n 個の数から選び、次の数は テンプレート:Math 個の数から選び、そうしていって、最後の数はたった1個の数から選んでできるものである。

レーマー符号は、次の列である。

L(σ)=(L(σ)1,,L(σ)n)whereL(σ)i=#{j>i:σj<σi}

記号 L(σ)i は、σi+1, …, σn のうち σi より小さいものの個数である。

テンプレート:Math かつ テンプレート:Math である添字の組 テンプレート:Mathσ逆転と呼び、L(σ)iは、逆転(i,j)がいくつあるかを表す(iは固定しiを変化させる)。このことからテンプレート:Mathσ に逆転がいくつ現れるかを表していることが分かる。これは、恒等順列に変換するために必要な隣接互換の数と等しい。位置 iの値が0であればそこから右での最小であり(すなわちテンプレート:Mathはその右にあるどのテンプレート:Mathよりも小さい)、位置 iでの値テンプレート:Mathはそこから右での最大である。

符号化と復号

符号化はそれぞれの位置ごとに逆転を数えることで行える。

また、次のような方法でインプレースに行うこともできる(ただし、現実的には単純に数える以上に効率的であるわけではない)。

この方法では、まず各要素を昇順にソートしたときのテンプレート:Mathから始まるインデックスへと置き換える。そして左から右へ順に、各エントリテンプレート:Mathについて、それより右でかつテンプレート:Mathより大きいエントリからテンプレート:Mathを引くことを繰り返す。 たとえば、B, F, A, G, D, E, Cは1, 5, 0, 6, 3, 4, 2という数列に置き換えられ、次のように処理される。

𝟏5063421𝟒0523114𝟎4231140𝟑1201403𝟏2014031𝟏0140311𝟎

こうして、全エントリを処理し終わって得られた最後の行がレーマー符号である。 デコードはこの逆を行えばよい。右から左へ各エントリテンプレート:Mathについて、それより右にあるテンプレート:Math以上のエントリにテンプレート:Mathを足すことを繰り返す。


関連項目

出典

テンプレート:Reflist

関連文献

テンプレート:Math-stub

  1. 引用エラー: 無効な <ref> タグです。「lehmer」という名前の注釈に対するテキストが指定されていません
  2. 引用エラー: 無効な <ref> タグです。「laisant」という名前の注釈に対するテキストが指定されていません