0

1200x130 0-1 マトリックスがあり、一部の行は同一です (ある行から 4 つ、別の行から 8 つなど)。同じ ID を同一の行に割り当てる効率的な方法を見つけようとしています。

Excel で試したことは次のとおりです。行ごとに、k 番目の列のエントリに 2^k を掛け、すべての列を合計しました。理論的には、異なる行ごとに、これにより一意の ID が得られるはずですが、数値が非常に大きくなり、Excel がそれらの数値の比較を台無しにします。(3.234023490249 x 10^246 のように特定の桁まで格納し、残りの桁を無視するためだと思います。)

そこで、VBA を使用することにしましたが、考えられる唯一の方法は、すべての行と列を対で比較することです。これを処理するためのより効率的な方法があるはずだと思います。推奨事項はありますか?

(ExcelまたはVBA固有のソリューションを探しているわけではありません。推奨事項があれば役立ちます。)

前もって感謝します。

4

1 に答える 1

0

2 進数を 10 進数に変換しています。それは実に膨大な数です。プログラム言語のlong整数は 64 ビットの数値です。したがって、130ビットもオーバーフローします。

組み合わせた ID を使用して、それぞれを最大長整数値に制限することができます。130 ビットの場合、行ごとに少なくとも 3 つの倍長整数。

各行に 3 つの ID があります。たとえば、最初の ID は最初の 40 ビットを取ります。2 番目の ID は 41 から 80 までの数字です。3 番目の ID は 81 から 130 までの数字です。

Comparson は、ID を返すために 3 つの ID がすべて同一である必要がありequalます。


文字列も使用できます。

16 進数 (2 進数 4 桁ごとに 1 文字) を使用すると、130/4 = 33文字が表示されます。

たぶん、32 基数を試してみると、130/5 = 26文字が得られるでしょう。各 5 ビットは の文字に対応し0, 1, 2, ..., 8, 9, A, B, ..., U, Vます。

または、すべてのビットを含む単純な 130 文字の文字列です。

于 2013-05-05T18:32:32.193 に答える