RMQ 문제 (구간 최 값 조회)
먼저 모든 조회 에 대해 동태 적 으로 최 치 를 구 할 수 없 을 것 이 라 고 확정 했다. 매번 계산 해 야 하기 때문에 비교적 많은 시간 을 소모 할 수 있 기 때문이다.
모든 결 과 를 먼저 얻 고 조회 할 때 결 과 를 직접 꺼 내 는 것 이 좋 은 해결책 이다.이렇게 하면 모든 조 회 를 덮어 쓰 고 빠 른 색인 을 할 수 있 는 데이터 구조 가 필요 하 다.
하나의 2 차원 배열 로 중간 결 과 를 저장 합 니 다. RMQ [n] [i]. 모든 요 소 는 i + 2 ^ n 개의 요소 간 의 최대 치 를 표시 합 니 다.이렇게 해서 우 리 는 알고리즘 을 두 부분 으로 나 누 었 습 니 다. 하 나 는 초기 화 이 고 하 나 는 조회 입 니 다. 알고리즘 은 다음 과 같 습 니 다.
void prepare(int n,int *data)
{
int i,j,k;
for (i = 0;i <= n;mylog[i ++ ] = k)
{
for(k = 0;(1 << (k + 1)) < i;++ k);
}
for (j = 0;(1 << j) < n;++ j)// n > 1 , n = 1 , table
{
for (i = 0;i + (1 << j) <= n;++ i)// , 1 << j 1, i n - 1,
{
if(0 == j)
{
table[0][i] = data[i];
}
else
{
table[j][i] = max(table[j - 1][i],table[j - 1][i + (1 << (j - 1))]);
}
}
}
}
int queryMax(int p,int q)
{
int k = mylog[q - p + 1];
return max(table[k][p],table[k][q - (1 << k)]);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.