ファンデルコルプト数列

出典: フリー百科事典『ウィキペディア(Wikipedia)』
0から1の単位区間(横軸)を充填していく、最初n項のファンデルコルプト数列(上から順にnが 0 から 999 へと増加し、色が濃くなっている。

ファンデルコルプト数列van der Corput sequence)は、単位区間に対する超一様分布列英語版(準乱数列)の1つであり、1935年にオランダの数学者ヨハネ・ファン・デル・コルプトによって考案された。この数列は自然数n進表記を逆順にしたものを小数点以下に並べたものである。

自然数nb-進表記は、

であり、k桁目のdkは0 ≤ dk(n) < bを満たす。 このとき、ファンデルコルプト数列のn項目であるgb(n)は

である。

[編集]

例えば、10進のファンデルコルプト数列を得るためには、まず 1 から 9 を10で割ったものを並べる (x/10)。そして、分母を100として、分子に 10 から 99 を並べる。しかしここで、10 からそのまま並べるのではなく、01, 11, 21, 31, 41, 51, 61, 71, 81, 91 ... というように、10の位と1の位を入れ替えて並べる。そして、20以降は分子が2で終わる数字が続き、 02, 12, 22, 32, 42, 52, 62, 72, 82, 92、更に 03, 13, 23 ... と続く。

そのため、ファンデルコルプト数列(10進)は

と続き、小数表記では

0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.01, 0.11, 0.21, 0.31, 0.41, 0.51, 0.61, 0.71, 0.81, 0.91, 0.02, 0.12, 0.22, 0.32, …

となる。

2進法でも同様であり、2進ファンデルコルプト数列は

または

0.12, 0.012, 0.112, 0.0012, 0.1012, 0.0112, 0.1112, 0.00012, 0.10012, 0.01012, 0.11012, 0.00112, 0.10112, 0.01112, 0.11112, …

と続く。

任意の底において、ファンデルコルプト数列は単位区間での稠密集合となる。つまり、[0, 1]内の任意の実数に対して、その実数に収束するファンデルコルプト数列の部分列が存在する。また、単位区間で一様である。

C での実装[編集]

double corput(int n, int base){
  double q = 0;
  double bk = 1.0 / base;
  while (n > 0) {
    q += (n % base) * bk;
    n /= base;
    bk /= base;
  }
  return q;
}

関連項目[編集]

参考文献[編集]

  • van der Corput, J.G. (1935), “Verteilungsfunktionen (Erste Mitteilung)” (German), Proceedings of the Koninklijke Akademie van Wetenschappen te Amsterdam 38: 813–821, Zbl 0012.34705, http://www.dwc.knaw.nl/DL/publications/PU00014607.pdf 
  • Kuipers, L.; Niederreiter, H. (2005) [1974], Uniform distribution of sequences, Dover Publications, p. 129,158, ISBN 0-486-45019-8, Zbl 0281.10001 

外部リンク[編集]