動的ダブル配列(traverse による列挙の打ち切り)

遷移集合を実装したダブル配列の場合,traverse で素性の組み合わせを列挙するときには,子ノードの兄弟ノードを調べて(値のみを持つノードでも)ループを打ち切ることができるので,列挙を少し速くできるようだ.Darts-like な traverse とインタフェースが変わってしまうのが難点.
[追記] なんだか分からないかもしれないのでもう少し説明,レコードを offset 0 の子ノードとして保存している場合には,n 次の組み合わせ素性の重みを保存しているレコードから取得した後,n+1次の組み合わせを列挙するループに入る時点で,レコードの兄弟ノードが無ければループに入らず済むと言う話.遷移集合が実装されていれば,レコードの兄弟ノードの有無が即判定できる.静的ダブル配列とかで遷移集合を保存していない場合でも,検索時にレコードを含むブロック全体 (255要素) を走査して (check を確認すれば) ループは打ち切れるが,(素性ベクトルの長さが255以上とかでない限り)n+1次の組み合わせを調べるよりダブル配列へのアクセス回数が増えるため,多分意味がない.
TAIL を実装した静的ダブル配列なら,レコード直前の文字で既に兄弟のあるなしが判定出来ているので同様のことは出来ると思う.