各アイテムにnとmの2つの整数属性があるリストがあります。これらの2つの整数属性を単一の新しい属性にマップして、リストが新しい属性でソートされるときに、最初にnでソートされ、次にmでタイが切断されるようにします。
私はn-1/mを思いついた。したがって、2つの整数は単一の実数にマップされます。これでうまくいくと思います。より良いアイデアはありますか?
各アイテムにnとmの2つの整数属性があるリストがあります。これらの2つの整数属性を単一の新しい属性にマップして、リストが新しい属性でソートされるときに、最初にnでソートされ、次にmでタイが切断されるようにします。
私はn-1/mを思いついた。したがって、2つの整数は単一の実数にマップされます。これでうまくいくと思います。より良いアイデアはありますか?
それは賢いので、私はあなたにそれを壊すことを嫌います、しかしそれはうまくいきません。n = 1,000,000,000、および999,999,990〜1,000,000,010のmの値を使用して(コンピューターで)試してください。n-1/m
これらすべてのケースで同じ値であることがわかります。
浮動小数点数の精度が無限である場合、またはintの2倍の精度である場合でも機能しますが(問題が発生する可能性があります)、そうではありません。倍精度浮動小数点数の精度は53ビットです。精度の。整数は(おそらく)32ビットであるため、そのうちの2つをエンコードするには少なくとも64ビットが必要です。ただし、その場合は、64ビット(long long)整数を使用して、ペアをとしてエンコードすることができますn*2^32 + m
。