RMQアルゴリズムレビュー

RMQアルゴリズム、アルゴリズムは、最も前処理時間複雑度はO(n *ログ(N))間隔要求値オフ速く、クエリO(1)は、当然の非常に高速なアルゴリズム、セグメントツリーと同じ問題ですそれを解決することができます。

速い所定のN個のデータでは、前処理によって。迅速に最大の価値を見つけます。

主にDP +ビットコンピューティング。
ここに画像を挿入説明

事前計算:

void rmq_isit(){
	for(int i=1;i<=m;i++) {
		dp[i][0]=a[i];
	}
	for(int i=1;(1<<i)<=m;i++){
		for(int j=1;j+(1<<i)-1<=m;j++){
			dp[j][i]=min(dp[j][i-1],dp[j+(1<<(i-1))][i-1]);
		}
	}
}

1 << xが2のx乗に等しいです。

各コアを転送します。

dp [ i ] [ j ] = max ( dp [ i ] [ j - 1 ] , dp [ i + ( 1 << ( j - 1 ) ) ] [ j - 1 ] );
dp [ i ] [ j ] = min ( dp [ i ] [ j - 1 ] , dp [ i + ( 1 << ( j - 1 ) ) ] [ j - 1 ] );

コアをチェックアウト:

**int rmq_1 ( int l , int r){
	int k = 0;
	while( ( 1 << ( k ) ) <= ( r - l + 1 ) )  k++;
		k --;
	int ans1 = min ( dp [ l ] [ k ] , dp [ r - ( 1 << k ) + 1 ] [ k ] ) ;
	return ans1;
}**

十分な理解の写真と。

公開された34元の記事 ウォンの賞賛6 ビュー1330

おすすめ

転載: blog.csdn.net/qq_44669377/article/details/104484053