ボルヘス数 ~バベルの図書館の実装可能性について~
サマリ
ボルヘスの「バベルの図書館」についてくだらないことを考えていくうちに出会った素敵なサイトを紹介します。
バベルの図書館とは
二十世紀のラテン・アメリカ文学を代表するアルゼンチンの作家、ホルヘ・ルイス・ボルヘスのよく知られた短編小説に「バベルの図書館」があります。
数限りない閲覧室と蔵書が存在する、謂わば”無限の図書館”を描いたもので、読むに連れてミクロコスモスに吸い込まれていくような、恐るべき魅力のある作品です。
岩波から出ている「伝奇集」に収録されていますので死ぬまでに一度読むことをおススメします。
事の発端
「バベルの図書館をWeb上で再現したらおもしろいのでは?そもそも実装できるレベルなのかな?」
と、ふと思いついたのでした。
蔵書数の算出
作中では、図書館の蔵書について以下のように記述されています。
<本の仕様>
・1冊410ページ
・1ページに40行、1行に80文字
<印字されている文字>
・22文字のラテン語のアルファベット(小文字)と文字の区切り(空白)、コンマ、ピリオドの25文字
この仕様で、あらゆる文字の組み合わせの本が存在する、と推測されています。
従って、
・1冊あたり 80文字×40行×410ページ=1312000文字が印字されていて、
・25文字のあらゆる組み合わせの本が存在する
ので、蔵書は
251312000 (25の1312000乗)冊
あることになります。
何桁ぐらいになるのかなーと思って、Excelで =25^131200 を計算しようとしたところ、あえなく桁あふれでエラーになってしまいました。
さてどうしよう、と、とりあえずググってみたら行き当たったのが下記の素敵サイトです。
オーストラリアのQueensland大学のMichael Bulmer さんが作成されたページで、
251312000 を”Borges' Number”(以下”ボルヘス数”と呼びます)と定義して公開しています。
これによると、ボルヘス数は1,834,097桁の数字になるとのことで、完全な数字をファイルとしてダウンロードできるようにもなっています。
ちなみに、”蔵書中のある本の最初のページを読める”ページも公開されています。
A Page from the Library of Babel
(表示のたびにPHPでランダムに文字を並べてページを生成しているものと思われます)
実装に関する雑な考察
※前項のボルヘス数を”BN”と表記します。
1) あらかじめ全ての本を生成しデータベースやストレージに格納する。
1文字1バイトとすると、一冊あたり131200バイトが必要になります。すべての本を格納するにはBN×131200 バイトが必要で、BNが200万桁弱なのでまぁだいたい200万桁です。
1PBが16桁バイトですが、16桁落としたところで焼け石に水で、要するに 200万桁PB 必要な計算になり、少なくとも非圧縮では現行のデータベースやストレージに格納するのは無理そうです。
(10n で表記しろよと思われるかもしれませんがめんどい割にあまり意味ないのでやめています)
ただハフマン符号的なものとの相性はめちゃくちゃ良さそうなので、圧縮すれば相当減るのではないかという気もします。どなたか詳しく考察してください。
2) n冊目の本を都度生成する。
文字が25種類ということは、"a"=0,"b"=1,… ","=23,"."=24と数値を割り当てると、要するに25進数で表現できますので、n冊目の本は、下記の法則で生成できることが分かります 。
Index(n冊目) | 1~409ページ | 410(最終)ページ |
---|---|---|
0 | aaaa~aaaaa(すべてa) | ~aaaa |
1 | aaaa~aaaaa(すべてa) | ~aaab |
(2~(BN-2)) | : | (末尾の文字から順にインクリメント) |
BN-1 | ....~....(すべて.) | ~..., |
BN | ....~....(すべて.) | ~.... |
こちらはストレージ容量は不要で計算リソースのみで処理できるので、実装自体はなんとかいけそうな気がしますが、200万桁の数値を25で131200回割り算する、みたいな計算が現状どれぐらいの時間でできるのか、レスポンス的な面が気になります。
これもどなたかのさらなる考察が待たれます。
あとはこの方式だと全文検索的なことができなくて、電子書籍としてのメリットが生かせないです。
それっぽいサイトがもうあった
この記事を書くために検索していたら、すでにバベルの図書館を再現したサイトがありました。
At present it contains all possible pages of 3200 characters, about 104677 books.
とあるように、現状ではまだ一部の再現に留まっているようです。
しかし、
・閲覧室→棚→本と辿っていけるようになっていたり (Browse)、
・テキスト検索ができるようになっていたり (Search:それっぽい文章を入れてヒットするとけっこう興奮します)、
と、十分に楽しめるサイトになっています。
まとめ
似たようなことを考えている人は世界にはやはりいて、流石はみんな大好きボルヘスさんだなーと思いました。
あと、IT企業に勤めているとは思えない雑な考察すいませんでした。
おまけ
本邦の誇る幻視者、山尾悠子の短編「遠近法」は、《腸詰宇宙》という円柱形の世界を描いた、バベルの図書館インスパイア系の傑作です。こちらも死ぬまでに一度読んでみることをおススメします。