Rcppで格子遊び0

  • こちらでRcppを覚えてみようか、そのための地ならし情報収集をしてみよう、という記事を書いた。
  • その実践編。『自分のためにRcppを使ってみる 〜RstudioでC++を覚える』
  • 課題を以下のように設定する。
  • d=4次元立方格子の非負整数格子を考える
  • 格子はハミング距離1の格子点同士にエッジがあるものとする
  • 今、原点からのハミング距離がnである点のサブセットに興味があるとする。これは、カテゴリ数dにおける観測数nが作る多項観測ベクトルの集合に対応し、格子のエッジは観測数をn-1からnに増やしたときに、連続して観測されうる多項観測ベクトル関係を表していることになる
    • たとえば、d=4の場合、点の数はTetrahedron number(OEIS)であってa(n) = (n+2)*a(n-1)/(n-1)という漸化式で表されるが、その増え方は(n+1)^dと比べてすごくゆっくり

n <- 500
a <- rep(0,n)
a[1] <- 1
for(i in 2:n){
	a[i] <- (i+2)*a[i-1]/(i-1)
}
a
b <- (0:(n-1))^d
matplot(cbind(a,b),type="l")
  • さて、原点からの距離が0-nの格子点グラフの頂点リストとその座標、並びに、エッジリストを作るにあたり、作業を2つに分ける
    • 一つは頂点リストを作ること(頂点数を決めること、とその座標を格納すること)
    • もう一つはn-1,n間のエッジリストを作ること