プロジェクトのいくつかの部分を開発するために、データセットのような構造を実装する必要がありました。これにより、最小値と最大値のキー値に応じてサブセットを取得できるようになります。
ConstainedSet <- Set((key,value)*)
Subset <- ConstainedSet.Match(Constraint = "val1 <= key < val2")
次に、サブセットには、「val1 <= key < val2」制限に一致するConstainedSetの要素のみを含める必要があります。つまり、キーがval1以上でval2より小さい要素です。
たとえば、次のようなサブセットがあるとします。
ConstrainedSet <- {(1,hand),(2,eye),(3,nose)}
次に、次のような操作:
Subset <- ConstainedSet.Match(Constraint = "1 <= key < 3")
結果として、次のサブセットが生成されます。
Subset <- {(1,hand),(2,eye)}
各要素が次のようなトリプレットのベクトルに格納されるソリューションを開発しました
(minKey,maxKey+1,value)
このベクトルをminKeyとmaxKeyでソートし、 minKeyの順序をmaxKeyの順序よりも優先します。次に、"Match" を呼び出すたびに、このベクトルに対してバイナリ検索が実行されます。
私が間違っていなければ、最悪の場合の時間の複雑さは次のとおりです。
- 「Match」への呼び出しごとに O(N)。
- 挿入の場合は O(N)。
ここで、N はセット内の要素の数です。
より良い解決策はありますか?