2016-04-11 10 views
7

連続した行と列の間の変更回数を最小限に抑えるために、バイナリデータを含む行列の行と列を並べ替える方法について説明したa spreadsheetになりました。例えば類似度で行と列をソートするアルゴリズム

が始まる:

spreadsheedのタブで説明15の手動手順は、次の表が得られた後initial table

final result

私がしたいです知っている:

  1. このアルゴリズムまたはメソッドの共通名は何ですか?
  2. 大きなテーブルに適用する方法(2^nがオーバーフローする...)
  3. Levenshtein distanceなどの非バイナリデータに一般化するにはどうすればよいですか?
  4. コードへのリンク(エクセルVBA、Pythonの、...)すでにこれを実装する(そうでない場合、私はそれを書くよ...)

感謝がある場合は!

+1

{0,1}^nのユークリッドハミルトニアン経路です。 hampathはTSPと密接に関係しているので(hampathとTSPは一般的なグラフではnp-hardです)、私たちはTSPの近似アルゴリズムを持っていますが、最適解を期待していないので、定数因子近似アルゴリズムがあると思います私は、この特定の空間に対する硬さの証明が存在することを完全には確信していません。これがPであれば驚くでしょう。私はVBAが何をすることができないのか分からないので、近似を実装できるかどうかはわかりませんそこにアルゴリズム。 –

+2

第2の見方をすると、距離は実際にはユークリッドではなく、ハミング距離です。私は硬さの証明や近似アルゴリズムは知らないが、おそらく存在するだろう。 –

+1

関連:[グレーコード](https://en.wikipedia.org/wiki/Gray_code)、またn-aryの亜種として利用できます。 – Norman

答えて

2

あなたはベクトルL = [1, 1, 0, ... 1]により各行を表し、そして次いでL0L1間で異なる対応する位置における要素の数で二行d(L0, L1)間の距離を定義することができます。これはバイナリHamming distanceとして知られています。非バイナリデータがある場合は、距離の定義を拡張するだけで、はい、Levenshtein距離がオプションになります。

距離が明確に定義されていれば、残りの問題は連続する行の間隔を最小限に抑えることです。これはちょうどNP-hard(http://www.diku.dk/hjemmesider/ansatte/jyrki/Paper/EKP85.pdf)であることが知られているTraveling salesman problemです。

直接解答(すべての順列を参照)はO(n!)ですが、たとえばHeld–Karp_algorithmのような動的プログラミングを使うと簡単に行うことができます。 Nearest_neighbour_algorithmのような近似アルゴリズムもあり、最適ではない解を迅速に計算します。

最後に、実装のために、 "travel salesman excel/python"を簡単にgoogleして、多くのチュートリアルと例を見つけることができます。

関連する問題