Monday, February 04, 2008

Software::JINKOU-MUNOU - MIU開発(2)

今日は木構造をバイナリへ落とす処理を書いていました.
前回シリアライズ処理を書くとか書いてましたが,
よくよく考えてみたらシリアライズじゃないですね.
いや,デシリアライズできなくはないですがそんなん書きません.
やりたいことは,木構造や配列をバイナリへ落とし,任意のインデックスへ高速にアクセスできる,というもの.
それでいてバイナリサイズはコンパクト,っていう.

コンパクトにすることを念頭においていたのですが,
木構造のバイナリ化の際に,ノード数の許容量を2の16乗 - 1個にしてしまいました.

してしまいました,というのは,この木構造の利用目的.
MINAなどでいうトピックの扱いなのです.
MINAのトピックは,別にスーパーセット,サブセットという関係はなかったんですが,
MIUでは木構造であらわすので,上位トピックから会話文を適当に選んで!とか命令してやれば,
下位トピックも含めて会話文を検索します.
今回実装している木構造のバイナリ化はトピックツリー保存のためのものです.
で,トピックの種類が2の16乗 - 1個存在するかというと・・・
まぁ単純に考えてそんなにいくはずはなく.
もうちょい縮めると,2の8乗 - 1個で,255個トピックを作れるという仕様にすることも可能です.
255っていう数字は,普通にトピックつくっていけば別に全然あまるくらいの容量だとは思うんですよね.
ただ,何かしらへんな使い方を思いついた場合,このぎりぎり感は怖いものがありまして.
そこでもうちょい広い領域を,と考えれば2の16乗-1個なので65535個ですね.
そんなにトピック作るかい!とか思ってしまいます.l

トピック数の上限を255個にしてしまえば,このトピックツリー領域をもっと縮められるんですが,
まぁ数バイト単位の話なんで,別に無理して縮めなくてもいいかとか思いました.

明日は昨日作成した配列のバイナリ化モジュールを拡張して,会話文の保存処理のバイナリ化です.
MIUの発話文とユーザの発言選択肢というデータ構造になってますので,
配列バイナリ化モジュールの拡張を行うだけで簡単に済みそうです.

それが終われば,xmlファイルからバイナリへの変換処理ですね.
今xmlから内部表現に落とし込んだデータの形式で,バイナリ化のテストしてますから.
xmlから内部表現への変換処理を書いて,バイナリ化までの処理を完成させる.

そこまでできれば,MIUの会話処理に入っていけます.

No comments: