差分

このページの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$ とすると $s^22^{s-1}$+なので、全変化パターン・全区間 $[l, r]$ の最小値配列事前計算で作っても、現実的な容量で間に合う。 
 +ブロックサイズを $s$ とすると $s^22^{s-1}$ の計算量とメモリがかかる。 
 + 
 +先頭要素が0だったとして、最小値を計算しておく。
  
   [++]           [+-]           [-+]           [--]   [++]           [+-]           [-+]           [--]
行 144: 行 147:
 $\displaystyle \frac{\log_2{N}}{2}$ が良いとされている。端数はどちらでもよいが、とりあえず切り上げとする。 $\displaystyle \frac{\log_2{N}}{2}$ が良いとされている。端数はどちらでもよいが、とりあえず切り上げとする。
  
-というのも、こうするとブロックの個数は $\displaystyle \frac{2N}{\log_2{N}}$ となる。+こうするとSparseTable, 個別計算のいずれも事前計算とメモリが $O(N)$ に収まる。 
 + 
 +SparseTableの方は、ブロックの個数が $\displaystyle \frac{2N}{\log_2{N}}$ となる。
 この要素数でSparseTableを構築すると、$\displaystyle \frac{2N}{\log{N}} \log {\frac{2N}{\log{N}}}=O(N)$ となる。 この要素数でSparseTableを構築すると、$\displaystyle \frac{2N}{\log{N}} \log {\frac{2N}{\log{N}}}=O(N)$ となる。
  
programming_algorithm/data_structure/sparse_table.txt · 最終更新: 2023/10/13 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0