(57)【特許請求の範囲】
【請求項１】
可変長データを復号するためのシステムであって、
前記システムは、
プロセッサと、
メモリデバイスと、
を備えており、
前記メモリデバイスは、
前記プロセッサによって実行されたときに、前記システムに、
１つ以上のデータのブロックを読み取らせ、ここで、各データのブロックは、複数の符号化可変長データを含み、前記複数の符号化可変長データの各々は、ドキュメント識別番号間の差を表す、
前記１つ以上のデータのブロックに関連する１つ以上の記述子を読み取らせ、ここで、各記述子は、前記１つ以上のデータのブロックに対するサイズ情報を含む、
参照テーブルから前記１つ以上の記述子に関連する１つ以上のシャッフルシーケンスを識別させ、
前記１つ以上のシャッフルシーケンスを使用して、前記１つ以上のデータのブロックに対して１つ以上のシャッフル演算を並列して行うことによって、シャッフルされたデータを生成させ、
前記シャッフルされたデータから、複数の復号された可変長データを抽出させる、
命令を含む、可変長データを復号するためのシステム。
【請求項２】
前記実行された場合に、前記１つ以上のシャッフル演算を並列して行うことによって、前記シャッフルされたデータを、前記システムに生成させる命令は、
標準形式で前記１つ以上のデータのブロックの１つ以上の部分を表すように、前記シャッフルされたデータにゼロの１つ以上のシーケンスを、前記システムに挿入させること、
を含む、請求項１に記載の可変長データを復号するためのシステム。
【請求項３】
前記１つ以上のデータのブロックは、複数の可変長整数を表す、請求項１に記載の可変長データを復号するためのシステム。
【請求項４】
実行された場合に、前記シャッフルされたデータから、前記複数の復号された可変長データを、前記システムに抽出させる命令は、
前記シャッフルされたデータから、前記複数の復号された可変長データの一部分を、前記システムに抽出させることを含み、
前記一部分と関連付けられる残りの部分は、別のデータのブロックから抽出される、請求項１に記載の可変長データを復号するためのシステム。
【請求項５】
前記１つ以上のシャッフル演算は、単一命令複数データ（ＳＩＭＤ）プロセッサ命令セットからの１つ以上の並列シャッフル命令を備える、請求項１に記載の可変長データを復号するためのシステム。
【請求項６】
前記命令は、実行された場合に、さらに、前記１つ以上の記述子に関連する１つ以上のオフセットを、前記システムに識別させる、請求項１に記載の可変長データを復号するためのシステム。
【請求項７】
前記１つ以上の記述子に関連する前記１つ以上のオフセットは、固定サイズを伴う入力オフセットと、可変サイズを伴う出力オフセットとを含む、請求項６に記載の可変長データを復号するためのシステム。
【請求項８】
前記１つ以上のデータのブロックに関連する前記１つ以上のオフセットは、可変サイズを伴う入力オフセットを備える、請求項６に記載の可変長データを復号するためのシステム。
【請求項９】
可変長表現を使用してデータを符号化するためのコンピュータ実装方法であって、
実行可能命令を用いて構成される、１つ以上のコンピュータシステムの制御の下で、
データ記憶のためのブロックサイズを決定することと、
符号化する複数のデータを取得することと、
前記複数のデータに対する複数の符号化表現を決定することと、ここで、前記複数の符号化表現のうちの各符号化表現は、可変長表現である、
前記複数の符号化表現のサブセットを識別することと、ここで、前記サブセットのうちの各符号化表現のそれぞれのサイズの合計は、データ記憶のための前記ブロックサイズ以下である、
パック１進形式またはグループ１進形式のうちの少なくとも一方で前記サブセットの各符号化表現のそれぞれのサイズを表す、前記サブセットに対する第１の記述子を生成することと、
前記サブセットの各符号化表現を、第１の記憶されたグループとして記憶することと、
前記第１の記述子を記憶することと、
を含む、方法。
【請求項１０】
前記第１の記述子を記憶することは、
前記第１の記憶されたグループと隣接して前記第１の記述子を記憶すること、
を含む、請求項９に記載のコンピュータ実装方法。
【請求項１１】
前記第１の記述子を記憶することは、
前記第１の記憶されたグループと非隣接して前記第１の記述子を記憶すること、
を含む、請求項９に記載のコンピュータ実装方法。
【請求項１２】
前記パック１進形式またはグループ１進形式のうちの少なくとも一方で前記サブセットの各符号化表現のそれぞれのサイズを表すことは、
各符号化表現のそれぞれのサイズを、１を引いた１進サイズとして記述し、各符号化表現のそれぞれのサイズをゼロによって分離する、前記パック１進形式またはグループ１進形式のうちの少なくとも一方を生成すること、
を含む、請求項９に記載のコンピュータ実装方法。
【請求項１３】
前記第１の記述子を生成することは、
前記サブセットと前記データ記憶のためのブロックサイズとの間のサイズの差を表す、パディング情報を挿入すること、
を含む、請求項９に記載のコンピュータ実装方法。
【請求項１４】
前記複数のデータの１つ以上の付加的なデータの付加的な符号化表現を識別することと、
前記第１の記憶されたグループの一部として、前記付加的な符号化表現の少なくとも第１の部分を記憶することと、
第２の記憶されたグループの一部として、前記付加的な符号化表現の少なくとも第２の部分を記憶することと、
をさらに含む、請求項９に記載のコンピュータ実装方法。
【発明の詳細な説明】
【背景技術】
【０００１】
典型的な検索エンジン索引付与アルゴリズムは、逆索引データ構造を利用する。これは、巻末の索引に概念的に類似し、ワードのリスト等の内容をドキュメント（または一式のドキュメント）内のその場所にマップする、索引データ構造である。検索エンジンとの関連において、ドキュメントは、一般的に、ウェブページ、Ｅメールメッセージ、および同等物である。ドキュメント内のワードの発生は、ポスティングと呼ばれてもよく、ワードを含有する全てのドキュメントのリストは、ポスティングリストと呼ばれてもよい。本の索引がページ番号を記載するように、ポスティングリストは、ドキュメント識別番号（ｄｏｃＩＤ）を含有してもよい。検索エンジンは、クエリを受信するときに、クエリの中の各ワードについてポスティングリストを調べ、結果を組み合わせることができる。効率的に結果を組み合わせるために、ポスティングは、それらのｄｏｃＩＤの順序で記憶されてもよい。
【０００２】
可能な限り小さい空間の中にポスティングリストを記憶することが望ましくあり得る。ｄｏｃＩＤ自体よりもむしろ、隣接するｄｏｃＩＤの間の差を使用することによって、ポスティングがより小さい番号を含有することができる。一般的なデータベースからＭＩＤＩ仕様まで、多数の他の実施例があり、データは、よりコンパクトにコード化され、次いで、後の時点で復号される場合があり、しばしば、復号は、データが必要とされ得るときに基づいて繰り返し起こる。より小さい空間の中にデータを記憶するために開発された、種々の技法がある。しかしながら、本方法は、速度制限または記憶効率制限を含む、欠陥を有し得る。
【０００３】
本開示による種々の実施形態が、図面を参照して説明されるであろう。
【図面の簡単な説明】
【０００４】
【図１】種々の実施形態を実装することができる環境を図示する。
【図２Ａ】いくつかの実施形態に従って使用することができる、分割１進符号化形式を図示する。
【図２Ｂ】いくつかの実施形態による、分割１進符号化形式で符号化されたデータの実施例を図示する。
【図３Ａ】いくつかの実施形態に従って使用することができる、パック１進符号化形式を図示する。
【図３Ｂ】いくつかの実施形態による、パック１進符号化形式で符号化されたデータの実施例を図示する。
【図４Ａ】いくつかの実施形態に従って使用することができる、パック２進符号化形式を図示する。
【図４Ｂ】いくつかの実施形態による、パック２進符号化形式で符号化されたデータの実施例を図示する。
【図５Ａ】いくつかの実施形態に従って使用することができる、グループ２進符号化形式を図示する。
【図５Ｂ】いくつかの実施形態による、グループ２進符号化形式で符号化されたデータの実施例を図示する。
【図６Ａ】いくつかの実施形態に従って使用することができる、グループ１進符号化形式を図示する。
【図６Ｂ】いくつかの実施形態による、グループ１進符号化形式で符号化されたデータの実施例を図示する。
【図６Ｃ】いくつかの実施形態に従って使用することができる、グループ１進符号化形式を図示する。
【図７Ａ】いくつかの実施形態に従って使用することができる、グループ１進符号化形式を図示する。
【図７Ｂ】いくつかの実施形態による、グループ１進符号化形式で符号化されたデータの実施例を図示する。
【図７Ｃ】いくつかの実施形態に従って使用することができる、グループ１進符号化形式を図示する。
【図８】いくつかの実施形態に従って使用することができる、検索エンジンポスティングリストのドキュメント識別番号を符号化するための方法を図示する。
【図９】いくつかの実施形態に従って使用することができる、可変長データを符号化するための方法を図示する。
【図１０】いくつかの実施形態に従って使用することができる、並列シャッフル演算を図示する。
【図１１】いくつかの実施形態に従って使用することができる、並列シャッフル演算を図示する。
【図１２】いくつかの実施形態に従って使用することができる、復号の方法を図示する。
【図１３】いくつかの実施形態に従って使用することができる、シャッフルシーケンスを構築する方法を図示する。
【図１４】いくつかの実施形態に従って使用することができる、検索エンジンポスティングリストの中の符号化ドキュメント識別番号の差を復号するための方法を図示する。
【図１５】いくつかの実施形態に従って使用することができる、可変長データを復号するための方法を図示する。
【図１６】いくつかの実施形態に従って使用することができる、ハイブリッド１進シーケンス符号化形式を図示する。
【図１７】いくつかの実施形態に従って使用することができる、ハイブリッド１進シーケンス符号化形式で符号化されたデータの実施例を図示する。
【図１８】いくつかの実施形態に従って使用することができる、固定長記述子を伴うブロックの連続を用いたハイブリッド符号化形式を図示する。
【図１９】いくつかの実施形態による、固定長記述子を伴うブロックの連続を用いたハイブリッド符号化形式で符号化されたデータの実施例を図示する。
【図２０】いくつかの実施形態に従って使用することができる、固定長記述子を伴う連続を用いたハイブリッド符号化形式を図示する。
【図２１】いくつかの実施形態による、固定長記述子を伴う連続を用いたハイブリッド符号化形式で符号化されたデータの実施例を図示する。
【図２２】いくつかの実施形態に従って使用することができる、可変長記述子を伴う連続を用いたハイブリッド符号化形式を図示する。
【図２３】いくつかの実施形態による、可変長記述子を伴う連続を用いたハイブリッド符号化形式で符号化されたデータの実施例を図示する。
【発明を実施するための形態】
【０００５】
本開示の種々の実施形態によるシステムおよび方法は、データセットを符号化および復号することへの従来のアプローチで体験される、上記および他の欠陥のうちの１つ以上を克服し得る。具体的には、種々のアプローチは、例えば、検索エンジンポスティングリストで遭遇するもの等の整数のシーケンスを含む、データセットの改良型符号化および／または復号を提供する。
【０００６】
方法、システム、および／またはデバイスが、種々の実施形態に従って、並列シャッフル演算を利用して、検索エンジンポスティングリストの中の符号化ドキュメント識別番号の差を復号するために提供される。一実施形態では、符号化ドキュメント識別番号の差を復号することは、１つ以上の記述子を読み取ることを含む。各記述子は、符号化ドキュメント識別番号の差のグループに関するサイズ情報を含む。いくつかの実施形態では、符号化ドキュメント識別番号の差は、グループ１進形式で符号化される。符号化ドキュメント識別番号の差のグループを表す、複数のデータが読み取られる。符号化ドキュメント識別番号の差のグループは、１つ以上の記述子に関連する。参照テーブルからの１つ以上の記述子に関連する、１つ以上のシャッフルシーケンスが識別される。１つ以上の並列シャッフル演算は、識別されたシャッフルシーケンスを使用して、符号化ドキュメント識別番号の差のグループを表す複数のデータに行われる。１つ以上の並列シャッフル演算は、複数のデータにゼロの１つ以上のシーケンスを挿入することを含む。符号化ドキュメント識別番号の差のグループを表す、シャッフルされた複数のデータからの複数の復号されたドキュメント識別番号の差が判定される。
【０００７】
可変長データを復号するための方法、システム、および／またはデバイスが、種々の実施形態に従って提供される。いくつかの実施形態では、可変長データを復号することは、１つ以上のデータのブロックを読み取ることを含む。各データのブロックは、複数の符号化可変長データを表す。１つ以上のデータのブロックに関連する、１つ以上の記述子が読み取られる。１つ以上の記述子に関連する、１つ以上のシャッフルシーケンスが、参照テーブルから識別される。１つ以上のシャッフル演算が、１つ以上の識別されたシャッフルシーケンスを使用して、１つ以上のデータのブロックに行われる。複数の復号された可変長データが、シャッフルされた１つ以上のデータのブロックから判定される。
【０００８】
いくつかの実施形態では、１つ以上のシャッフル演算を行うことは、整数の３２ビット表現等の標準形式で１つ以上のデータのブロックの１つ以上の部分を表すように、シャッフルされた１つ以上のデータのブロックにゼロの１つ以上のシーケンスを挿入することを含む。１つ以上のデータブロックは、可変長表現で符号化された複数の整数を表してもよい。いくつかの実施形態では、１つ以上のデータブロックは、可変長表現で符号化された他のデータを表してもよい。
【０００９】
シャッフルされた１つ以上のデータのブロックから複数の復号された可変長データを判定することはまた、シャッフルされた１つ以上のデータのブロックから部分結果を判定することを含んでもよい。部分結果と関連付けられる残りの部分は、別のデータのブロックから判定されてもよい。そのような実施形態は、上記で論議されるような完全ブロック変化例を利用してもよい。場合によっては、１つ以上のシャッフル演算は、単一命令複数データ（ＳＩＭＤ）プロセッサ命令セットからの１つ以上の並列シャッフル命令を含んでもよい。
【００１０】
いくつかの実施形態は、１つ以上の記述子に関連する１つ以上のオフセットを識別することを含んでもよい。１つ以上の記述子に関連する１つ以上のオフセットは、固定サイズを伴う入力オフセットを含んでもよく、場合によっては、１つ以上の記述子に関連する１つ以上のオフセットは、可変サイズを伴う出力オフセットを含んでもよい。固定サイズは、１つ以上のデータのブロックおよび１つ以上の記述子に含まれるバイト数に依存してもよい。１つ以上の記述子に関連する１つ以上のオフセットは、可変サイズを伴う入力オフセットを含んでもよい。可変サイズは、データのブロックによって表されるデータの数に依存してもよい。いくつかの実施形態はまた、出力オフセットを識別することを含んでもよい。
【００１１】
本明細書で説明される技術は、いくつかの可変長符号化形式と、非常に高速の復号方法の使用を可能にし得る復号方法およびシステムとを含む。場合によっては、形式はまた、さらなるデータ圧縮を可能にしてもよい。実施形態は、検索エンジンポスティングリストに利用されてもよいが、本明細書で説明される技術は、データベース等を用いて、番号および他のデータセットのリストをコンパクトに記憶し、それらを効率的に復号することが有益であり得る、他の状況で使用することができる。
【００１２】
実施形態は、深いパイプラインを使用する、いくつかのプロセッサにおいて、深いパイプラインの有効性に干渉し得る分岐を回避することを含むが、それに限定されない、多数の利点を提供してもよい。実施形態は、どれだけのデータが読み取られる必要があり得るかを決定するよりもむしろ、場合によっては（オブジェクトサイズ境界上の代わりに）整合させられていないデータを読み取ることを含み、従来の可変長符号化および復号で行われるであろうよりも頻繁に、データを読み書きしてもよい。いくつかの実施形態は、可能な復号オプションを事前計算し、１つ以上のテーブルの中にその情報を記憶することを利用してもよい。いくつかの実施形態は、単一命令複数データ（ＳＩＭＤ）命令を使用して、並行して多くのバイトに作用してもよい。いくつかの実施形態は、パックシャッフルバイト（ＰＳＨＵＦＢ）のようなシャッフル命令等のＳＩＭＤ命令を利用してもよい。いくつかの実施形態は、データに関する長さの情報を含む、記述子ビットおよび／または記述子バイトを利用してもよい。
【００１３】
標準形式をより効率的に復号するための方法が提供される。本形式は、ｖａｒｉｎｔ−
ＳＵと呼ばれてもよく、符号化された整数の長さの分割（Ｓ）１進（Ｕ）表現を伴う可変長整数符号化（ｖａｒｉｎｔ）を含む。本方法は、たとえ圧縮バイトが自然マシン順序で記憶されない場合があっても、稼働する変化例とともに、この形式を復号するための並列処理を利用してもよい。実施形態は、一度に、符号化データのバイトのグループに作用してもよい。一実施形態では、８バイトのブロックが、一度に作用されてもよい。本方法は、並行して、継続および終端ビットであり得る、記述子ビットを抽出または収集することを含んでもよい。いくつかの実施形態では、この抽出または収集プロセスは、パックマスクバイト移動（ＰＭＯＶＭＳＫＢ）命令を使用する。本方法は、事前計算されたシャッフルシーケンスのテーブルの中へのオフセットとして、抽出されたビットを使用してもよい。ＰＳＨＵＦＢ等の並列置換命令が、データを復号する方法を判定するためにシャッフルシーケンスを使用してもよい。復号されたデータから元の継続および／または終端ビットを除去するように一連のビットシフト演算が行われてもよい。
【００１４】
いくつかの実施形態では、パック１進（ＰＵ）表現を伴う符号化形式が、復号方法とともに提供される。この形式は、ｖａｒｉｎｔ−ＰＵと呼ばれてもよい。場合によっては、これは、第１のバイトの中で見出すことができる単一の記述子の中へ、継続および／または終端ビットを移動させることを含んでもよい。これは、データビットが連続的にメモリの中に記憶されることを可能にしてもよく、それは、より効率的に復号することを可能にし得る。
【００１５】
いくつかの実施形態では、ブロックとして記憶される、符号化された整数のグループを復号するための方法が提供される。本形式は、いくつかの実施形態ではｖａｒｉｎｔ−ＧＢと呼ばれ得る、グループ２進（ＧＢ）表現を含んでもよい。場合によっては、この方法は、並行してデータバイトのグループを復号するために、ＰＳＨＵＦＢ命令等のシャッフル命令を利用してもよい。シャッフルシーケンスが、記述子バイトの値によって指定されるテーブルから得られてもよい。
【００１６】
いくつかの実施形態では、同時に整数のグループに対する符号化形式および復号方法が提供される。この形式は、場合によっては、グループ１進（ＧＵ）表現を含み得る形式を含んでもよい。例えば、８バイト整数のグループ（潜在的に不完全）については、本形式は、１進長符号化を伴うｖａｒｉｎｔ−Ｇ８ＩＵと呼ばれてもよい。
【００１７】
本明細書で言及される別の符号化形式は、１進長符号化を伴う８バイトのグループの情報（それぞれ完全）を表す、ｖａｒｉｎｔ  Ｇ８ＣＵである。Ｖａｒｉｎｔ−Ｇ８ＣＵは、概して、整数またはデータが符号化中にブロックの中の残りの空間に適合しないであろう場合を指す。その場合、データの第１の部分が、現在のデータブロックの中に記憶されてもよく、データの残りの部分が、次のブロックの中に記憶されるように持ち越されてもよい。実施形態は、ブロック間の運搬に関する情報を考慮するテーブルを含む、復号方法を含んでもよい。
【００１８】
いくつかの実施形態では、空間を節約するために、ビットベクトルとともに上記の圧縮方式のうちの少なくとも１つを利用する、ハイブリッドを含む、可変長符号化形式の変化例が提供される。いくつかの実施形態では、可変長符号化形式は、グループ１進形式を含んでもよい。実施形態は、整数またはデータのうちの１つよりも多くが１バイトに符号化されてもよいように、符号化される次に来る整数またはデータのシーケンスが非常に小さいかどうかを検出することを含んでもよい。これらの整数またはデータは、ビットベクトルとして記憶されてもよい。例えば、ｎ番目のビットは、位置ベース＋ｎにおけるドキュメントがポスティングリストの中にあるかどうかを表してもよい。特別な記述子値は、データバイトのグループが、可変長整数形式のうちの１つを使用するものとして、またはビットベクトルとして解釈されるべきかどうかを示してもよい。
【００１９】
いくつかの実施形態では、空間を節約するように、圧縮方式および連長符号化のハイブリッドを含む、可変長符号化形式の変化例が提供される。実施形態は、値自体の代わりに、連長を記憶することによって、全て１の連続等の類似データの連続を符号化してもよい。
【００２０】
グループ形式のうちの１つを利用する実施形態は、より大きいグループに容易に拡張されてもよく、これは、より幅広い並列性（例えば、２５６ビットレジスタ）を提供し得る、プロセッサの付加的な効率性獲得を提供する場合がある。
【００２１】
図１は、種々の実施形態による態様を実装するための環境１００の実施例を図示する。理解されるように、ウェブベースの環境が説明の目的で使用されるが、種々の実施形態を実装するために、異なる環境が適宜に使用されてもよい。電子クライアントデバイス１０２は、適切なネットワーク１０４上で要求、メッセージ、または情報を送受信し、デバイスのユーザに情報を返信するように動作可能である、任意の適切なデバイスを含むことができる。そのようなクライアントデバイスの実施例は、パーソナルコンピュータ、携帯電話、手持ち式メッセージングデバイス、ラップトップコンピュータ、セットトップボックス、携帯情報端末、電子書籍リーダ、および同等物を含む。ネットワークは、イントラネット、インターネット、セルラーネットワーク、ローカルエリアネットワーク、任意の他のそのようなネットワーク、あるいはそれらの組み合わせを含む、任意の適切なネットワークを含むことができる。そのようなシステムに使用される構成要素は、ネットワークの種類および／または選択される環境に少なくとも部分的に依存し得る。そのようなネットワークを介して通信するためのプロトコルおよび構成要素が周知であり、本明細書では詳細に論議されない。ネットワーク上の通信は、有線または無線接続、およびそれらの組み合わせによって可能にすることができる。この実施例では、環境が、要求を受信し、それに応答してコンテンツを供給するためのウェブサーバ１０６を含むため、ネットワークは、インターネットを含むが、当業者に明白となるように、他のネットワークについては、同様の目的を果たす代替的なデバイスを使用することができる。いくつかの実施形態は、単一の電子クライアントデバイス１０２を利用してもよい。
【００２２】
例証的な環境は、少なくとも１つのアプリケーションサーバ１０８と、複数のリソース、サーバ、ホスト、インスタンス、ルータ、スイッチ、データ記憶部、および／または本明細書ではデータプレーン１１０と呼ばれるであろうものを定義する他のそのような構成要素とを含むが、このプレーンのリソースは、データを記憶し、データへのアクセスを提供することに限定されないことを理解されたい。適切なデータ記憶部からデータを取得すること等のタスクを行うように相互作用することができる、連鎖され、または別様に構成され得る、いくつかのアプリケーションサーバ、層、または他の要素、プロセス、または構成要素が存在し得ることを理解されたい。本明細書で使用されるように、「データ記憶部」という用語は、任意の標準、分散、またはクラスタ化環境内で、任意の組み合わせおよび数のデータサーバ、データベース、データ記憶デバイス、およびデータ記憶媒体を含み得る、データを記憶する、アクセスする、および取り出すことが可能な任意のデバイス、またはデバイスの組み合わせを指す。アプリケーションサーバは、アプリケーション用のデータアクセスおよびビジネスロジックの大部分を処理して、クライアントデバイス用の１つ以上のアプリケーションの態様を実行するように、必要に応じてデータ記憶部と一体化するための任意の適切なハードウェアおよびソフトウェアを含むことができる。アプリケーションサーバは、データ記憶部と協働して、受付制御サービスを提供し、この実施例では、ＨＴＭＬ、ＸＭＬ、または別の適切な構造化言語の形態で、ウェブサーバによってユーザに供給され得る、ユーザに転送されるテキスト、グラフィック、オーディオ、および／またはビデオ等のコンテンツを生成することが可能である。いくつかの実施形態では、ウェブサーバ１０６、アプリケーションサーバ１０８、および同様の構成要素を、データプレーンの一部であると見なすことができる。全ての要求および応答の処理、ならびにクライアントデバイス１０２とアプリケーションサーバ１０８との間のコンテンツの送達は、ウェブサーバによって処理することができる。本明細書の他の場所で論議されるように、構造化コードを任意の適切なデバイスまたはホストマシン上で実行することができるため、ウェブおよびアプリケーションサーバは、必要とはされず、かつ構成要素例にすぎないことを理解されたい。
【００２３】
データプレーン１１０のデータ記憶部は、特定の態様に関するデータを記憶するためのいくつかの別個のデータテーブル、データベース、または他のデータ記憶機構および媒体を含むことができる。例えば、図示されるデータプレーンは、製作側のためのコンテンツを供給するために使用することができる、製作データ１１２およびユーザ情報１１６を記憶するための機構を含む。データプレーンはまた、報告および分析等の目的で使用することができる、ログデータ１１４を記憶するための機構を含むことも示される。適宜に、上記の記載された機構のうちのいずれかの中に、またはデータプレーン１１０内の付加的な機構の中に記憶することができる、ページ画像情報およびアクセス権情報用等のデータ記憶部の中に記憶される必要があり得る、多くの他の態様が存在し得ることを理解されたい。データプレーン１１０は、それと関連付けられるロジックを通して、アプリケーションサーバ１０８から命令を受信し、それに応答して、データ、命令、または他のそのような情報を取得する、更新する、または別様に処理するように動作可能である。一実施例では、ユーザが、あるタイプの項目に対する検索要求を提出する場合がある。この場合、データプレーンの構成要素が、ユーザの識別を検証するようにユーザ情報にアクセスし、そのタイプの項目に関する情報を取得するようにカタログ詳細情報にアクセスする場合がある。次いで、ユーザがユーザデバイス１０２上のブラウザを介して閲覧することができるウェブページ上の結果一覧の中等で、情報をユーザに返信することができる。目的とする特定の項目の情報は、ブラウザの専用ページまたはウィンドウの中で閲覧することができる。
【００２４】
各サーバは、典型的には、そのサーバの一般管理および動作のための実行可能プログラム命令を提供する、オペレーティングシステムを含み、かつ典型的には、サーバのプロセッサによって実行されたときに、サーバがその意図した機能を果たすことを可能にする命令を記憶する、コンピュータ可読媒体を含むであろう。サーバのオペレーティングシステムおよび一般機能性のための好適な実装は、公知であり、または市販されており、特に本明細書の本開示を踏まえて、当業者によって容易に実装される。
【００２５】
環境は、一実施形態では、１つ以上のコンピュータネットワークまたは直接接続を使用した、通信リンクを介して相互接続される、いくつかのコンピュータシステムおよび構成要素を利用する、分散コンピュータ環境である。しかしながら、そのようなシステムは、図１で図示されるよりも少数または多数の構成要素を有するシステムで、同等に良好に動作できることが、当業者によって理解されるであろう。したがって、図１のシステム１００の描写は、本質的に例証的であり、本開示の範囲にとって限定的ではないと解釈されるべきである。
【００２６】
図１で図示されるもの等の環境は、種々のコンテンツプロバイダまたは他のそのようなエンティティに有用となり得、複数のホストおよび種々のタイプのリソースが、コンテンツを供給すること、ユーザを認証すること、リソースを割り付けること、またはいくつかの他のそのようなタスクのうちのいずれかを行うこと等のタスクを行うために使用される場合がある。これらのホストのうちのいくつかは、同様の機能性を提供するように構成されてもよい一方で、他のサーバは、少なくともいくつかの異なる機能を果たすように構成されてもよい。
【００２７】
実施形態は、可変長符号化の種々の方法を提供する。いくつかの実施形態は、バイト指向符号化を含んでもよい。バイト指向符号化は、以下の特性を含む。自然２進表現の全ての有効ビットが保存される。各バイトは、１つだけの整数またはデータからのビットを含有する。符号化の単一バイト内のデータビットは、それらが元のデータまたは整数の中で有した順序付けを保存する。単一の整数またはデータからの全てのビットは、次の整数または次のデータからの全てのビットに先行する。
【００２８】
符号化のためのバイト指向形式は、種々の次元に沿って変化してもよい。例えば、データまたは整数の長さは、２進または１進表現で表されてもよい。場合によっては、いくつかのデータバイトが、データおよび長さの情報の両方を含有するように、データまたは整数の長さを表すビットを、対応する整数またはデータのデータビットに隣接して記憶することができる。場合によっては、いくつかの整数またはデータの長さを表すビットを、データビットを含有するバイトとは明確に異なる１つ以上のバイトにともにグループ化することができる。
【００２９】
いくつかの実施形態では、１進または２進表現または形式のビットは、連続的にパックされ、またはグループ化されてもよい。１進表現のビットはまた、符号化された整数のデータのバイトにわたって分割されてもよい。場合によっては、２進表現は、符号化された整数またはデータのバイトにわたって分割されてもよい。いくつかの実施形態では、１つ以上の符号化された整数またはデータの長さを表すために使用される、一式のビットは、どのようにしてデータビットが組織化されるかを説明し得るため、記述子と呼ばれてもよい。記述子は、データビットと隣接して位置してもよい。場合によっては、記述子は、データビットと非隣接して位置してもよい。
【００３０】
いくつかの実施形態では、各符号化された整数またはデータは、少なくとも１バイトを含んでもよい。２進および１進記述子の両方は、値ｎ−１を記録することによって、整数またはデータの長さｎを表してもよい。これは、所与の長さを表すために必要とされるビットの数を削減し得る。代替として、整数またはデータの長さは、ｎとして長さを記憶することを含んでもよく、それは、長さゼロがゼロデータバイトを伴う恣意的な定数を表すことを可能にし得る。
【００３１】
上記で論議される態様は、異なるバイト指向符号化形式の説明を提供するために利用されてもよい。これらの態様は、４バイト以下で符号化することができる整数の形式を符号化するために使用されてもよい。しかしながら、いくつかのインスタンスは、一般的にデータを符号化することを対象にするように拡張してもよい。さらに、例えば、データおよび／または整数が４よりも多くのバイトを伴い得る、符号化原則も利用されてもよい。
【００３２】
以下は、異なる可変長符号化のいくつかの異なる実施形態を説明する。付加的な実施形態が、本開示の範囲内で構築されてもよい。一般に、実施形態は、異なる長さを有し得る、符号化された値を含んでもよい。長さは、１つ以上の記述子において符号化されてもよい。２つの特性が、異なる符号化タイプに対する記述子を説明するために利用されてもよい。第１の記述子特性は、配列記述を含んでもよい。記述子の配列記述は、分割、パック、またはグループと呼ばれてもよい。上述のように、分割記述子は、１つ以上の整数またはデータに関する情報も含む、いくつかのバイトの間で、長さ情報を提供する記述子を分配することを含んでもよい。パック記述子は、ともにパックされている記述子ビットを指してもよい。いくつかの実施形態では、パック記述子は、それぞれの整数またはデータの符号化に先行してもよい。グループ記述子は、いくつかの整数またはデータに対する記述子をともにグループ化することを含んでもよい。
【００３３】
第２の記述子特性は、長符号化記述を含んでもよい。いくつかの長符号化記述は、個々のビットを利用する１進であってもよい一方で、いくつかの長符号化記述は、２つのビットを利用する２進法であってもよい。いくつかの実施形態は、目的とする符号化された整数またはデータの長さに基づいて、より多くのビットを利用してもよい。
【００３４】
異なる実施形態で見出され得る、これらの形式のうちのいくつかの多数の変化例がある。符号化されたデータのバイトは、当技術分野で公知である、リトルエンディアンまたはビッグエンディアン順序で記憶されてもよい。記述子ビットは、最下位（ＬＳ）または最上位ビット（ＭＳＢ）の中に記憶されてもよい。これらの選択肢は、時として、恣意的な慣例として説明されるが、実践では、ある変形例をある機械構造にとって魅力的にする、効率性の考慮事項があってもよい。例えば、分割１進表現（以下で論議される）では、最上位ビットの中で終端を０として表すことにより、１バイトの整数の一般的な事例が、いずれのシフトまたはマスクも伴わずに復号されることを可能にしてもよい。他の実施例では、パック表現については、データビットをともに保って、整合させられていない負荷から利益を得るために、最下位ビットを使用することが有益であり得る。表現が自然バイト順序付けを保存するときに、従来の復号方法がより効率的に作動してもよい一方で、以下で論議されるＳＩＭＤ方法の実施は、順序付けに依存しなくてもよい。以下の実施例は、概して、リトルエンディアン順序を伴うであろうが、ビッグエンディアン順序が、記述されるものから適応されてもよい。例えば、パック符号化（以下で論議される）を用いると、記述子は、最下位ビットの中に記憶され、リトルエンディアンマシンを用いてデータを得るようにシフトしてもよい。ビッグエンディアンマシンについては、パック符号化に対する記述子は、最上位ビットの中に記憶され、データを得るようにマスクしてもよい。加えて、記述子ビットの中の１および０の意味が、いくつかの実施形態では、交換されてもよい。
【００３５】
いくつかの実施形態は、記述子に１進表現を利用してもよい。１進形式については、数量が、継続ビットと呼ばれ得る、連続１ビットの数によって表されてもよく、その後に、終端ビットと呼ばれ得る、終端０が続く、自然慣例が利用されてもよい。いくつかの実施形態は、終端１が後に続く、連続０ビットを使用して、この慣例を逆転させてもよい。自然慣例を利用し、最下位ビットから始まって、例えば、ビット０１１１は、一実施形態では、３という数を表してもよい。
【００３６】
いくつかの実施形態では、分割１進形式は、継続および／または終端ビットのシーケンスの中の符号化された整数またはデータの長さを表すと見なされてもよい。記述子ビットは、各バイトの中のビットが継続または終端を示し得る、分散継続ビットと見なされてもよい。例えば、３バイト整数符号化は、このようなものであってもよい。
【００３７】
１ｘｘｘｘｘｘｘ
１ｘｘｘｘｘｘｘ
０ｘｘｘｘｘｘｘ
先頭のビットが、長さ３を表す、１進の数２を形成してもよいことに留意されたい。これは、いくつかのバイトにわたって分割され、１進で表される、長さ情報を伴う整数の可変長表現であるため、いくつかの実施形態では、ｖａｒｉｎｔ−ＳＵと呼ばれてもよい。いくつかの実施形態では、分割１進表現は、最上位ビットを継続または終端ビットとして使用してもよい。これは、実施形態が終端バイトケースへのシフトを回避することを可能にしてもよい。それはまた、コンパイラがビットを試験するために符号チェックを使用することを可能にしてもよい。しかしながら、いくつかの実施形態は、継続または終端ビットに対するバイトの最下位ビットを利用してもよい。
【００３８】
図２Ａは、最上位ビット（ＭＳＢ）の中に位置する記述子ビット２１０およびバイトの残りのビットの中に位置する７つのデータビット２２０を伴う、８ビットから成るバイトの分割１進表現の実施形態の実施例を提供する。図２Ｂは、整数１２３４５６が、分割１進表現を使用して表されてもよく、表現が次のバイトに続く場合は、各バイトがＭＳＢ（すなわち各バイトの最左ビット）に１（例えば、２１１および２１２）を含み、整数の終了に達した場合に０  ２１３を含む、実施例を提供する。
【００３９】
いくつかの実施形態は、記述子のパック１進表現を含んでもよい。これは、いくつかの実施形態では、ｖａｒｉｎｔ−ＰＵと呼ばれてもよく、かつｖａｒｉｎｔ−ＳＵに類似してもよいが、ともにパックされた記述子ビットを伴う。パックビットは、全てのバイトにわたって分割されるよりもむしろ、第１のバイトの下位ビットの中で収集されてもよい。記述子を保持する下位ビットの選択は、１つの整数に対する全てのデータビットが隣接するように、概して当技術分野で公知である、リトルエンディアンアーキテクチャ上のリトルエンディアン符号化に適切であり得る。同じ理由から、ビッグエンディアンアーキテクチャ上で、上位ビットの中に記述子を置き、ビッグエンディアン符号化を使用することが、復号するのにより効率的であり得る。図３Ａは、最上位ビット３２０の中に７ｎ個のデータビットを伴って、ｎ個の記述子ビットが最下位（ＬＳ）ビット３１０の中でともにパックされる、パック１進表現の一実施例を提供する。これは、リトルエンディアンアーキテクチャの実施例を提供する。ビッグエンディアンアーキテクチャを用いると、記述子ビットは、最上位ビットの中に配置されてもよい。テーブル３３０は、データビットの中のバイト数を表すために、どのようにしてｎ個の記述子ビットが利用され得るかという４つの実施例を提供する。図３Ｂは、数が３バイト３２１を伴うという情報を最初の３つの下位ビット０１１  ３１１が表す、数１２３４５６のパック１進表現の実施例を示す。
【００４０】
実施形態はまた、以下でさらに詳細に論議される、グループ１進表現を含んでもよい。
【００４１】
いくつかの実施形態は、記述子のパック２進表現を利用してもよい。例えば、第１のバイトの２ビットが、符号化された整数またはデータの長さを２進数で示すように保存されてもよい。図４Ａは、最大で３０データビット４２０とともに、２つの記述子ビット４１０が利用される、実施形態の実施例を提供する。テーブル４３０は、データビットの数を表すために、どのようにして２個の記述子ビット４１０が利用され得るかという４つの実施例を提供する。いくつかの実施形態は、より多いまたは少ないビットを利用してもよい。図４Ｂは、１２３４５６を符号化するために、どのようにしてパック２進表現が利用され得るかという一実施例を提供する。１２３４５６を表すことは、１６ビット（すなわち、２バイト）よりも多く、２５ビット（すなわち、３バイト）よりも少ない、１７データビットを伴う。したがって、２個の記述子ビット４１１は、３バイト４２１がデータビットに提供されることを表す。この場合、記述子ビット４１１は、３バイトの長さを１０として表す。
【００４２】
他の実施形態は、他の表現を利用してもよい。例えば、２進記述子ビットが、所与の整数またはデータ表現に対するいくつかのバイトにわたって分割され得る、いくつかの場合において、分割２進表現が利用されてもよい。いくつかの実施形態は、以下でさらに詳細に論議される、グループ２進表現を含んでもよい。
【００４３】
いくつかの実施形態は、記述子の長さが事前に固定され得る、２進長記述子を利用してもよい。本明細書で説明される実施形態は、概して、固定長で示される２進形式を伴うが、いくつかの実施形態は、記述子自体の長さを記憶するために付加的なメタデータを利用してもよい。加えて、いくつかの実施形態は、固定長ｋビット２進記述子（１バイトにつき１ビット）を分割することを含んでもよく、それは、少なくともｋ個のバイトを必要とし得る、バイト指向整数符号化をもたらしてもよい。
【００４４】
いくつかの符号化形式は、いくつかの整数またはデータをともにグループ化してもよい。これは、ＳＩＭＤ並列性を活用するための機会を提供してもよい。いくつかの実施形態は、符号化された形態の修正を伴わずに、元の（符号化されていない）整数またはデータに有効ビットを含有する各バイトが現れる、バイト保存型であるバイト指向符号化特性を満たす符号化を含んでもよい。
【００４５】
グループ符号化を用いた実施形態は、データバイトから記述子バイトを分離することを含んでもよい。グループ形式でのデータバイトからの記述子バイトの分離は、いくつかの実施形態では、より効率的な復号を可能にしてもよい。この分離は、復号プロセスを簡略化するように、テーブルの使用を可能にしてもよい。しかしながら、パックおよび分割表現もまた、以下でさらに詳細に論議されるように、テーブルの使用から利益を得てもよい。いくつかの実施形態では、グループ形式は、そうでなければ散在記述子ビットを排除するために必要とされ得る、ビット単位の操作を回避してもよい。具体的には、バイト保存型符号化を用いた実施形態は、特に、以下でさらに詳細に説明される、ＳＩＭＤ技法を用いた復号に準拠してもよい。
【００４６】
図５Ａは、グループ２進形式バイト順序付けの実施例を図示する。図５Ａの実施例では、バイト順序付けは、４つの２ビット２進数を含有する記述子バイト５１０が先行する、４つの整数（５２０−ａ、５２０−ｂ、５２０−ｃ、および５２０−ｄ）のグループを含む。各２ビット２進数は、対応する整数の長さを表す（例えば、右から左に読むと、第１の２ビット数が整数０  ５２０−ａを表し、次の２ビット数が整数１  ５２０−ｂを表す等）。図５Ａで示されるこの形式は、概して、ｖａｒｉｎｔ−ＧＢ形式と呼ばれてもよい。
【００４７】
図５Ｂは、リトルエンディアンバイト順序でグループ２進形式を使用して、どのようにして４つの１６進数０ｘＡＡＡＡ５２１−ａ、０ｘＢＢＢＢＢＢ５２１−ｂ、０ｘＣＣ５２１−ｃ、０ｘＤＤＤＤＤＤＤＤ５２１−ｄが表され得るかを示す。４つの整数は、対応して、２バイト、３バイト、１バイト、および４バイトを占有する。記述子バイト５１１は、２ビット２進値ｎ−１によって各バイトの長さｎを表す。この実施例を使用して、図５Ｂで示される記述子バイト５１１は、それぞれ、０１、１０、００、および１１（右から左へ読む）を含む。０１は、整数０ｘＡＡＡＡ５２１−ａの２バイト長を表し、１０は、整数０ｘＢＢＢＢＢＢ５２１−ｂの３バイト長を表し、００は、整数０ｘＣＣ５２１−ｃの１バイト長を表し、１１は、整数０ｘＤＤＤＤＤＤＤＤ５２１−ｄの４バイト長を表す。記述子ビットとデータバイトとの間の一貫した順序を維持するために、いくつかの実施形態は、最下位ビットの中に第１の２進数長を記憶してもよい。したがって、図５Ｂで示される４つの整数に対する記述子バイト５１１は、１１００１００１として表されてもよい。バイトアドレスは、増加するビット有意性の順序に合致して、右から左へ増加する。記述子の中のビットのペアの順序は、整数の順序に合致する。
【００４８】
グループ２進形式のいくつかの実施形態は、それらの長さを２進数で記憶する、可変数のバイトを占有する固定数の整数を伴う。対照的に、グループ１進形式のいくつかの実施形態は、それらの長さを１進で記憶する、可変数の整数を符号化する固定数のバイトを伴う。例えば、ｖａｒｉｎｔ−ＧＵと呼ばれる一実施形態では、各符号化された整数の長さの１進表現を含有する１つの記述子バイトとともに、８データバイトがともにグループ化されてもよい。８データバイトのうちのそれぞれは、それらのサイズに応じて、わずか２個の整数および８個もの整数を符号化してもよい。記述子の中のゼロの数は、グループの中で符号化される整数の数を示す。グループ１進形式の実施形態が、図６Ａで示される。この実施形態では、８というブロックサイズ６２０が、記述子バイト６１０の全ビットを使用することができる最小限のサイズであってもよく、８のより大きい倍数が、いくつかの実施形態に可能である。図６Ｂは、グループ１進形式を使用して４つの整数を符号化することの実施例を提供する。この実施例では、図５Ｂのグループ２進形式で示されるのと同じ４つの整数０ｘＡＡＡＡ、０ｘＢＢＢＢＢＢ、０ｘＣＣ、および０ｘＤＤＤＤＤＤＤＤが、グループ１進形式を例証するために使用される。これらの値を符号化することは、１０バイトを伴うであろうが、８バイトのみがブロック内で利用可能である。最初の３つの整数０ｘＡＡＡＡ６２１−ａ、０ｘＢＢＢＢＢＢ６２１−ｂ、および０ｘＣＣ６２１−ｃは、パディング６３０の２バイトを残して、６バイトを使用してブロック内に適合する。最後の整数０ｘＤＤＤＤＤＤＤＤは、次のブロック（図示せず）のために残される。記述子６１１は、パディング６３０の２バイトを表す２つのパディングビット１１とともに、３つの１進値、０ｘＡＡＡＡ６２１−ａの２バイト長を表す０１、０ｘＢＢＢＢＢＢ６２１−ｂの３バイト長を表す０１１、および０ｘＣＣ６２１−ｃの１バイト長を表す０を含有する。これらは、１１００１１０１という２進値を記述子に与えて、整数と同じ順序で配列される。
【００４９】
図６Ｃは、最大で１６データバイトを符号化し得る、グループ１進形式の実施例を提供する。実施形態では、２つの記述子バイト（それぞれ、６１２−ａおよび６１２−ｂ）が利用され、第１の記述子バイト６１２−ａは、最大で８データバイト６２２−ａの第１のブロックを表し、第２の記述子バイト６１２−ｂは、最大で８データバイト６２２−ｂの第２のブロックを表す。グループ１進形式の他の実施形態は、一例のみとして、２４または３２データバイト等について、さらに多くのデータを符号化してもよく、追加記述子バイトが８データバイトの各付加的なグループに提供されてもよい。この実施例は、データバイトと隣接する記述子バイトを示すが、いくつかの実施形態は、データバイトと隣接していない記述子バイトを含んでもよい。
【００５０】
いくつかの実施形態で整数を表し得る、符号化されたバイトの全グループが、８バイトブロックの中へ均等に適合するわけではない場合があるため、いくつかの実施形態は、符号化の変化例を提供してもよい。これらは、場合によっては、不完全または完全と呼ばれてもよい。
【００５１】
いくつかの実施形態ではｖａｒｉｎｔ−Ｇ８ＩＵと呼ばれ得る、不完全ブロック変化例では、実施形態が、必要であればデータブロックを不完全なままにして、８バイトの中に適合する限り多くの整数を記憶してもよい。論議される実施形態では、８は、データブロックの中のバイト数を表す。不完全ブロック変化例の実施形態は、図６Ｂに関して上記で論議された。残りの空間は、ゼロで埋められてもよいが、復号時に無視されてもよい。復号する付加的な整数がないときに、記述子の最終（最上位）ビットは、１ビットの未終了シーケンスであってもよい。いくつかの実施形態は、可変サイズデータブロックを使用して、パディングを回避する、この符号化形式の変化例を含んでもよい。
【００５２】
一実施形態ではｖａｒｉｎｔ−Ｇ８ＣＵと呼ばれ得る、完全ブロック変化例を利用する実施形態では、データブロックの中の全てのバイトが満たされてもよい。例えば、ｖａｒｉｎｔ−Ｇ８ＣＵ実施形態では、データブロックの中の８バイト全てが満たされる。以前のように、記述子の中のゼロビットの数は、符号化される完全整数の数を示す。整数が現在のブロックの中の残りの空間を超える状況では、適合する限り多くの整数が、現在のブロックの中に配置される。その整数の残りのバイトは、次のデータブロックの中へ持ち越される。同様に、対応する記述子ビットは、次のブロックの記述子バイトへ持ち越される。図７Ａは、８データバイトｒ７２０および記述子バイト７１０を伴う、完全ブロックを用いたグループ１進形式の実施例を提供し、それは、図６Ａと同様である。図７Ｂは、どのようにしてバイトが次のデータブロックに持ち越され得るかを示す。再度、例示目的のみで、図７Ｂは、いくつかの他の実施例で使用されるのと同じ４つの整数０ｘＡＡＡＡ、０ｘＢＢＢＢＢＢ、０ｘＣＣ、および０ｘＤＤＤＤＤＤＤＤを示す。最初の３つの整数７２１および対応する記述子ビット７１１は、正確にｖａｒｉｎｔ−Ｇ８ＩＵの場合のように記憶される。しかしながら、ｖａｒｉｎｔ−Ｇ８ＣＵは、第４の整数を異なって処理してもよい。その最初の２つのバイト７２２は、第１のデータブロックの中に配置され、それを完全に満たし、残りの２つのバイト７２３は、次のブロックに入る。これら最後の２つのバイトに対応する２つの記述子ビット７１２は、次のブロックの記述子バイトに入る。２つの記述子バイトにわたって広がるが、この第４の整数に対する記述子ビットの１進値は、依然として符号化された整数の長さ−１を表す。
【００５３】
図７Ｃは、その後に１６データバイト７２４が続く、２個の記述子バイト７１３を利用してもよい、グループ１進形式の実施例を提供する。この実施形態は、例えば、１２８ビットレジスタを用いて実装されてもよい。
【００５４】
図８は、種々の実施形態による、検索エンジンポスティングリストの符号化ドキュメント識別番号に対するコンピュータ実装方法８００を提供する。方法８００は、例えば、図１の環境１００で見られるような環境およびデバイスで実装されてもよい。方法８００はまた、図６Ａ−Ｃおよび／または７Ａ−Ｃに関して論議されるグループ形式の態様を含んでもよい、および／または利用してもよい。実行可能命令を用いて構成される１つ以上のコンピュータシステムの制御の下で、方法８００は、データ記憶のためのブロックサイズを判定することを含んでもよい８０２。検索エンジンポスティングリストの複数のドキュメント識別番号が受信される８０４。隣接するドキュメント識別番号の間の差が判定される８０６。各ドキュメント識別番号の差の符号化表現が判定される８０８。ドキュメント識別番号の差の符号化表現が、可変長表現を使用する。ドキュメント識別番号の差の一連の複数の符号化表現が識別される８１０。一連の各ドキュメント識別番号の差の符号化表現のそれぞれのサイズの合計は、データ記憶のための判定されたブロックサイズ以下である。１つ以上の記述子が生成される８１２。記述子は、ドキュメント識別番号の差の一連の符号化表現の中のドキュメント識別番号の差の符号化表現の数、およびそれぞれのドキュメント識別番号の差の各符号化表現のサイズに関する情報を提供する。記述子は、各サイズの１進表現を用いて、ドキュメント識別番号の差の各符号化表現のサイズを表してもよい。１つ以上の記述子およびドキュメント識別の差の一連の符号化表現が記憶される８１４。ドキュメント識別番号の差の一連の符号化表現は、グループとして記憶され、１つ以上の記述子は、ドキュメント識別番号の差の符号化表現のグループと隣接して記憶される。
【００５５】
図９は、種々の実施形態による、可変長表現を使用してデータを符号化するためのコンピュータ実装方法９００を提供する。方法９００は、例えば、図１の環境１００で見られるような環境およびデバイスで実装されてもよい。方法８００はまた、図６Ａ−Ｃ、７Ａ−Ｃ、および／または図８の方法８００に関して論議されるグループ形式の態様を含んでもよい、および／または利用してもよい。実行可能命令を用いて構成される１つ以上のコンピュータシステムの制御の下で、方法９００は、データ記憶のためのブロックサイズを判定することを含む９０２。複数のデータ項目が、識別される９０４。場合によっては、データ項目は、デルタギャップである。各データ項目の符号化表現が判定される９０６。データ項目の符号化表現は、可変長表現を使用する。データ項目の複数の符号化表現の第１のサブセットが識別される９０８。データ項目の複数の符号化表現の第１のサブセットからのデータ項目の符号化表現のそれぞれのサイズの合計は、データ記憶のための判定されたブロックサイズ以下である。第１の記述子が、生成される９１０。第１の記述子は、第１のサブセットのデータ項目の符号化表現のそれぞれのサイズを表す。データ項目の複数の符号化表現の第１のサブセットが、第１の記憶されたグループとして記憶される９１２。第１の記述子も、記憶される９１４。
【００５６】
いくつかの実施形態では、第１の記述子が、第１の記憶されたグループと隣接して記憶される一方で、他の場合においては、記述子は、第１の記憶されたグループと非隣接して記憶されてもよい。記述子は、１進形式で各データ項目の各符号化表現のそれぞれのサイズを表してもよい。１進形式は、各長さの表現をゼロによって分離する一方で、各データ項目の各符号化表現のそれぞれのサイズを、１を引いた１進サイズとして表すことを含んでもよい。場合によっては、第１のサブセットと判定されたデータのブロックサイズとの間のサイズの差を表すパディング情報が、第１の記述子に挿入されてもよい。これは、データ項目の複数の符号化表現のサイズが、データ記憶のための判定されたブロックサイズよりも小さい場合であってもよい。
【００５７】
いくつかの実施形態では、データ項目の複数の符号化表現からのそれぞれのデータ項目の付加的な符号化表現が識別されてもよい。それぞれのデータ項目の付加的な符号化表現の少なくとも第１の部分が、第１の記憶されたグループの一部として記憶されてもよい。それぞれのデータ項目の付加的な符号化表現の少なくとも第２の部分が、第２の記憶されたグループの一部として記憶されてもよい。第２の記述子が、これらの場合において生成されてもよい。第２の記述子は、第２の記憶されたグループの一部として、それぞれのデータ項目の付加的な符号化表現の少なくとも第２の部分のサイズを部分的に表してもよい。
【００５８】
実施形態は、上記で論議される符号化形式のうちの１つ以上を復号するために利用され得る、いくつかの異なる復号方法を含んでもよい。これらの復号方法はまた、本開示で必ずしも論議されない場合がある、他の符号化形式にも有用であり得る。いくつかの実施形態は、単一命令複数データ（ＳＩＭＤ）命令を利用してもよい。実施形態は、異なる符号化された形式で見出される複数のバイトに並行して作用するために、そのような命令を利用してもよい。
【００５９】
いくつかの実施形態は、多くのデータセンタで広範に利用されている、ＩｎｔｅｌおよびＡＭＤによるプロセッサで実装される、Ｉｎｔｅｌ（登録商標）６４アーキテクチャを含むが、それに限定されない、異なるプラットフォームに利用可能なＳＩＭＤ命令を利用してもよい。Ｉｎｔｅｌ（登録商標）６４アーキテクチャでは、一連のＳＩＭＤ改良が経時的に追加されてきた。ＳＩＭＤ能力の中には、１６バイトＸＭＭベクトルレジスタ、およびそれらに作用するための並列命令がある。いくつかの実施形態は、他の形式が類似または異なる能力をＩｎｔｅｌ（登録商標）６４アーキテクチャに提供するために、ＳＩＭＤ命令を利用してもよい。
【００６０】
いくつかの実施形態は、シャッフル命令を利用してもよい。一例のみとして、２００６年にＳＳＳＥ３で導入されたＰＳＨＵＦＢ命令が、いくつかの実施形態で利用されてもよい。それは、ＸＭＭレジスタの中でバイトの置換（「シャッフル」）を行い、特定位置でのゼロの挿入を可能にする。ＰＳＨＵＦＢは、データを含有する場所、およびシャッフルシーケンスを含有するレジスタといった、２つのオペランドを有する。データオペランドの元の値が保存される場合、ＰＳＨＵＦＢは、シャッフルシーケンス（ｓｈｆ）に従って、バイトのソースシーケンス（ｓｒｃ）を宛先シーケンス（ｄｓｔ）に変換すると見なすことができる。以下は、ＰＳＨＵＦＢで見られるようなシャッフルシーケンスを提供し得る、擬似コードの一実施例を提供する。
【表１】
0005770316.tif 000002
【００６１】
一例のみとして、シャッフルシーケンスの中のｉ番目の値は、どのソースバイトをｉ番目の宛先バイトの中に配置するかを示す。いくつかの実施形態では、シャッフルシーケンスの中のｉ番目の値が負である場合、ゼロが対応する宛先バイトの中に配置される。
【００６２】
いくつかの実施形態は、ＰＳＨＵＦＢ命令以外に、他のＳＩＭＤシャッフル命令を利用してもよい。例えば、ＰｏｗｅｒＰＣプロセッサ用のＡｌｔｉＶｅｃ／ＶＭＸ命令セットからのＶＰＥＲＭが、以下で論議される復号方法の目的で、同様の機能を提供してもよい。加えて、他のプラットフォーム用の他のシャッフル命令が、機能を提供してもよく、かつ異なる実施形態で利用されてもよい。
【００６３】
図１０で図示される実施例は、索引シーケンスｉ１０１０、シャッフルシーケンスｓｈｆ１０２０、ソースシーケンスｓｒｃ１０３０、および宛先シーケンスｄｓｔ１０４０を用いて、一度に４つの３２ビット整数のバイト順序を逆転させるために、どのようにしてＰＳＨＵＦＢを使用することができるかを示す。
【００６４】
上記で論議されるようないくつかの実施形態は、残りの有効バイトを、目的とする１つ以上の整数またはデータに対して損なわれていない状態にしながら、先頭のゼロバイトを除去する、バイト保存型形式を含んでもよい。次いで、復号は、正しい場所でゼロバイトを再挿入することを含んでもよい。いくつかの実施形態は、シーケンス｛０，１，２，３，．．．｝に−１を挿入することによって構築され得る、シャッフルシーケンスを利用してもよい。いくつかの実施形態は、整数のシーケンスに挿入するために−１以外の何かを利用してもよい。このシーケンスを用いると、ＰＳＨＵＦＢ等のシャッフル命令は、欠落したゼロを挿入しながら、有効データバイトをコピーしてもよい。
【００６５】
上記で論議される符号化された形式のうちの１つを復号するためにＰＳＨＵＦＢ等のシャッフル命令を使用することの実施例が、図１１で示される。この実施例では、符号化された形式は、ｖａｒｉｎｔ−Ｇ８ＩＵと呼ばれるグループ１進形式である。これは、図６Ｂで表される同じデータである。図１１は、シャッフルシーケンスｓｈｆ１１２０、索引シーケンスｉ１１１０、符号化された形式のソースシーケンスｓｒｃ１１３０、および復号されたデータの宛先シーケンスｄｓｔ１１４０を示す。例えば、索引０におけるシャッフルシーケンスの最右バイト（すなわち、最低アドレスを伴うバイト）０が、０番目のソースバイトを取り、それを０番目の宛先バイトに入れる。一般に、ｉ番目のシャッフルシーケンス入力は、どの入力場所からソースを選び、次いで、ｉ番目の宛先場所に配置するかを指示する。別の実施例として、図１１は、ｉ＝４について、索引２におけるソースが索引４を伴う宛先に配置されることをシャッフルシーケンスが述べることを示す。加えて、シャッフルシーケンスが−１を有する（他の実施形態では異なる方法で表され得る）ときに、ゼロ値が、その索引における宛先に配置されてもよい。実施例として、索引ｉ＝３において、シャッフルシーケンスは、−１を有し、その場合、ゼロが、索引ｉ＝３における宛先に配置されるであろう。この特定の実施例では、３つの整数が復号され、図で記述されるように、３という出力オフセットをもたらす。
【００６６】
所与の形式について、正しいシャッフルシーケンスは、特定のデータブロックおよびその対応する記述子バイトについて事前計算されてもよい。記述子（および時として付加的な状態）の可能な値について、復号時に必要とされる場合がある、任意のシャッフルシーケンスのテーブルが構築されてもよい。
【００６７】
いくつかの実施形態では、テーブル入力はまた、事前計算されたオフセットも含有する。ｖａｒｉｎｔ−ＧＢ形式等のグループ２進形式については、オフセットは、４つの整数を復号するためにいくつのバイトが消費されたかを示してもよく、例えば、１６バイトを出力してもよい。他の実施形態は、より多いまたは少ないバイトを出力してもよく、場合によっては、より多いまたは少ない整数を伴ってもよい。ｖａｒｉｎｔ−ＧＵ形式等のグループ１進形式については、オフセットは、いくつの整数が復号されたかを示してもよく、例えば、８バイトを消費してもよい。他の実施形態は、利用された場合、より多くのバイトを消費してもよい。
【００６８】
いくつかの実施形態では、テーブル構築が一度だけ起こってもよい一方で、テーブル参照は、グループが復号されるたびに起こってもよい。
【００６９】
これらのテーブルの可用性を考慮すると、復号の一般的方法は、以下のように説明されてもよい。  
１．データの塊およびその対応する記述子を読み取る。  
２．テーブルから適切なシャッフルシーケンスおよび／またはオフセットを調べる。  
３．シャッフルを行う。  
４．結果を書き込む。  
５．入力および出力ポインタを前進させる。
【００７０】
図１２は、いくつかの実施形態による、いくつかの復号の方法のブロック図を提供する。ブロック１２０２では、データおよびデータに対応する１つ以上の記述子が読み取られる。ブロック１２０４では、記述子と関連付けられる１つ以上のシャッフルシーケンスが、事前計算され得るテーブルから識別される。ブロック１２０６では、シャッフル演算が、シャッフルシーケンスを使用してデータに行われる。この動作は、並行して起こってもよい。ブロック１２０８では、復号された結果が、シャッフルされたデータから書き込まれる。いくつかの実施形態では、どれだけ多くのデータが読み取られたかに関する情報が返信されるであろう。
【００７１】
以下は、いくつかの異なる形式に対する上記のステップの異なる実装を提供するが、他の実施形態は、他の形式に、より多いまたは少ないこれらのステップを利用してもよい。
【００７２】
実施形態は、非常に少ない命令を用いて、いくつかの整数またはデータが同時に復号されることを可能にする。いくつかの実施形態は、条件文を必要としなくてもよく、したがって、分岐予測ミスによる性能ペナルティを回避してもよい。論理的複雑性が、コードからテーブルにシフトされてもよい。実施形態は、固定量の読み書きを含み、次いで、どれだけ多くの入力データまたは出力データを実際に処理したかを判定するためにテーブルに依存してもよい。これは、入力および出力バッファが、少なくともこの量を、読み取るまたは書き込むために利用可能な状態にすることを要求し得る。
【００７３】
いくつかの実施形態では、データブロックは、任意の固定境界上で整合させられていない。いくつかの実施形態は、整合させられていない読み書きを効率的に行うＣＰＵの能力に依存してもよい。
【００７４】
いくつかの実施形態は、場合によっては、以下等の擬似コードを使用して説明され得る、並列復号を利用してもよい。
【００７５】
並列（ＳＩＭＤ）シャッフルを使用して、データの塊を復号する。
【表２】
0005770316.tif 000003
【００７６】
この方法が復号プロセスの内側ループを構成するため、実施形態は、関数呼び出しオーバーヘッドを回避するように実装をインライン化してもよい。擬似コードで上記に示されるような実施形態は、３つの入力を取り入れてもよい。
【００７７】
・ｓｒｃ−符号化された値の入力バイトストリームへのポインタ。
【００７８】
・ｄｓｔ−ｖａｒｉｎｔ−ＧＢおよびｖａｒｉｎｔ−Ｇ８ＩＵの場合は、整数の出力ストリームへのポインタ。ｖａｒｉｎｔ−Ｇ８ＣＵの場合は、ｖａｒｉｎｔ−Ｇ８ＣＵのブロックを復号することにより、復号された整数の一部の書き込みをもたらし得るため、ｄｓｔは、バイトの出力ストリームへのポインタであってもよい。
【００７９】
・ｓｔａｔｅ−ｖａｒｉｎｔ−Ｇ８ＣＵが、書き込まれた最後の整数の４を法とするバイト数を示すために使用され得る、補助状態。
【００８０】
実施形態は、入力ストリームから符号化値を読み取り、復号された整数またはデータを出力ストリームに出力し、その結果として、ｓｒｃ、ｄｓｔ、および更新状態の新しい位置を返信してもよい。
【００８１】
いくつかの実施形態は、ＰＳＨＵＦＢ演算によって使用されるＸＭＭレジスタ等のいくつかのレジスタのサイズである、１６バイトを読み取ってもよい。しかしながら、より多くのバイトが読み取られてもよく、例えば、いくつかのレジスタは、一例のみとして、８バイトまたは３２バイト等に対して、より小さいまたは大きいサイズを有してもよい。単一のバイト記述子に対応するバイト数は、１進形式については８であってもよく、２進形式については多くても１６であってもよい。
【００８２】
実施形態は、各形式に異なるテーブルを利用してもよい。例えば、テーブルは、各記述子値に１つずつ、ｖａｒｉｎｔ−ＧＢおよびｖａｒｉｎｔ−Ｇ８ＩＵ形式に対して２５６個の入力を有してもよい。ｖａｒｉｎｔ−Ｇ８ＣＵ形式については、各記述子および状態ペアに対する入力があり得るため、テーブルは、４×２５６＝１０２４個の入力を有してもよく、状態は、０＝ｉ＜４で、整数ｉである。
【００８３】
いくつかの実施形態は、正しい位置にゼロを挿入するデータの１６バイトを拡張するために、提供されたシャッフルシーケンスとともにＰＳＨＵＦＢ演算を使用し、次いで、その結果を宛先に書き込む、ｓｈｕｆｆｌｅＡｎｄＷｒｉｔｅ演算等の演算を利用してもよい。他の実施形態は、同様に、正しい位置へのゼロの挿入および結果の書き込みとともにデータの一連のバイトを拡張するために、並列シャッフル演算とともにシャッフルシーケンスを利用してもよい。
【００８４】
ｖａｒｉｎｔ−ＧＢの場合、シャッフルシーケンスは、単一のＰＳＨＵＦＢ演算を表す１６バイトシーケンスであってもよい。グループが４つの符号化された整数を含有するため、単一のＰＳＨＵＦＢが十分であってもよく、したがって、出力は、１６バイトを超えなくてもよい。
【００８５】
いくつかの実施形態では、グループ１進形式を復号するために、シャッフルシーケンスは、２つのＰＳＨＵＦＢ演算を特定する３２バイトシーケンスであってもよい。８バイトデータブロックが、３２バイトに拡張し得る、最大８個の整数を符号化してもよいため、第２のＰＳＨＵＦＢが、１進形式のために必要とされてもよい。第１のＰＳＨＵＦＢの出力が、ｄｓｔから始まる場所に書き込まれてもよく、第２のＰＳＨＵＦＢの出力が、ｄｓｔ＋１６から始まる場所に書き込まれてもよい。条件文を回避するために、出力が１６バイトを超えないときでさえも、第２のシャッフルが行われてもよい。ＰＳＨＵＦＢが定位置でレジスタを再配列するため、対応するレジスタは、第２のＰＳＨＵＦＢの前に元のデータでリロードされてもよい。いくつかの実施形態は、単一のシャッフル演算を伴うのみであってもよい。いくつかの実施形態は、２つのシャッフルよりもむしろ１つのシャッフルを利用してもよい。
【００８６】
いくつかの１進形式については、上記の擬似コードの中でｓｒｃを増分し得る、入力オフセットは、８バイトであってもよい。ｖａｒｉｎｔ−Ｇ８ＩＵについては、復号された整数の単位で測定される出力オフセットは、１から８個の整数を含有する場合がある、シーケンスの最後のブロックを除いて、２から８の間で異なってもよい。ｖａｒｉｎｔ−Ｇ８ＣＵについては、１つのブロックを復号することにより、復号された整数の一部分の書き込みをもたらしてもよいため、出力がバイトストリームであり、オフセットがバイト単位で測定される。出力は、１から３２バイトを出力し得るシーケンスの最後のブロックを除いて、８から３２バイトである。
【００８７】
２進形式の場合、出力オフセットは、一定の４つの整数であってもよい。ｖａｒｉｎｔ−ＧＢ形式の実施形態は、４で割り切れない長さのシーケンスに対処するように、補助情報を有してもよい。これは、別々に記憶された長さ情報、またはゼロ値がシーケンスの中で現れない場合があるため、終端のゼロが無視され得るという慣例を使用して、行われてもよい。入力オフセットは、４から１６バイトの間で異なってもよい。これらの符号化の実施形態については、入力オフセットは、記述子の付加的な１バイトも考慮してもよい。可変オフセットが、事前計算され、形式テーブルに記憶されてもよい。
【００８８】
ｖａｒｉｎｔ−Ｇ８ＣＵ形式については、テーブルはまた、後続のブロックを復号するために使用される最後の整数の中のバイト数を示す、新しい状態情報を含有してもよい。
【００８９】
符号化された形式のうちのそれぞれについては、復号テーブルが事前に構築されてもよい。そのような復号テーブルは、上記で説明されるもの等の復号のための方法で利用されてもよい。各テーブルは、各可能な記述子値および状態値に対応する、テーブル入力を含んでもよい。各テーブルは、論理的に、４つのものを含有する。  
・シャッフルシーケンス  
・入力オフセット  
・出力オフセット  
・後続ブロックに使用する状態値  
形式のうちのいくつかについては、これらの値のうちのいくつかは、テーブルの中の全ての入力にわたって一定であるため、明示的に記憶される必要がない。
【００９０】
テーブル構築プロセスは、記述子バイト値および状態値を入力として取り込むことができる。それは、入力に対するシャッフルシーケンスを構築し、入力および出力オフセットならびに次の状態を計算することができる。
【００９１】
いくつかの実施形態は、符号化から実際に生じることができるものである、有効な記述子値に対処してもよい。ｖａｒｉｎｔ−ＧＢについては、全ての可能なバイト値が有効であり得る。グループ１進形式については、連続的なゼロビット間の距離が４を超えない場合に、記述子が有効であり得る。
【００９２】
シャッフルシーケンス、オフセット値、および次の状態値を構築するための方法は、いくつかの実施形態では、以下の抽象関数に依存してもよい。
【００９３】
・ｎｕｍ（ｄ）は、符号化が記述子値ｄによって表されるグループ内で完成する、整数の数を生じる。ｖａｒｉｎｔ−ＧＢについては、これは４である（それが１から４であり得る最後のブロックを除いて）。グループ１進形式については、この値は、ｄの中の０（終端）ビットの数であってもよい。
【００９４】
・ｌｅｎ（ｄ；  ｉ）は、グループ内のｉ番目の整数の長さを生じ、各ｉについて、０＝ｉ＜ｎである。これは、ｖａｒｉｎｔ−ＧＢについてはｄの中のｉ番目の個別ビットペア、または１進形式についてはｄの中のｉ番目の１進値によって判定される、長さであってもよい。
【００９５】
・ｒｅｍ（ｄ）は、グループ内の最後の符号化された整数の中の４を法とするバイト数を生じる。これは、それが記述子の中の先頭の１の数に等しい、ｖａｒｉｎｔ−Ｇ８ＣＵに必要とされてもよい。他の形式については、それは０であってもよい。
【００９６】
実施形態は、復号されているソースデータの１つのブロックの中のバイト位置を表す、シーケンス｛０，１，２，３，．．．｝に−１（またはゼロのブロックを提示する他の可能な数）を挿入するために利用され得る、シャッフルシーケンスを構築してもよい。結果として生じるシャッフルシーケンスは、欠落した先頭のゼロを挿入しながら、有効データバイトをコピーするために、ＰＳＨＵＦＢ命令等のシャッフル命令によって利用されてもよい。以下の擬似コードは、異なる実施形態に利用され得る、所与の記述子値に対するシャッフルシーケンスの構築の１つの説明を提供する。
【００９７】
所与の記述子値に対するシャッフルシーケンスを構築する。
【表３】
0005770316.tif 000004
【００９８】
上記のシャッフルシーケンス構築擬似コードは、２つの入力を含む。
【００９９】
・ｄｅｓｃ：記述子値
・ｓｔａｔｅ：以前のグループ内の最後の整数から書き込まれた、４を法とするバイト数。ｖａｒｉｎｔ−ＧＢおよびｖａｒｉｎｔ−Ｇ８ＩＵについては、完全な整数のみが、これらの形式で所与のデータブロックに書き込まれるため、状態の値は常に０である。
【０１００】
第１のループは、所与の記述子に対応するグループ内のあらゆる完全整数にわたって反復する。グループ内の各完全整数については、内側ループが、復号された整数を完成させるために必要な先頭のゼロを生成するように−１を挿入して、シャッフル演算のソースから符号化されたバイトを移動させるようにシャッフルシーケンスを設定する。ここで、変数ｊが、データブロックの中のソースデータ位置にわたって前進する一方で、変数ｋは、シャッフル演算の宛先位置に対応するシャッフルシーケンスの中の位置にわたって前進する。
【０１０１】
終結ループが、ｖａｒｉｎｔ−Ｇ８ＣＵに必要とされてもよい。それは、グループ内の最後の不完全な整数のソースから符号化されたバイトを移転させるように、残りのシャッフルシーケンスを設定する。ループは、ｒｅｍ（ｄｅｓｃ）がゼロである、他のグループ形式に影響を及ぼさない。
【０１０２】
実施形態はまた、入力オフセットを計算してもよい。１進形式については、入力オフセットは、記述子バイトの数とともに、ブロックデータバイトの数に等しくてもよい。例えば、オフセットは、データの８バイトのブロックおよび１記述子バイトがある場合では、９となるであろう。ｖａｒｉｎｔ−ＧＢ等のグループ２進形式については、所与の記述子ｄに対する入力オフセットは、以下のように表されてもよく、
【数１】
0005770316.tif 000005
【０１０３】
これは、記述子バイトに対する１を加えたグループ内の整数の長さの合計である。
【０１０４】
ｖａｒｉｎｔ−ＧＢおよびｖａｒｉｎｔ−Ｇ８ＩＵに対する出力オフセットは、ｎｕｍ（ｄ）整数に等しくてもよく、ｉは、ｖａｒｉｎｔ−ＧＢについては４であってもよい。ｖａｒｉｎｔ−Ｇ８ＣＵに対する出力オフセットは、以下のように表されてもよく、
４・ｎｕｍ（ｄ）−ｓｔａｔｅ＋ｒｅｍ（ｄ）
後続のブロックに対する状態値は、ｖａｒｉｎｔ−ＧＢおよびｖａｒｉｎｔ−Ｇ８ＩＵについては０であってもよく、ｖａｒｉｎｔ−Ｇ８ＣＵについてはｒｅｍ（ｄ）であってもよい。
【０１０５】
いくつかの実施形態は、上記で説明される方法の特定の実装を利用してもよい。例えば、以下の説明は、上記で論議される特定の形式のうちのいくつかを復号するためのいくつかの特定の方法を提供する。
【０１０６】
いくつかの実施形態では、ｖａｒｉｎｔ−ＧＢにおいて整数のグループ（いくつかの実施形態では４であってもよい）を復号するために、長さおよびシャッフルシーケンス入力が、記述子によって示されるテーブルで調べられてもよく、シャッフルシーケンスが、入力データに適用されてもよく、入力が、テーブルで見出される長さだけ前進させられてもよい。出力は、４つの整数の長さ（すなわち、１６バイト）だけ進んでもよい。これは、以下の擬似コードで示されてもよい。この方法は、他のグループ２進形式、および分割１進形式等の他の形式のうちのいくつかに適用可能かつ適応可能であってもよい。
【０１０７】
並列シャッフルを使用して、ｖａｒｉｎｔ−ＧＢ形式で記憶された４つの整数を復号する。
【表４】
0005770316.tif 000006
【０１０８】
上記の復号とともに利用され得る、長さおよびシャッフルシーケンスのテーブルが、異なる方法で構築されてもよい。いくつかの実施形態では、テーブルは、記述子バイトの各可能な値の入力を有する。記述子バイトの全ての可能な値にわたって反復し、テーブル入力は、所与の記述子バイト値に対して構築されてもよい。テーブルに記憶された長さは、記述子バイト自体を過ぎて進むように、１を加えた、記述子バイトの中の各ペアのビットによって表される長さの合計であってもよい。シャッフルシーケンスは、ソースから宛先へバイトをマップするよう構築されてもよいが、最大４バイトまで先頭のゼロで各復号された整数を満たすために、−１で埋められてもよい。以下は、そのようなテーブルを構築する１つの方法を説明してもよい。このテーブル構築の方法は、他のグループ２進形式、および分割１進形式等の他の形式のうちのいくつかに適用可能かつ適応可能であってもよい。
【０１０９】
単一のシャッフルおよびｖａｒｉｎｔ−ＧＢデコーダに対する長さのテーブル入力を構築する。
【表５】
0005770316.tif 000007
【０１１０】
ｖａｒｉｎｔ−Ｇ８ＩＵを復号することは、ｖａｒｉｎｔ−ＧＢを復号することよりもいくらか複雑であり得る。８個もの整数が単一のブロックの中で符号化されてもよいため、それらの復号された形態は、３２バイトもの多くを占有してもよい。Ｉｎｔｅｌ（登録商標）６４ＸＭＭベクトルレジスタ等のいくつかのアーキテクチャは、１６バイトを有するのみであってもよいため、２つのシャッフルが、出力の完全３２バイトを生成するように行われてもよい。いくつかの実施形態は、１つだけのシャッフル演算を用いて復号することができてもよい。第２のシャッフルが必要であるかどうかを確認するようにチェックするよりもむしろ、いくつかの実施形態は、単純に、両方のシャッフルを毎回行い、出力データのどれだけ多くを保つかを判定してもよい。以下の擬似コードは、ｖａｒｉｎｔ−Ｇ８ＩＵ形式で８バイトを復号する１つのそのような方法の１つの説明を提供する。
【０１１１】
２つのシャッフルを使用して、ｖａｒｉｎｔ−Ｇ８ＩＵ形式で記憶された８バイトを復号する。
【表６】
0005770316.tif 000008
【０１１２】
ｖａｒｉｎｔ−Ｇ８ＩＵの１つのブロックを復号した後、入力は、８バイトだけ進められてもよいが、出力位置は、復号される整数の数に応じて可変量で進んでもよい。いくつかの実施形態では、たとえ８バイトブロックのみが復号され得ても、ベクトルレジスタは、１６バイトの入力データで満たされてもよい。この方法は、他のグループ１進形式、および分割１進形式等の他の形式のうちのいくつかに適用可能かつ適応可能であってもよい。
【０１１３】
一実施形態では、所与の記述子の位置１３１０を用いてシャッフルシーケンス１３２０を構築する動作が、図１３で示される。これは、図６Ｂで表される同じデータである。この実施例については、記述子バイトは、１１００１１０１を含有し、出力長は、３つの４バイト整数である。１２バイトの出力のみが生成されるため、この場合、第２のシャッフルの出力は必要とされない。長さおよびシャッフルシーケンス入力が、記述子バイトの各可能な値に１つずつ、テーブルに対して構築されてもよい。以下の擬似コードは、どのようにして各テーブル入力が作成され得るかという一実施例を示す。この方法は、バイト位置（０から７）をシャッフルシーケンスにコピーするが、記述子の中の終端（ゼロ）ビットに遭遇するたびに、先頭の（最上位）ゼロバイトを用いて現在の出力整数を完成させるように、シャッフルシーケンスを−１で埋めてもよい。
【０１１４】
ｖａｒｉｎｔ−Ｇ８ＩＵデコーダに対する所与のテーブル入力の２つのシャッフルシーケンスを構築する。一対の隣接する１６バイトシャッフルシーケンスを、単一の３２バイトシーケンスとして構築する。
【表７】
0005770316.tif 000009
【０１１５】
いくつかの実施形態では、テーブル入力が、全ての可能なバイト値に対して構築されてもよいが、全てのバイト値が有効で可能な記述子に対応するわけではない場合がある。有効な記述子が、３つよりも多くの連続１ビット（長さで符号化整数４バイトを示す）を持たなくてもよい一方で、無効な記述子は、それを有してもよい。この状態を防ぐために、「ｂｙｔｅｓ−ｒｅｍａｉｎｉｎｇ−ｉｎ−ｉｎｔｅｇｅｒ＞０」テストが、上記の擬似コードで利用されてもよい。
【０１１６】
ｖａｒｉｎｔ−Ｇ８ＣＵ形式を復号することを伴う実施形態は、付加的な複雑性を伴い得る。例えば、データブロックに完全には適合しない整数が、部分的に書き込まれてもよく、その残りのバイトは、後続データブロックに記憶される。この理由により、長さおよびシャッフルシーケンスに使用される、この形式に対するテーブルを用いた実施形態は、異なるバイト数を持ち越す場合において、異なるデータを含有してもよい。テーブルは、２つの次元を有すると見なすことができ、一方は、今までのところ部分的に復号された整数に書き込まれたバイト数によって索引付けされ、他方は、記述子バイト値によって索引付けされる。加えて、各テーブル入力は、シャッフルシーケンスおよび出力長だけでなく、部分出力バイトカウントの新しい値も含有してもよい。したがって、いくつかの実施形態は、以下の擬似コードで表されるような、ｖａｒｉｎｔ−Ｇ８ＣＵの１つのブロックのための復号方法を利用してもよい。
【０１１７】
２つのシャッフルを使用して、ｖａｒｉｎｔ−Ｇ８ＣＵ形式で記憶された８バイトを復号する。
【表８】
0005770316.tif 000010
【０１１８】
ｖａｒｉｎｔ−Ｇ８ＣＵに対するテーブル構築は、ｖａｒｉｎｔ−Ｇ８ＩＵに類似し得るが、本方法は、部分的に符号化された整数に対するバイト数（ここではｐａｒｔｉａｌ−ｏｕｔｐｕｔ−ｃｏｕｎｔと呼ばれる）が、以前のブロックを復号している間にすでに書き込まれていてもよいという事実を考慮してもよい。これは、いくつかの実施形態については、ｖａｒｉｎｔ−Ｇ８ＣＵ等のいくつかの形式を復号するために利用され得る、テーブルに対するシャッフルシーケンスを構築するために利用され得る、以下の擬似コードで示されてもよい。出力が、もはや完全３２ビット整数を生成すると保証されない場合があるため、出力位置は、整数よりもむしろバイト単位で前進させられてもよい。以下の擬似コードでの長さの計算が、この差を反映してもよい。
【０１１９】
ｖａｒｉｎｔ−Ｇ８ＣＵデコーダに対する所与のテーブル入力の２つのシャッフルシーケンスを構築する。一対の隣接する１６バイトシャッフルシーケンスを、単一の３２バイトシーケンスとして構築する。
【表９】
0005770316.tif 000011
【０１２０】
上記は、種々の実施形態による、グループ形式に対する復号方法およびテーブル構築方法のいくつかの異なる実施例を提供するが、復号およびテーブル構築のための他の方法が、本開示の範囲内で利用されてもよい。
【０１２１】
さらに、上記の復号および／またはテーブル構築方法は、並列シャッフル演算、および／または分割１進、分割２進、パック１進、および／またはパック１進形式等の他の符号化形式を復号するためのテーブルを利用し得る、他の実施形態によって利用されてもよい。
【０１２２】
一実施形態では、分割１進形式を復号するための方法が提供されてもよい。実施形態は、この形式を復号するためのＳＩＭＤ命令を利用し得る、並列方法を利用してもよい。いくつかの実施形態は、一度に、例えば、８バイトの符号化されたデータ等のバイトのブロックに作用してもよい。符号化されたデータは、分割１進符号化形式に従って符号化されてもよい。各バイトの中で見出される継続ビットまたは終端ビットであり得る、記述子ビットは、並行して抽出または収集されてもよい。いくつかの実施形態では、この収集プロセスは、ＰＭＯＶＭＳＫＢ命令等のＳＩＭＤ命令を利用してもよい。例えば、ＰＭＯＶＭＳＫＢ命令は、バイトの集合から最上位ビットを抽出してもよい。他の並列命令もまた、これらのビットを収集または抽出するために利用されてもよい。記述子と呼ばれ得る、抽出されたビットは、事前計算されたシャッフルシーケンスのテーブルの中へのオフセットとして使用されてもよい。シャッフルシーケンスを使用する、ＰＳＨＵＦＢ等の並列置換命令が、どのようにしてデータを復号するかを判定するために使用されてもよい。いくつかの実施形態では、復号されたデータから元の継続および／または終端ビットを除去またはサニタイズするように、一連のビットシフト演算が適用されてもよい。テーブルおよびシャッフル演算を使用して復号するための同様の方法が、分割２進符号化形式に利用されてもよい。いくつかの実施形態は、バイト順序の変化が起こる場合でさえも、個別ステップを使用して同様の結果を達成してもよい。このプロセスは、２つの置換を構成するシャッフルシーケンスを事前計算することを伴ってもよく、１つの置換は、形式を復号し、もう１つの置換は、バイト順序を変化させる。
【０１２３】
いくつかの実施形態では、上記で論議されるようなｖａｒｉｎｔ−Ｇ８ＩＵ等のグループ１進形式に対するテーブルを構築するための方法が、ＰＳＨＵＦＢ等のシャッフル命令を使用して、分割１進符号化データを復号するために利用されてもよい。
【０１２４】
図１４は、種々の実施形態による、検索エンジンポスティングリストの中の符号化ドキュメント識別番号の差を復号するためのコンピュータ実装方法１４００を提供する。方法１４００は、例えば、図１の環境１００で見られるような環境およびデバイスで実装されてもよい。方法１４００はまた、少なくとも図５Ａ−Ｃ、６Ａ−Ｃ、および／または７Ａ−Ｃに関して説明されるようなグループ形式を含む、上記で論議されるようなグループ形式を復号することの態様を含んでもよい、および／または利用してもよい。実行可能命令を用いて構成される１つ以上のコンピュータシステムの制御の下で、方法１４００は、１つ以上の記述子を読み取ることを含む１４０２。各記述子は、符号化ドキュメント識別番号の差のグループに関するサイズ情報を含む。いくつかの実施形態では、符号化ドキュメント識別番号の差は、グループ１進形式で符号化される。符号化ドキュメント識別番号の差のグループを表す複数のデータが読み取られ１４０４、符号化ドキュメント識別番号の差のグループは、１つ以上の記述子に関連する。参照テーブルからの１つ以上の記述子に関連する、１つ以上のシャッフルシーケンスが識別される１４０６。１つ以上の並列シャッフル演算が、識別されたシャッフルシーケンスを使用して、符号化ドキュメント識別番号の差のグループを表す複数のデータに行われる１４０８。１つ以上の並列シャッフル演算は、複数のデータにゼロの１つ以上のシーケンスを挿入することを含む。符号化ドキュメント識別番号の差のグループを表す、シャッフルされた複数のデータからの複数の復号されたドキュメント識別番号の差が判定される１４１０。
【０１２５】
図１５は、種々の実施形態による、可変長データを復号するためのコンピュータ実装方法１５００を提供する。方法１５００は、例えば、図１の環境１００で見られるような環境およびデバイスで実装されてもよい。方法１５００はまた、少なくとも図５Ａ−Ｃ、６Ａ−Ｃ、および／または７Ａ−Ｃ、および／または図１４の方法１４００に関して説明されるようなグループ形式を含む、上記で論議されるようなグループ形式を復号することの態様を含んでもよい、および／または利用してもよい。実行可能命令を用いて構成される１つ以上のコンピュータシステムの制御の下で、方法１５００は、１つ以上のデータのブロックを読み取ることを含む１５０２。各データのブロックは、複数の符号化された可変長データを表す。１つ以上のデータのブロックに関連する、１つ以上の記述子が読み取られる１５０４。１つ以上の記述子に関連する１つ以上のシャッフルシーケンスが、参照テーブルから識別される１５０６。１つ以上のシャッフル演算が、１つ以上の識別されたシャッフルシーケンスを使用して、１つ以上のデータのブロックに行われる１５０８。複数の復号された可変長データが、シャッフルされた１つ以上のデータのブロックから判定される１５１０。
【０１２６】
いくつかの実施形態では、１つ以上のシャッフル演算を行うことは、整数の３２ビット表現等の標準形式で１つ以上のデータのブロックの１つ以上の部分を表すように、シャッフルされた１つ以上のデータのブロックにゼロの１つ以上のシーケンスを挿入することを含む。１つ以上のデータブロックは、複数の可変長整数を表してもよい。いくつかの実施形態では、１つ以上のデータブロックは、他の可変長データを表してもよい。
【０１２７】
シャッフルされた１つ以上のデータのブロックから複数の復号された可変長データを判定することはまた、シャッフルされた１つ以上のデータのブロックから部分結果を判定することを含んでもよい。部分結果と関連付けられる残りの部分は、別のデータのブロックから判定されてもよい。そのような実施形態は、上記で論議されるような完全ブロック変化例を利用してもよい。場合によっては、１つ以上のシャッフル演算は、単一命令複数データ（ＳＩＭＤ）プロセッサ命令セットからの１つ以上の並列シャッフル命令を含んでもよい。
【０１２８】
いくつかの実施形態は、１つ以上の記述子に関連する１つ以上のオフセットを識別することを含んでもよい。１つ以上の記述子に関連する１つ以上のオフセットは、固定サイズを伴う入力オフセットを含んでもよく、場合によっては、１つ以上の記述子に関連する１つ以上のオフセットは、可変サイズを伴う出力オフセットを含んでもよい。固定サイズは、１つ以上のデータのブロックおよび１つ以上の記述子に含まれるバイト数に依存してもよい。１つ以上の記述子に関連する１つ以上のオフセットは、可変サイズを伴う入力オフセットを含んでもよい。可変サイズは、データのブロックによって表されるデータの数に依存してもよい。いくつかの実施形態はまた、他の出力オフセットを識別することを含んでもよい。
【０１２９】
パック１進またはパック２進等のパック形式を伴う実施形態はまた、上記で論議されるものといくつかの類似点を共有する、復号方法を利用してもよい。パック形式を復号することを伴う実施形態は、符号化された形式のビットをマスクおよびシフトするために使用される、テーブルを事前計算することを含んでもよい。例えば、パック２進形式を利用する、いくつかの実施形態では、第１のバイトの下位２ビットは、整数を符号化するために、いくつのバイトが必要とされ得るかを示すことができる。そのようなパック２進形式を復号するための方法は、以下のステップを含んでもよい。場合によっては４であり得る、バイトのグループが、隣接メモリに読み込まれてもよい。読み取られたデータの第１のバイトが、マスクのテーブルで調べるために使用されてもよい。結果は、記述子を排除するように、右に２ビット、シフトされてもよい。どのバイトを保つかを判定し、結果を出力するように、マスクが適用されてもよい。入力ポインタが、記述子による量だけ移動させられてもよい。
【０１３０】
パック形式を復号し得る実施形態は、条件文またはループを回避してもよい。いくつかの実施形態では、シフトおよびマスクが、出力に書き込む同じ命令文に組み込まれてもよい。これは、記述子のコピーを保存する必要性を回避してもよい。いくつかの実施形態では、マスクは単に、所望され得るバイト全てにわたって１のビットを有し、所望されないバイトにわたって０のビットを有してもよい。
【０１３１】
いくつかの実施形態では、パック１進形式を復号するために、同様の方法が利用されてもよい。いくつかの実施形態では、パック２進形式の場合のように２ビットをシフトする代わりに、実施形態は、テーブルに従って異なる量でシフトしてもよい。
【０１３２】
いくつかの実施形態は、次に論議されるような付加的な補助符号化方法を利用してもよい。これらは、ハイブリッド符号化または形式と呼ばれてもよい。これらのハイブリッド形式では、符号化の基礎形式が使用されるか、またはより圧縮された代替形式が使用されるかを示すために、マーカが使用されてもよい。
【０１３３】
いくつかの実施形態では、空間を節約するように、所与の圧縮方式およびビットベクトルのハイブリッドを含む、可変長符号化形式の変化例が提供される。いくつかの実施形態では、可変長符号化形式は、グループ１進形式を含んでもよい。実施形態は、整数またはデータのうちの１つよりも多くが１バイトに符号化されてもよいように、符号化される次に来る整数またはデータのシーケンスの全構成要素が非常に小さいかどうかを検出することを含んでもよい。これらの整数またはデータは、ビットベクトルとして記憶されてもよい。例えば、ｎ番目のビットは、位置ベース＋ｎにおけるドキュメントがポスティングリストの中にあるかどうかを表してもよい。特別な記述子値は、データバイトのグループが、可変長整数形式のうちの１つを使用するものとして、またはビットベクトルとして解釈されるべきかどうかを示してもよい。
【０１３４】
ビットベクトルを利用する実施形態は、１進形式またはシーケンスの中に小さい整数またはデータに関するデータを記憶してもよい。１進シーケンスは、ゼロによって分離される、ａ−１、ｂ−１、ｃ−１．．．の１進表現を連結させることによって、小さい値ａ、ｂ、ｃ、．．．のシーケンスを表してもよい。そのようなシーケンスは、バイトでシーケンス表現の長さを示すバイトによって先行されてもよい。一例のみとして、８未満の整数連が、１進シーケンスにパックされてもよい。２つ以上の整数の符号化値が、単一のバイトの中へ適合する、すなわち、それらの合計が８以下であるときに、１進シーケンスが使用されてもよい。これは、この形態の符号化が、上記で論議される他の形式のうちの１つからの対応する可変長表現と同程度の空間しか使用しないことを保証してもよい。
【０１３５】
例えば、以下のハイブリッド１進シーケンス方法は、Ｇ８ＩＵおよびＧ８ＣＵを含む、グループ１進形式に適用されてもよい。各ブロック境界において、１は、場合によってはデルタギャップであり得る小さい数のシーケンスが、１進数のシーケンスとして符号化される、代替符号化に潜在的に切り替わることができる。記述子の下位４ビットは、図１６で示されるように、マーカ１６１０として使用されてもよい。例えば、それらの値が、有効なＧ８ＩＵまたはＧ８ＣＵ記述子では起こらないであろう、１１１１である場合に、代替圧縮形態を使用して、データバイトが符号化されていることを示すことができる。場合によっては、代替圧縮形態が使用されていることを示すために、他のマーカが利用されてもよい。この実施例では、記述子の上位４ビット１６１５が、１進シーケンス表現のバイトの長さ引く１を表す。
【０１３６】
基礎から代替圧縮形式に切り替えるときを判定するために、異なる条件が使用されてもよい。一実施形態では、エンコーダが、符号化される次の２つの整数を見る。次の２つの整数が両方とも、１進表現を使用した１バイトの中へ適合するであろう場合には、これらの値で始まる１進シーケンスを作成することができ、最大バイト長（１６）に達するまで、または次のデルタギャップの１進表現が、ビット単位で１バイトのサイズである８を超えるまでのいずれかで、継続することができる。２つの整数が１進表現を使用する１バイトの中へ適合しないであろう場合には、基礎符号化（例えば、Ｇ８ＩＵまたはＧ８ＣＵ等）が、このブロックに使用される。
【０１３７】
例えば、符号化される値の次のシーケンスが、２、１、１、４、１、１、３、１、５、１、２、９であると想定されたい。最初の２つの値の１進符号化は、０１および０となるであろう。連結値が１バイト未満を占有するため、圧縮１進シーケンスを使用することができる。各１進値は、１進では１バイトの中で表すことができない、値９に達するまで連結させられる。９より前の値は、図１７で示される、１つの１進シーケンスとして記憶することができる。シーケンスは、３バイトの記憶を必要とする、２２ビット１７２０を占有する。ハイブリッド形式が使用されていることを示すために、１１１１のマーカ１７１０が使用される。記述子の中の上位ビット１７１５は、２進では３よりも１小さい、００１０に設定することができる。付加的なビットが最終バイトの中に残された場合、それらは、１  １７２５に設定され、シーケンスの最終バイトの中の上位の１は、未終了１進値を表すため、常に復号時に無視される。
【０１３８】
いくつかの実施形態では、空間を節約するように、所与の圧縮方式および連長符号化のハイブリッドを含む、可変長符号化形式の変化例が提供される。いくつかの実施形態では、可変長符号化形式は、グループ１進形式を含んでもよい。実施形態は、値自体の代わりに、連長を記憶することによって、全て１の連等の類似データの連続を符号化してもよい。一例のみとして、値１の連長が、いくつかの索引で起こってもよい。いくつかの製品検索との関連で、製品の種類または名前等の共通のワードの反復により、反復が見出されてもよい。実施形態は、いくつかの異なる連長符号化を含んでもよい。いくつかの実施形態は、固定長記述子を伴う連続を含んでもよい。これらの実施形態は、長さ−３を表す単一のバイトで符号化され得る、３から２５８の間の長さの連続を含んでもよい。いくつかの実施形態は、可変長記述子を伴う連続を含んでもよい。これらの実施形態は、上記で論議されるように、分割１進形式を使用して符号化され得る、３から２＾２８＋２の間の長さの連続を含んでもよい。いくつかの実施形態は、固定長記述子を伴うブロックの連続を含んでもよい。これらの実施形態は、２進値ｍ−１を用いて４ビットで符号化され得る、［１，１６］の中のｍに対する長さ８ｍの連続を含んでもよい。いくつかの実施形態は、１の連続が少なくとも３の長さであるときに、連長符号化を利用してもよい。これは、連長符号化が、対応する可変長表現と同程度の空間しか使用しないことを確実にしてもよい。
【０１３９】
以下は、固定長記述子を伴うブロックの連続を用いたハイブリッド符号化（ＲＢＣ）の実施例を提供する。この実施例は、Ｇ８ＩＵおよびＧ８ＣＵを含む、グループ１進形式に適用されてもよい。
【０１４０】
例えば、特定の値がデータの中で非常に一般的である場合、その値の継続的連続を見て、連長だけを記憶することによって、高圧縮を達成することが可能である。いくつかの用途では、値１が非常によく見られるため、以下は、この様式で１の連続を特異的に表すであろう。当然ながら、他の定数の連続を同様に符号化することができる。空間を節約するために、ｂがカウンタの粒度である、ｂ個の継続的な１のブロックを数えることができる。以下の実施例については、ｂは８に等しくなるであろうが、ｂの他の値を明確に使用することができる。
【０１４１】
上記で論議されるように、各ブロック境界において、１は、継続的な１の連続が、連長を示すカウントによって表される、代替符号化に潜在的に切り替わることができる。記述子の下位４ビットをマーカとして使用することができる。例えば、図１８で示されるように、記述子の上位ビットが以下のような連長を表すことを示すために、有効なＧ８ＩＵまたはＧ８ＣＵ記述子では起こらないであろう、１１１１として表される、マーカ１８１０が利用されてもよい。上位４ビット１８１５の２進値がｖである場合、連長はｂ＊（ｖ＋１）である。これは、長さがｂおよび１６ｂの間のｂの任意の倍数である、連続の表現を可能にする。
【０１４２】
例えば、ｂまたはより多くの１の次に来る連続が見られるときはいつでも、圧縮ＲＢＣ符号化が利用されてもよい。１２８個の値が符号化されたとき、または１の連続が終了するときのいずれかで、ＲＢＣシーケンスは終了することができる。１の次に来る連続の長さがｂの倍数ではない場合、連長を超えない最大倍数を使用することができ、残りの値は、（そのブロックの中に記憶される、あらゆる他の次に来る値とともに）通常の基礎符号化を使用して次のブロックの中に記憶される。この表現は、極めてコンパクトであり、いずれのデータバイトも必要とせず、全ての情報は記述子バイトの中にある。
【０１４３】
例えば、シーケンスの中の次の値が、１、１、１、１、１、１、１、１、１、１、１、１、１、１、１、１、１、１、１、５であると想定されたい。ｂ＝８であり、少なくとも８個の１があるため、連長符号化シーケンスを構築することができる。連続の中の１の数は、２＊８＋３である、１９である。８の直近の倍数が１６であるため、これら１６だけに対するＲＢＣ表現を使用することができる。「２」は、グループ８の数を表し、参照番号１９１５において図１９で示されるように、値２−１＝１を記憶することができる。そして再度、この実施例では１１１１として表される、マーカ１９１０も利用される。
【０１４４】
いくつかの実施形態は、固定長記述子を伴う連続を用いたハイブリッド符号化方式（ＲＣ）を含んでもよい。この方法は、主に分割１進形式（ｖａｒｉｎｔ−ＳＵ）に適用されるが、グループ１進またはパック１進と組み合わせることもできる。以下は、分割１進を用いた実装の説明を提供するが、他の１進形式に適用されるように修正されてもよい。
【０１４５】
上記で論議されるように、定数値の連続は、それらの長さによって表されてもよい。しかしながら、この実施例については、別個の記述子バイトがＳＵ形式で利用されない。したがって、値ゼロが、図２０で示されるように、マーカ２０１０として利用されてもよく、これは、値ゼロが入力で発生しないことを要求してもよい（例えば、ポスティングリストの中のデルタギャップの場合である）。符号化表現の中の各バイトは、ｖａｒｉｎｔ−ＳＵ符号化整数の中の最初のバイト、またはＲＣ形式用のマーカである値ゼロのいずれかであってもよい。値がゼロではない場合、このバイトは、通常のＳＵ符号化整数の中の第１のものであり得る。値がゼロである場合、連長情報を記憶するために、次のバイトを使用することができる。具体的には、長さの連続ｒ＞２については、参照番号２０２０で示されるように、ｒ−３という２進値がバイトの中に記憶される。これは、３から２５８の長さの連続の符号化を可能にする。
【０１４６】
ＲＣ形式を使用するときを判定するために、次に来る値のシーケンスを調査することができる。少なくとも次の３つの値が１である場合、（最大で２５８の）１の連続全体を圧縮形態で符号化することができる。そうでなければ、ＳＵ形式の次の値を記憶することができる。ＲＣ形式に切り替わるために必要とされる最小長の閾値は、３である必要はなく、３は、符号化がｖａｒｉｎｔ−ＳＵよりもコンパクトであることを保証する最小閾値である。
【０１４７】
例えば、シーケンスの中の次の値が、１、１、１、１、１、１、１、１、１、１、１、１、１、１、１、１、１、１、１、５であると想定されたい。図２１は、この１のシーケンスをＲＣ形式で記憶することの実施例を示す。シーケンスが少なくとも３つの１で始まるため、１のシーケンス全体をＲＣ形式で符号化することができる。これは、第１のバイト２１１０の中のゼロ、および第２のバイト２１２０の中の１９から３を引いた連長を記憶することを意味する。連続の後の５は、基礎ｖａｒｉｎｔ−ＳＵ形式で記憶することができる。
【０１４８】
いくつかの実施形態は、可変長記述子を伴う連続を用いたハイブリッド符号化方法（ＲＶ）を含んでもよい。この方法は、主に分割１進形式（ｖａｒｉｎｔ−ＳＵ）に適用されるが、グループ１進またはパック１進と組み合わせることもできる。
【０１４９】
上記で論議されるように、定数値の連続は、それらの長さによって表すことができ、図２２で見られるようなマーカ２２１０として、第１のバイトの中の値ゼロを使用することができ、これは、値ゼロが入力で発生しないことを要求してもよい（例えば、ポスティングリストの中のデルタギャップの場合である）。符号化表現の中の各バイトは、ｖａｒｉｎｔ−ＳＵ符号化整数の中の最初のバイト、またはＲＶ形式用のマーカである値ゼロのいずれかであってもよい。値がゼロではない場合、このバイトは、通常のＳＵ符号化整数の中の第１のものであり得る。値がゼロである場合、ｖａｒｉｎｔ−ＳＵ形式で連長情報を記憶するために、次の１−４バイト２２２０を使用することができる。値自体ではなく、連長が記憶される。再度、具体的には、長さの連続ｒ＞２については、ｒ−３という２進値を符号化表現の中に記憶することができる。ｖａｒｉｎｔ−ＳＵが４バイトの中に最大で２＾２８−１の整数を記憶することができるため、これは、３から２＾２８＋２の長さの連続の符号化を可能にする。
【０１５０】
ＲＶ形式を使用するかどうかを決定するための基準は、ＲＣ形式と同一となり得、次に来る値のシーケンスを調査することができる。少なくとも次の３つの値が１である場合、（最大で２＾２８＋２の）１の連続全体を圧縮形態で符号化することができる。そうでなければ、次の値をＳＵ形式で記憶することができる。ＲＶ形式に切り替わるために必要とされる最小長の閾値は、３である必要はなく、３は、符号化がｖａｒｉｎｔ−ＳＵよりもコンパクトであることを保証する最小閾値である。
【０１５１】
例えば、シーケンスの中の次の値が３００個の１であり、その後に異なる数が続くと想定されたい。シーケンスが少なくとも３つの１で始まるため、シーケンス全体をＲＶ形式で符号化することができる。これは、第１のバイトの中のゼロ、および３００から３を引いた連長をｖａｒｉｎｔ−ＳＵ形態で記憶することを意味する。図２３は、ＲＶ形式で３００個の１を記憶することの実施例を示す。最右バイトは、マーカバイト２３１０を表し、左側の第２および第３のバイト２３２０は、ｖａｒｉｎｔ−ＳＵ形式の数量２９７を表す。
【０１５２】
上記で論議されるように、種々の実施形態は、場合によっては、１つ以上のユーザコンピュータ、コンピュータデバイス、またはいくつかのアプリケーションのうちのいずれかを操作するために使用することができる処理デバイスを含むことができる、多種多様な動作環境で実装することができる。ユーザまたはクライアントデバイスは、標準オペレーティングシステムを実行するデスクトップまたはラップトップコンピュータ等のいくつかの汎用パーソナルコンピュータのうちのいずれか、ならびにモバイルソフトウェアを実行し、いくつかのネットワーキングおよびメッセージングプロトコルをサポートすることが可能なセルラー、無線、および手持ち式デバイスを含むことができる。そのようなシステムはまた、種々の市販のオペレーティングシステムのうちのいずれか、ならびに開発およびデータベース管理等の目的のための他の既知のアプリケーションを実行する、いくつかのワークステーションを含むこともできる。これらのデバイスはまた、ダミー端末、シンクライアント、獲得システム、およびネットワークを介して通信することが可能な他のデバイス等の他の電子デバイスを含むこともできる。
【０１５３】
種々の態様はまた、サービス指向アーキテクチャの一部になり得る等の、少なくとも１つのサービスまたはウェブサービスの一部として実装することもできる。ウェブサービス等のサービスは、拡張可能マークアップ言語（ＸＭＬ）形式であり、ＳＯＡＰ（「Ｓｉｍｐｌｅ  Ｏｂｊｅｃｔ  Ａｃｃｅｓｓ  Ｐｒｏｔｏｃｏｌ（シンプルオブジェクトアクセスプロトコル）」に由来する）等の適切なプロトコルを使用して交換されるメッセージを使用すること等によって、任意の適切なタイプのメッセージングを使用して通信することができる。そのようなサービスによって提供または実行されるプロセスは、ウェブサービス記述言語（ＷＳＤＬ）等の任意の適切な言語で書くことができる。ＷＳＤＬ等の言語を使用することにより、種々のＳＯＡＰフレームワーク内のクライアント側コードの自動生成等の機能性を可能にする。
【０１５４】
ほとんどの実施形態は、ＴＣＰ／ＩＰ、ＯＳＩ、ＦＴＰ、ＵＰｎＰ、ＮＦＳ、ＣＩＦＳ、およびＡｐｐｌｅＴａｌｋ等の種々の市販のプロトコルのうちのいずれかを使用する通信をサポートするために、当業者に周知されるであろう、少なくとも１つのネットワークを利用する。ネットワークは、例えば、ローカルエリアネットワーク、広域ネットワーク、仮想プライベートネットワーク、インターネット、イントラネット、エクストラネット、公衆交換電話ネットワーク、赤外線ネットワーク、無線ネットワーク、およびそれらの任意の組み合わせであり得る。
【０１５５】
ウェブサーバを利用する実施形態では、ウェブサーバは、ＨＴＴＰサーバ、ＦＴＰサーバ、ＣＧＩサーバ、データサーバ、Ｊａｖａ（登録商標）サーバ、およびビジネスアプリケーションサーバを含む、種々のサーバまたはミッドティアアプリケーションのうちのいずれかを実行することができる。サーバはまた、Ｊａｖａ、Ｃ、Ｃ＃、またはＣ＋＋等の任意のプログラミング言語、あるいはＰｅｒｌ、Ｐｙｔｈｏｎ、またはＴＣＬ等の任意のスクリプト言語、ならびにそれらの組み合わせで書かれた１つ以上のスクリプトまたはプログラムとして実装され得る、１つ以上のウェブアプリケーションを実行すること等によって、ユーザデバイスからの要求に応答して、プログラムまたはスクリプトを実行することが可能であってもよい。サーバはまた、Ｏｒａｃｌｅ（登録商標）、Ｍｉｃｒｏｓｏｆｔ（登録商標）、Ｓｙｂａｓｅ（登録商標）、およびＩＢＭ（登録商標）から市販されているものを制限なく含む、データベースサーバを含んでもよい。
【０１５６】
環境は、上記で論議されるように、種々のデータ記憶部ならびに他のメモリおよび記憶媒体を含むことができる。これらは、コンピュータのうちの１つ以上に対してローカルである（および／またはその中に常駐する）、あるいはネットワークにわたるコンピュータのうちのいずれかまたは全てから遠隔にある、記憶媒体上等の種々の場所に存在することができる。特定の一式の実施形態では、情報は、当業者に周知である記憶領域ネットワーク（「ＳＡＮ」）内に存在してもよい。同様に、コンピュータ、サーバ、または他のネットワークデバイスに起因する機能を果たすためのあらゆる必要ファイルが、適宜に、ローカルに、および／または遠隔に記憶されてもよい。システムがコンピュータ化デバイスを含む場合、そのような各デバイスは、バスを介して電気的に連結され得るハードウェア要素を含むことができ、要素は、例えば、少なくとも１つの中央処理装置（ＣＰＵ）、少なくとも１つの入力デバイス（例えば、マウス、キーボード、コントローラ、タッチスクリーン、またはキーパッド）、および少なくとも１つの出力デバイス（例えば、表示デバイス、プリンタ、またはスピーカ）を含む。そのようなシステムはまた、ディスクドライブ、光学記憶デバイス、およびランダムアクセスメモリ（「ＲＡＭ」）または読取専用メモリ（「ＲＯＭ」）等の固体記憶デバイス、ならびにリムーバブルメディアデバイス、メモリカード、フラッシュカード等の１つ以上の記憶デバイスを含んでもよい。
【０１５７】
そのようなデバイスはまた、上記で説明されるように、コンピュータ可読記憶媒体リーダ、通信デバイス（例えば、モデム、ネットワークカード（有線または無線）、赤外線通信デバイス等）、およびワーキングメモリを含むこともできる。コンピュータ可読記憶媒体リーダは、遠隔、ローカル、固定、および／またはリムーバブル記憶デバイス、ならびにコンピュータ可読情報を一時的、および／またはより永久的に含有する、記憶する、伝送する、および取り出すための記憶媒体を表す、コンピュータ可読記憶媒体と接続することができ、またはそれを受容するように構成することができる。本システムおよび種々のデバイスはまた、典型的には、オペレーティングシステム、クライアントアプリケーションまたはウェブブラウザ等のアプリケーションプログラムを含む、いくつかのソフトウェアアプリケーション、モジュール、サービス、または少なくとも１つのワーキングメモリデバイス内に位置する他の要素を含むであろう。代替実施形態は、上記で説明されるものからの多数の変化例を有してもよいことを理解されたい。例えば、カスタマイズしたハードウェアもまた、使用される場合があり、および／または特定の要素が、ハードウェア、ソフトウェア（アプレット等の移植性ソフトウェアを含む）、あるいは両方で実装される場合がある。さらに、ネットワーク入力／出力デバイス等の他のコンピュータデバイスへの接続が採用されてもよい。
【０１５８】
コードまたはコードの部分を含有するための記憶媒体およびコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、または他の磁気記憶デバイス、または所望の情報を記憶するために使用することができ、かつシステムデバイスによってアクセスすることができる任意の他の媒体を含む、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータ等の情報の記憶および／または伝送のための任意の方法または技術で実装される、揮発性および不揮発性、リムーバブルおよび非リムーバブル媒体等であるが、それらに限定されない、記憶媒体および通信媒体を含む、当技術分野で公知である、または使用される任意の適切な媒体を含むことができる。本開示および本明細書で提供される教示に基づいて、当業者であれば、種々の実施形態を実装する他の手段および／または方法を理解するであろう。
【０１５９】
したがって、本明細書および図面は、制限的な意味よりもむしろ例証的な意味で見なされるものである。しかしながら、請求項に記載されるような本発明のより広い精神および範囲から逸脱することなく、種々の修正および変更がそれに行われてもよいことが明白となるであろう。
【０１６０】
付記：
付記１．    検索エンジンポスティングリストの中の符号化ドキュメント識別番号の差を復号するためのコンピュータ実装方法であって、
実行可能命令を用いて構成される、１つ以上のコンピュータシステムの制御の下で、
各記述子が、符号化ドキュメント識別番号の差のグループに関する複数のサイズ情報に関する、情報を含む、１つ以上の記述子を読み取ることと、
前記１つ以上の記述子に関連する前記符号化ドキュメント識別番号の差のグループを表す、複数のデータを読み取ることと、
参照テーブルから前記１つ以上の記述子に関連する１つ以上のシャッフルシーケンスを識別することと、
前記識別されたシャッフルシーケンスを使用して、前記符号化ドキュメント識別番号の差のグループを表す、前記複数のデータに１つ以上の並列シャッフル演算を行うことであって、前記１つ以上の並列シャッフル演算は、前記複数のデータにゼロの１つ以上のシーケンスを挿入することを含む、１つ以上の並列シャッフル演算を行うことと、
前記符号化ドキュメント識別番号の差のグループを表す、前記シャッフルされた複数のデータから、複数の復号されたドキュメント識別番号の差を判定することと、
を含む、コンピュータ実装方法。
【０１６１】
付記２．    前記符号化ドキュメント識別番号の差は、グループ１進形式で符号化される、付記１に記載の検索エンジンポスティングリストの中の符号化ドキュメント識別番号の差を復号するためのコンピュータ実装方法。
【０１６２】
付記３．    可変長データを復号するためのコンピュータ実装方法であって、
実行可能命令を用いて構成される、１つ以上のコンピュータシステムの制御の下で、
各データのブロックが、複数の符号化可変長データを含む、１つ以上のデータのブロックを読み取ることと、
前記１つ以上のデータのブロックに関連する１つ以上の記述子を読み取ることと、
参照テーブルから前記１つ以上の記述子に関連する１つ以上のシャッフルシーケンスを識別することと、
前記１つ以上の識別されたシャッフルシーケンスを使用して、前記１つ以上のデータのブロックに１つ以上のシャッフル演算を行うことと、
前記シャッフルされた１つ以上のデータのブロックから、複数の復号された可変長データを判定することと、
を含む、コンピュータ実装方法。
【０１６３】
付記４．    前記１つ以上のシャッフル演算を行うことはさらに、標準形式で前記１つ以上のデータのブロックの１つ以上の部分を表すように、前記シャッフルされた１つ以上のデータのブロックにゼロの１つ以上のシーケンスを挿入することを含む、付記３に記載の可変長データを復号するためのコンピュータ実装方法。
【０１６４】
付記５．    前記１つ以上のデータブロックは、複数の可変長整数を表す、付記３に記載の可変長データを復号するためのコンピュータ実装方法。
【０１６５】
付記６．    前記シャッフルされた１つ以上のデータのブロックから前記複数の復号された可変長データを判定することはさらに、
前記シャッフルされた１つ以上のデータのブロックから部分結果を判定することを含み、前記部分結果と関連付けられる残りの部分は、別のデータのブロックから判定される、
付記３に記載の可変長データを復号するためのコンピュータ実装方法。
【０１６６】
付記７．    前記１つ以上のシャッフル演算は、単一命令複数データ（ＳＩＭＤ）プロセッサ命令セットからの１つ以上の並列シャッフル命令を含む、付記３に記載の可変長データを復号するためのコンピュータ実装方法。
【０１６７】
付記８．    前記１つ以上の記述子に関連する１つ以上のオフセットを識別することをさらに含む、付記３に記載の可変長データを復号するためのコンピュータ実装方法。
【０１６８】
付記９．    前記１つ以上の記述子に関連する前記１つ以上のオフセットは、固定サイズを伴う入力オフセットと、可変サイズを伴う出力オフセットとを備える、付記８に記載の可変長データを復号するためのコンピュータ実装方法。
【０１６９】
付記１０．    前記１つ以上の記述子に関連する前記１つ以上のオフセットは、可変サイズを伴う入力オフセットを備える、付記８に記載の可変長データを復号するためのコンピュータ実装方法。
【０１７０】
付記１１．    可変長データを復号するためのシステムであって、
プロセッサと、
メモリデバイスであって、前記プロセッサによって実行されたときに、前記システムに、
各データのブロックが、複数の符号化可変長データを含む、１つ以上のデータのブロックを読み取らせ、
前記１つ以上のデータのブロックに関連する１つ以上の記述子を読み取らせ、
参照テーブルから前記１つ以上の記述子に関連する１つ以上のシャッフルシーケンスを識別させ、
前記１つ以上の識別されたシャッフルシーケンスを使用して、前記１つ以上のデータのブロックに１つ以上のシャッフル演算を行わせ、
前記シャッフルされた１つ以上のデータのブロックから、複数の復号された可変長データを判定させる、
命令を含む、メモリデバイスと、
を備える、システム。
【０１７１】
付記１２．    前記１つ以上のシャッフル演算を行うことはさらに、標準形式で前記１つ以上のデータのブロックの１つ以上の部分を表すように、前記シャッフルされた１つ以上のデータのブロックにゼロの１つ以上のシーケンスを挿入することを含む、付記１１に記載の可変長データを復号するためのシステム。
【０１７２】
付記１３．    前記１つ以上のデータブロックは、複数の可変長整数を表す、付記１１に記載の可変長データを復号するためのシステム。
【０１７３】
付記１４．    前記シャッフルされた１つ以上のデータのブロックから複数の復号された可変長データを判定することはさらに、
前記シャッフルされた１つ以上のデータのブロックから部分結果を判定することを含み、前記部分結果と関連付けられる残りの部分は、別のデータのブロックから判定される、
付記１１に記載の可変長データを復号するためのシステム。
【０１７４】
付記１５．    前記１つ以上のシャッフル演算は、単一命令複数データ（ＳＩＭＤ）プロセッサ命令セットからの１つ以上の並列シャッフル命令を備える、付記１１に記載の可変長データを復号するためのシステム。
【０１７５】
付記１６．    前記１つ以上の記述子に関連する１つ以上のオフセットを識別することをさらに含む、付記１１に記載の可変長データを復号するためのシステム。
【０１７６】
付記１７．    前記１つ以上の記述子に関連する前記１つ以上のオフセットは、固定サイズを伴う入力オフセットと、可変サイズを伴う出力オフセットとを含む、付記１６に記載の可変長データを復号するためのシステム。
【０１７７】
付記１８．    前記１つ以上のデータのブロックに関連する前記１つ以上のオフセットは、可変サイズを伴う入力オフセットを備える、付記１６に記載の可変長データを復号するためのシステム。
【０１７８】
付記１９．    可変長データを復号するための命令を記憶する、非一過性のコンピュータ可読記憶媒体であって、プロセッサによって実行されたときに、前記プロセッサに、
各データのブロックが、複数の符号化可変長データを含む、１つ以上のデータのブロックを読み取らせ、
前記１つ以上のデータのブロックに関連する１つ以上の記述子を読み取らせ、
参照テーブルから前記１つ以上の記述子に関連する１つ以上のシャッフルシーケンスを識別させ、
前記１つ以上の識別されたシャッフルシーケンスを使用して、前記１つ以上のデータのブロックに１つ以上のシャッフル演算を行わせ、
前記シャッフルされた１つ以上のデータのブロックから、複数の復号された可変長データを判定させる、
命令を備える、非一過性のコンピュータ可読記憶媒体。
【０１７９】
付記２０．    前記１つ以上のシャッフル演算を行うことはさらに、標準形式で前記１つ以上のデータのブロックの１つ以上の部分を表すように、前記シャッフルされた１つ以上のデータのブロックにゼロの１つ以上のシーケンスを挿入することを含む、付記１９に記載の非一過性のコンピュータ可読記憶媒体。
【０１８０】
付記２１．    前記１つ以上のデータブロックは、複数の可変長整数を表す、付記１９に記載の非一過性のコンピュータ可読記憶媒体。
【０１８１】
付記２２．    前記シャッフルされた１つ以上のデータのブロックから複数の復号された可変長データを判定することはさらに、
前記シャッフルされた１つ以上のデータのブロックから部分結果を判定することを含み、前記部分結果と関連付けられる残りの部分は、別のデータのブロックから判定される、
付記１９に記載の非一過性のコンピュータ可読記憶媒体。
【０１８２】
付記２３．    前記１つ以上のシャッフル演算は、単一命令複数データ（ＳＩＭＤ）プロセッサ命令セットからの１つ以上の並列シャッフル命令を備える、付記１９に記載の非一過性のコンピュータ可読記憶媒体。
【０１８３】
付記２４．    前記１つ以上の記述子に関連する１つ以上のオフセットを識別することをさらに含み、前記１つ以上の記述子に関連する前記１つ以上のオフセットは、固定サイズを伴う入力オフセットと、可変サイズを伴う出力オフセットとを備える、付記１９に記載の非一過性のコンピュータ可読記憶媒体。
【０１８４】
付記２５．    前記１つ以上の記述子に関連する１つ以上のオフセットを識別することをさらに含み、前記１つ以上の記述子に関連する前記１つ以上のオフセットは、可変サイズを伴う入力オフセットを備える、付記１９に記載の非一過性のコンピュータ可読記憶媒体。
【０１８５】
付記２６．    検索エンジンポスティングリスト用のドキュメント識別番号を符号化するためのコンピュータ実装方法であって、
実行可能命令を用いて構成される、１つ以上のコンピュータシステムの制御の下で、
データ記憶のためのブロックサイズを判定することと、
前記検索エンジンポスティングリスト用の複数のドキュメント識別番号を受信することと、
隣接するドキュメント識別番号の間の差を判定することと、
各ドキュメント識別番号の差の符号化表現を判定することであって、前記ドキュメント識別番号の差の前記符号化表現は、可変長表現を使用する、判定することと、
前記ドキュメント識別番号の差の前記複数の符号化表現の逐次サブセットを識別することであって、前記逐次サブセットの各ドキュメント識別番号の差の前記符号化表現のそれぞれのサイズの合計は、データ記憶のための前記判定されたブロックサイズ以下である、識別することと、
１つ以上の記述子であって、ドキュメント識別番号の差の符号化表現の前記サブセットの中のドキュメント識別番号の差の符号化表現の数、および前記逐次サブセットの中のそれぞれのドキュメント識別番号の差のそれぞれの符号化表現のサイズに関する情報を提供する、記述子を生成することと、
前記１つ以上の記述子および前記ドキュメント識別の差の符号化表現の前記サブセットを記憶することであって、ドキュメント識別番号の差の符号化表現の前記逐次サブセットは、グループとして記憶され、前記１つ以上の記述子は、前記ドキュメント識別番号の差の符号化表現のグループと隣接して記憶される、記憶することと、
を含む、コンピュータ実装方法。
【０１８６】
付記２７．    前記１つ以上の記述子は、それぞれのサイズの１進表現を用いて、前記逐次サブセットのそれぞれのドキュメント識別番号の差の各符号化表現のサイズを表す、付記２６に記載の検索エンジンポスティングリストに対するドキュメント識別番号を符号化するためのコンピュータ実装方法
付記２８．    可変長表現を使用してデータを符号化するためのコンピュータ実装方法であって、
実行可能命令を用いて構成される、１つ以上のコンピュータシステムの制御の下で、
データ記憶のためのブロックサイズを判定することと、
複数のデータ項目を識別することと、
各データ項目の符号化表現を判定することであって、前記データ項目の前記符号化表現は、可変長表現を使用する、判定することと、
前記データ項目の前記複数の符号化表現の第１のサブセットを識別することであって、データ項目の前記複数の符号化表現の前記第１のサブセットからの前記データ項目の前記符号化表現のそれぞれのサイズの合計は、データ記憶のための前記判定されたブロックサイズ以下である、識別することと、
第１の記述子であって、前記データ項目の前記複数の符号化表現の前記第１のサブセットからの前記データ項目の前記符号化表現のそれぞれのサイズを表す、第１の記述子を生成することと、
前記データ項目の前記複数の符号化表現の前記第１のサブセットからの前記データ項目の前記符号化表現を、第１の記憶されたグループとして記憶することと、
前記第１の記述子を記憶することと、
を含む、方法。
【０１８７】
付記２９．    前記第１の記述子を記憶することは、前記第１の記憶されたグループと隣接して前記第１の記述子を記憶することを含む、付記２８に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【０１８８】
付記３０．    前記第１の記述子を記憶することは、前記第１の記憶されたグループと非隣接して前記第１の記述子を記憶することを含む、付記２８に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【０１８９】
付記３１．    前記第１の記述子を生成することは、１進形式で各データ項目のそれぞれの符号化表現のサイズを表すことを含む、付記２８に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【０１９０】
付記３２．    前記１進形式で各データ項目のそれぞれの符号化表現のサイズを表すことは、各データ項目の各符号化表現のそれぞれのサイズを、１を引いた１進サイズとして表し、それぞれのサイズの表現をゼロによって分離する、前記１進形式を生成することを含む、付記３１に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【０１９１】
付記３４．    前記第１の記述子を生成することは、前記第１のサブセットと前記データのブロックサイズとの間のサイズの差を表す、パディング情報を前記第１の記述子に挿入することを含む、付記３１に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【０１９２】
付記３４．    
前記データ項目の前記複数の符号化表現からそれぞれのデータ項目の付加的な符号化表現を識別することと、
前記第１の記憶されたグループの一部として、前記それぞれのデータ項目の前記付加的な符号化表現の少なくとも第１の部分を記憶することと、
第２の記憶されたグループの一部として、前記それぞれのデータ項目の前記付加的な符号化表現の少なくとも第２の部分を記憶することと、
をさらに含む、付記２８に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【０１９３】
付記３５．    第２の記述子であって、前記第２の記憶されたグループの一部として、それぞれのデータ項目の前記付加的な符号化表現の少なくとも前記第２の部分の長さを部分的に表す、第２の記述子を生成することをさらに含む、付記３４に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【０１９４】
付記３６．    前記データ項目は、デルタギャップである、付記２８に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【０１９５】
付記３７．    可変長表現を使用して、データを符号化するためのシステムであって、
プロセッサと、
メモリデバイスであって、前記プロセッサによって実行されたときに、前記システムに、
データ記憶のためのブロックサイズを判定させ、
複数のデータ項目を識別させ、
各データ項目の符号化表現を判定させ、前記データ項目の前記符号化表現は、可変長表現を使用し、
前記データ項目の前記複数の符号化表現の第１のサブセットを識別させ、データ項目の前記複数の符号化表現の前記第１のサブセットからの前記データ項目の前記符号化表現のそれぞれのサイズの合計は、データ記憶のための前記判定されたブロックサイズ以下であり、
第１の記述子であって、前記データ項目の前記複数の符号化表現の前記第１のサブセットの前記データ項目の前記符号化表現のそれぞれのサイズを表す、第１の記述子を生成させ、
前記データ項目の前記複数の符号化表現の前記第１のサブセットからの前記データ項目の前記符号化表現を、第１の記憶されたグループとして記憶させ、
前記第１の記述子を記憶させる、
命令を含む、メモリデバイスと、
を備える、システム。
【０１９６】
付記３８．    前記第１の記述子を記憶することは、前記第１の記憶されたグループと隣接して前記第１の記述子を記憶することを含む、付記３７に記載の可変長表現を使用してデータを符号化するためのシステム。
【０１９７】
付記３９．    前記第１の記述子を記憶することは、前記第１の記憶されたグループと非隣接して前記第１の記述子を記憶することを含む、付記３７に記載の可変長表現を使用してデータを符号化するためのシステム。
【０１９８】
付記４０．    前記第１の記述子を生成することは、１進形式で各データ項目のそれぞれの符号化表現のサイズを表すことを含む、付記３７に記載の可変長表現を使用してデータを符号化するためのシステム。
【０１９９】
付記４１．    前記１進形式で各データ項目のそれぞれの符号化表現のサイズを表すことは、それぞれのデータ項目の各符号化表現のそれぞれのサイズを、１を引いた１進サイズとして表し、それぞれのサイズの表現をゼロによって分離する、前記１進形式を生成することを含む、付記４０に記載の可変長表現を使用してデータを符号化するためのシステム。
【０２００】
付記４２．    前記第１の記述子を生成することは、前記第１のサブセットと前記データのブロックサイズとの間のサイズの差を表す、パディング情報を前記第１の記述子に挿入することを含む、付記３７に記載の可変長表現を使用してデータを符号化するためのシステム。
【０２０１】
付記４３．
前記データ項目の前記複数の符号化表現からそれぞれのデータ項目の付加的な符号化表現を識別することと、
前記第１の記憶されたグループの一部として、前記それぞれのデータ項目の前記付加的な符号化表現の少なくとも第１の部分を記憶することと、
第２の記憶されたグループの一部として、前記それぞれのデータ項目の前記付加的な符号化表現の少なくとも第２の部分を記憶することと、
をさらに含む、付記３７に記載の可変長表現を使用してデータを符号化するためのシステム。
【０２０２】
付記４４．    第２の記述子であって、前記第２の記憶されたグループの一部として、それぞれのデータ項目の前記付加的な符号化表現の少なくとも前記第２の部分の長さを部分的に表す、第２の記述子を生成することをさらに含む、付記４３に記載の可変長表現を使用してデータを符号化するためのシステム。
【０２０３】
付記４５．    可変長表現を使用してデータを符号化するための命令を記憶する、非一過性のコンピュータ可読記憶媒体であって、前記命令は、プロセッサによって実行されたときに、前記プロセッサに、
データ記憶のためのブロックサイズを判定させ、
複数の可変長データを識別させ、
各データ項目の符号化表現を判定させ、前記データ項目の前記符号化表現は、可変長表現を使用し、
前記データ項目の前記複数の符号化表現の第１のサブセットを識別させ、データ項目の前記複数の符号化表現の前記第１のサブセットからの前記データ項目の前記符号化表現のそれぞれのサイズの合計は、データ記憶のための前記判定されたブロックサイズ以下であり、
第１の記述子であって、前記データ項目の前記複数の符号化表現の前記第１のサブセットの前記データ項目の前記符号化表現のそれぞれのサイズを表す、第１の記述子を生成させ、
前記データ項目の前記複数の符号化表現の前記第１のサブセットからの前記データ項目の前記符号化表現を、第１の記憶されたグループとして記憶させ、
前記第１の記述子を記憶させる、
非一過性のコンピュータ可読記憶媒体
付記４６．    前記第１の記述子を記憶することは、前記第１の記憶されたグループと隣接して前記第１の記述子を記憶することを含む、付記４５に記載の非一過性のコンピュータ可読記憶媒体。
【０２０４】
付記４７．    前記第１の記述子を記憶することは、前記第１の記憶されたグループと非隣接して前記第１の記述子を記憶することを含む、付記４５に記載の非一過性のコンピュータ可読記憶媒体。
【０２０５】
付記４８．    前記第１の記述子を生成することは、１進形式で各データ項目のそれぞれの符号化表現のサイズを表すことを含む、付記４５に記載の非一過性のコンピュータ可読記憶媒体。
【０２０６】
付記４９．    前記１進形式で各データ項目のそれぞれの符号化表現のサイズを表すことは、各データ項目の各符号化表現のそれぞれのサイズを、１を引いた１進サイズとして表し、それぞれのサイズの表現をゼロによって分離する、前記１進形式を生成することを含む、付記４８に記載の非一過性のコンピュータ可読記憶媒体。
【０２０７】
付記５０．
前記データ項目の前記複数の符号化表現からそれぞれのデータ項目の付加的な符号化表現を識別することと、
前記第１の記憶されたグループの一部として、前記それぞれのデータ項目の前記付加的な符号化表現の少なくとも第１の部分を記憶することと、
第２の記憶されたグループの一部として、前記それぞれのデータ項目の前記付加的な符号化表現の少なくとも第２の部分を記憶することと、
をさらに含む、付記４５に記載の非一過性のコンピュータ可読記憶媒体。
【０２０８】
付記５１．    第２の記述子であって、前記第２の記憶されたグループの一部として、それぞれのデータ項目の前記付加的な符号化表現の少なくとも前記第２の部分の長さを部分的に表す、第２の記述子を生成することをさらに含む、付記５０に記載の非一過性のコンピュータ可読記憶媒体。
以下に、本願出願時の特許請求の範囲に記載された発明を付記する。
[１]可変長データを復号するためのシステムであって、
プロセッサと、
メモリデバイスであって、前記プロセッサによって実行されたときに、前記システムに、
各データのブロックが、複数の符号化可変長データを含む、１つ以上のデータのブロックを読み取らせ、
前記１つ以上のデータのブロックに関連する１つ以上の記述子を読み取らせ、
参照テーブルから前記１つ以上の記述子に関連する１つ以上のシャッフルシーケンスを識別させ、
前記１つ以上の識別されたシャッフルシーケンスを使用して、前記１つ以上のデータのブロックに１つ以上のシャッフル演算を行わせ、
前記シャッフルされた１つ以上のデータのブロックから、複数の復号された可変長データを判定させる、
命令を含む、メモリデバイスと、
を備える、システム。
[２]前記１つ以上のシャッフル演算を行うことはさらに、標準形式で前記１つ以上のデータのブロックの１つ以上の部分を表すように、前記シャッフルされた１つ以上のデータのブロックにゼロの１つ以上のシーケンスを挿入することを含む、前記[１]に記載の可変長データを復号するためのシステム。
[３]前記１つ以上のデータブロックは、複数の可変長整数を表す、前記[１]に記載の可変長データを復号するためのシステム。
[４]前記シャッフルされた１つ以上のデータのブロックから複数の復号された可変長データを判定することはさらに、
前記シャッフルされた１つ以上のデータのブロックから部分結果を判定することを含み、前記部分結果と関連付けられる残りの部分は、別のデータのブロックから判定される、
前記[１]に記載の可変長データを復号するためのシステム。
[５]前記１つ以上のシャッフル演算は、単一命令複数データ（ＳＩＭＤ）プロセッサ命令セットからの１つ以上の並列シャッフル命令を備える、前記[１]に記載の可変長データを復号するためのシステム。
[６]前記１つ以上の記述子に関連する１つ以上のオフセットを識別することをさらに含む、前記[１]に記載の可変長データを復号するためのシステム。
[７]前記１つ以上の記述子に関連する前記１つ以上のオフセットは、固定サイズを伴う入力オフセットと、可変サイズを伴う出力オフセットとを含む、前記[６]に記載の可変長データを復号するためのシステム。
[８]前記１つ以上のデータのブロックに関連する前記１つ以上のオフセットは、可変サイズを伴う入力オフセットを備える、前記[６]に記載の可変長データを復号するためのシステム。
[９]可変長表現を使用してデータを符号化するためのコンピュータ実装方法であって、
実行可能命令を用いて構成される、１つ以上のコンピュータシステムの制御の下で、
データ記憶のためのブロックサイズを判定することと、
複数のデータ項目を識別することと、
各データ項目の符号化表現を判定することであって、前記データ項目の前記符号化表現は、可変長表現を使用する、判定することと、
前記データ項目の前記複数の符号化表現の第１のサブセットを識別することであって、データ項目の前記複数の符号化表現の前記第１のサブセットからの前記データ項目の前記符号化表現のそれぞれのサイズの合計は、データ記憶のための前記判定されたブロックサイズ以下である、識別することと、
第１の記述子であって、前記データ項目の前記複数の符号化表現の前記第１のサブセットからの前記データ項目の前記符号化表現のそれぞれのサイズを表す、第１の記述子を生成することと、
前記データ項目の前記複数の符号化表現の前記第１のサブセットからの前記データ項目の前記符号化表現を、第１の記憶されたグループとして記憶することと、
前記第１の記述子を記憶することと、
を含む、方法。
[１０]前記第１の記述子を記憶することは、前記第１の記憶されたグループと隣接して前記第１の記述子を記憶することを含む、前記[９]に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
[１１]前記第１の記述子を記憶することは、前記第１の記憶されたグループと非隣接して前記第１の記述子を記憶することを含む、前記[９]に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
[１２]前記第１の記述子を生成することは、１進形式で各データ項目のそれぞれの符号化表現のサイズを表すことを含む、前記[９]に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
[１３]前記１進形式で各データ項目のそれぞれの符号化表現のサイズを表すことは、各データ項目の各符号化表現のそれぞれのサイズを、１を引いた１進サイズとして表し、前記それぞれのサイズの表現をゼロによって分離する、前記１進形式を生成することを含む、前記[１２]に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
[１４]前記第１の記述子を生成することは、前記第１のサブセットと前記データのブロックサイズとの間のサイズの差を表す、パディング情報を前記第１の記述子に挿入することを含む、前記[１２]に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
[１５]前記データ項目の前記複数の符号化表現からそれぞれのデータ項目の付加的な符号化表現を識別することと、
前記第１の記憶されたグループの一部として、前記それぞれのデータ項目の前記付加的な符号化表現の少なくとも第１の部分を記憶することと、
第２の記憶されたグループの一部として、前記それぞれのデータ項目の前記付加的な符号化表現の少なくとも第２の部分を記憶することと、
をさらに含む、前記[９]に記載の可変長表現を使用してデータを符号化するためのコンピュータ実装方法。
【図１】
0005770316.tif 000012
【図２Ａ】
0005770316.tif 000013
【図２Ｂ】
0005770316.tif 000014
【図３Ａ】
0005770316.tif 000015
【図３Ｂ】
0005770316.tif 000016
【図４Ａ】
0005770316.tif 000017
【図４Ｂ】
0005770316.tif 000018
【図５Ａ】
0005770316.tif 000019
【図５Ｂ】
0005770316.tif 000020
【図６Ａ】
0005770316.tif 000021
【図６Ｂ】
0005770316.tif 000022
【図６Ｃ】
0005770316.tif 000023
【図７Ａ】
0005770316.tif 000024
【図７Ｂ】
0005770316.tif 000025
【図７Ｃ】
0005770316.tif 000026
【図８】
0005770316.tif 000027
【図９】
0005770316.tif 000028
【図１０】
0005770316.tif 000029
【図１１】
0005770316.tif 000030
【図１２】
0005770316.tif 000031
【図１３】
0005770316.tif 000032
【図１４】
0005770316.tif 000033
【図１５】
0005770316.tif 000034
【図１６】
0005770316.tif 000035
【図１７】
0005770316.tif 000036
【図１８】
0005770316.tif 000037
【図１９】
0005770316.tif 000038
【図２０】
0005770316.tif 000039
【図２１】
0005770316.tif 000040
【図２２】
0005770316.tif 000041
【図２３】
0005770316.tif 000042