差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
次のリビジョン両方とも次のリビジョン
programming_algorithm:data_structure:sparse_table [2019/12/05] – [±1-RmQ] ikatakosprogramming_algorithm:data_structure:sparse_table [2019/12/05] – [±1-RmQ] ikatakos
行 124: 行 124:
 ブロック内の変化は、今回1ブロック3要素なので、%%「++」「+-」「-+」「--」%%の4通りしかない。 ブロック内の変化は、今回1ブロック3要素なので、%%「++」「+-」「-+」「--」%%の4通りしかない。
  
-ブロック内パターン区間 [l,r] の最小値配列は、事前計算で作っておいても間に合う容量であるブロックサイズを s とすると s22s1+なので、全変化パターン・全区間 [l,r] の最小値配列事前計算で作っても、現実的な容量で間に合う。 
 +ブロックサイズを s とすると s22s1 の計算量とメモリがかかる。 
 + 
 +先頭要素が0だったとして、最小値を計算しておく。
  
   [++]           [+-]           [-+]           [--]   [++]           [+-]           [-+]           [--]
行 144: 行 147:
 log2N2 が良いとされている。端数はどちらでもよいが、とりあえず切り上げとする。 log2N2 が良いとされている。端数はどちらでもよいが、とりあえず切り上げとする。
  
-というのも、こうするとブロックの個数は 2Nlog2N となる。+こうするとSparseTable, 個別計算のいずれも事前計算とメモリが O(N) に収まる。 
 + 
 +SparseTableの方は、ブロックの個数が 2Nlog2N となる。
 この要素数でSparseTableを構築すると、2NlogNlog2NlogN=O(N) となる。 この要素数でSparseTableを構築すると、2NlogNlog2NlogN=O(N) となる。
  
行 150: 行 155:
  
 また、個別計算の方も、logN222logN21=O(log2NN) となり、O(N) より小さくなる。 また、個別計算の方も、logN222logN21=O(log2NN) となり、O(N) より小さくなる。
- 
  
  
programming_algorithm/data_structure/sparse_table.txt · 最終更新: by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0