나는 [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