私は[min, max]
ペアで記述された間隔のセットを考えてみましょう。私は与えられた値を含む間隔のすべてのセットを探したい。それは私がすべての可能なセットだけでなく、ものを見つけ、非常に重要だ間隔の集合で値のC++効率的な検索
#include <iostream>
#include <vector>
using namespace std;
struct data
{
int minValue;
int maxValue;
};
void searchValue(const vector<data> &v, int target)
{
for(size_t i = 0; i < v.size(); i++)
{
if(target >= v[i].minValue && target <= v[i].maxValue)
cout << "Found target at set " << i << " (" << v[i].minValue << "," << v[i].maxValue << ")" << endl;
}
}
int main()
{
data d1 = {-1, 0};
data d2 = {0, 3};
data d3 = {-1, 5};
data d4 = {10, 11};
data d5 = {9, 12};
// Vector to hold the interval sets
vector<data> v{d1, d2, d3, d4, d5};
// Search for the interval sets which contain the number 2
searchValue(v, 2);
return 0;
}
:
は、私はO(n)の時間で動作した後、私は何の一例として、このソリューションを作りました。私は現在、より計算効率の高い、対数的な時間の可能性のあるソリューションを探しています。 multiset/multimap、lower_bound/upper_boundなどのソリューションがあると思いますが、これまでのところ成功していません。
これは区間ツリーを使用して達成できますが、私はSTLだけを使った解決策があると信じています。
ログ時間 – UmNyobe
を達成するためにいくつかのためにあるように間隔を必要とするが見えますあなたがO(n)より良くすることができるかどうかについての挿入や参照。 – xaxxon
@xaxxon私は検索についてのみ心配しています、データは不変ですrが獲得される。 – user344499