旧バージョンのゲームをやっている夢

love-neniye

麻袋のような格好をした何かの中ボスを攻撃しているゲームをやっている。使っている武器はCupheadのスプレッドに似ている。スプレッドはダメージ効率が一番高い武器だが、弾の飛距離が短くなおかつキャラの前方に向かって放射状に飛んでいく。そのためかなり敵に近づいたうえですべての弾を当てないと真価を発揮しない。スプレッドを使いこなすためにはかなり練習が必要になる。

ゲーム自体には2026年5月からの新バージョンと2025年バージョンがあり、一度アップデートしたら原則として昔のバージョンではプレイできないことになっているが、昔のバージョンに戻してプレイしている。新旧でどんな違いがあるのかは知らない。


起床。目覚ましアラーム音で目覚め。最初は音のない振動のみだったが、いったん振動が止まってしばらくしてから、二回目のアラームで音が鳴り始めた。音量がかなり大きく感じる。配偶者は起きてアラームを止める気配がなく鳴り続けている。耳を塞いで夢の内容を思い出そうとしても、これ以上は思い出せなかった。


skip listと木というデータ構造の対応が最近気になっていて、なんとなくそれらのことを考えたりしていることが多い。1-2 skip listは「木でいう2-3 treeみたいなもの」だとなんとなく認識していたが、2-3 treeときっちりと対応のあるデータ構造だった(平衡という条件はとりあえず置いておいて、少なくともノードがもつ要素と子孫の数に関しては)。そもそもDeterministic skip listの論文をちゃんと読んだら、図入りで説明があった。

1-2スキップリストは階層の高さ別に見ると、1つ階層が下のノードを必ず1個または2個飛ばしをしている。階層の親子関係として捉えると、1個飛ばしのときは1つ下の階層の子に対応するノードが「要素を1個だけ持ち、子孫を2つ持つノード」になっていて、同様に2個飛ばしがあるときは対応する子のノード「要素を2個持ち、子孫を3つ持つノード」に対応している。リストでのスキップの制限が、木ではノードが持てる最大要素の制限に対応しているというわけだ。同様に1-2-3 skip listは2-3-4木に対応している。

グラフ構造として考えれば木構造のほうがノード間の辺が最小なので(一本でも辺を切ると連結でなくなるのが木だから)、skip listのほうがポインタとかのデータ冗長ではあるけれど、それがメリットになることもあるのだろう(よくわかっていないが並行処理に向いていると言われるのはそれが理由なんだろうか)。

言っているのは、身近な道具で例えると定規にいくつかの大きさがある目盛りと同じことで(1cmごとの目盛り、5mmごとの目盛り、1mmごとの目盛り、みたいな感じ)、それはまさにスキップリストの絵と同じことなんだけど、そういうふうに理解をしていなかった。

他の例ではFarey Sequenceと二分木の対応といえるかもしれない。幾何学的に、というか図形として考えれば、フォードの円と対応する(理想)三角形によるタイリングで、三角形二枚を合わせた四角形が、2-3treeにおける二個の要素を持つノードと対応していることになる。

一般には、B木のノードが持てる要素の数は多角形の三角形分割の数に、ノードが持てる子要素の数は多角形の辺の数−1(多角形の辺の1つは親ノードにつながっていると考える)に対応しているはず。(双曲)平面上で平面グラフの双対を考えると多角形に対応しているのは自然なんだけど、今までそういう視点から考えていなかった。

赤黒木などの多分木を二分木でシミュレートするというのも、単に多角形を(条件を付けて)三角形分割していると考えれば、よく理解できそう(な気になる)。

「平衡性を保つ」という条件が幾何学的にというか図形的にはどういうことになっているのだろう。こんなふうに視点を変えてみると(少なくとも自分にとっては)理解しやすくなるかもしれない。このような話を多面体バージョンで考えるとどうなるんだろうか、など。