多くの整数範囲を管理する JavaScript プログラムがあります。このコンテキストでは、範囲は単に開始値と終了値 (または開始値と長さの値などの同等のもの) であり、別のオブジェクトへの参照があります。範囲はオーバーラップすることも、同一にすることもできます (ただし、参照されるオブジェクトは異なります)。
可能な開始値と終了値は 0 から 4294967295 (2 32 - 1 または0xFFFFFFFF
) の間ですが、ドメインには部分的にであっても範囲がカバーされない大きな「穴」がいくつかあります。ほとんどの範囲は、可能性の領域に比べて非常に小さくなります。圧倒的多数の範囲の長さは 2000 未満になると予想されます。
この構造体の最も重要な使用例は、特定の整数値を含むすべての範囲を検索することです。ほとんどの場合、ルックアップが失敗することが予想されます (指定された値を含む範囲はありません)。
それ以外の場合は、明らかに要素を追加する必要があり (頻繁に)、そこから要素を削除する必要があります (めったにありません)。また、ときどき、単一の値を含むすべての範囲ではなく、特定の範囲と重複するすべての範囲を検索する必要があります。
そのためにどのようなデータ構造を使用できますか? ほとんどの場合、検索は失敗するため、範囲のリストでの線形検索は実用的ではありません。非常に頻繁にルックアップを行う必要があります。