(58)【調査した分野】(Int.Cl.,DB名)
前記コントローラ(210)は、最上位位置(msp)に基づいて前記指数を見出すように更に構成され、前記最上位位置(msp)は、前記数(X)の表現において非ゼロである最初の要素の位置である、請求項1又は2に記載のコンピューティングデバイス(100)。
前記コントローラ(210)は、前記表現の前記基数の前記最上位位置(msp)乗の現在の基数根を計算することによって、前記最上位位置(msp)に基づいて前記指数を見出すように更に構成される、請求項5に記載のコンピューティングデバイス(100)。
前記コントローラ(210)は、前記数(X)を前記現在の基数の前記指数乗で除算することによって前記現在の基数に対する倍率を決定し、その後、前記倍率が掛けられた前記基数の前記指数乗だけ前記数(X)を低減させることによって残余数(Xres)を決定するように更に構成される、請求項1〜8のいずれか一項に記載のコンピューティングデバイス(100)。
前記コントローラ(210)は、前記数(X)から前記基数の前記指数乗を減算することによって前記数(X)を低減させるように更に構成される、請求項1〜9のいずれか一項に記載のコンピューティングデバイス(100)。
前記指数ベクトル(exp)の少なくとも2つの指数が、前記基数ベクトル(base)の同じ基数に対応する、請求項1〜10のいずれか一項に記載のコンピューティングデバイス(100)。
前記コントローラ(210)は、前記指数ベクトル(exp)を再順序付けすることによって前記ファイル(410)を暗号化するように更に構成される、請求項1〜12のいずれか一項に記載のコンピューティングデバイス。
メモリ(240)とコントローラ(210)とを備えるコンピューティングデバイス(100)であって、前記コントローラ(210)はファイル(410)を暗号化するように構成され、前記ファイルは、
前記ファイル(410)の少なくとも部分を数(X)に変換することと、
前記数(X)を、少なくとも1つの指数を含む指数ベクトル(exp)に変換することとによって圧縮され、各指数は基数ベクトル(base)の基数に対応し、それにより、前記ファイル(410)は前記指数ベクトル(exp)で表され、前記コントローラは、
前記基数ベクトルの最初の基数を現在の基数となるように設定し、
前記現在の基数の指数を見出し、
前記指数ベクトル(exp)に前記指数を含め、
前記基数の前記指数乗だけ前記数(X)を低減することによって残余数(Xres)を決定するように構成され、
前記現在の基数が前記基数ベクトル(base)の最後の基数でないならば、
前記現在の基数は前記基数ベクトル(base)の次の基数となるように設定され、
前記数(X)は前記残余数(Xres)となるように設定され、前記コントローラ(210)は新しい現在の基数の指数を見出し、
前記現在の基数が前記基数ベクトル(base)の最後の基数であるならば、
定数(K)が前記残余数(Xres)となるように設定され、前記指数ベクトル(exp)及び前記定数を含む表現が生成され、それにより、
前記ファイル(410)の前記少なくとも部分が前記数(X)に変換され、
前記コントローラは、前記指数ベクトル(exp)を再順序付け、それにより、前記ファイル(410)の前記表現を暗号化するように更に構成される、
コンピューティングデバイス(100)。
【発明を実施するための形態】
【0021】
開示された実施形態は、本発明の或る実施形態が示されている添付の図面を参照して、以下により十分に記載されるであろう。しかしながら、本発明は、多くの様々な形態で具現化されることができ、本明細書に記載されている実施形態に限定されるものと解釈すべきではなく、むしろ、これらの実施形態は、本開示が十分かつ完全となり、本発明の範囲を当業者に十分に伝えることができるように、例として提供される。同様の番号は全体を通して同様の要素を指す。
【0022】
図1は、本明細書の実施形態による計算デバイス100を示す。1つの実施形態では、計算デバイス100は無線又は有線のいずれかのネットワーク通信用に構成される。1つの実施形態では、計算デバイス100は無線及び有線の両方のネットワーク通信用に構成される。このような計算デバイス100の例は、少し挙げると、パーソナルコンピュータ、デスクトップ又はラップトップ、インターネットタブレット、携帯電話、スマートフォン、パーソナルデジタルアシスタント、サーバ、電子キー、マシン・ツー・マシンデバイス(M2M)、及びワークステーションである。
【0023】
計算デバイス100は、以下では、パーソナルコンピュータ100として例示され、説明されるであろう。パーソナルコンピュータ又は端末100はディスプレイ110及びハウジング120を備える。ハウジングは、コントローラ又はCPU(図示せず)並びに記憶ユニット及び内部メモリなどの1つ又は複数のコンピュータ可読記憶媒体(図示せず)を備える。記憶ユニットの例はディスクドライブ又はハードドライブである。端末100は少なくとも1つのデータポートを更に備える。データポートは有線及び/又は無線とすることができる。データポートの例は、USB(「ユニバーサルシリアルバス(Universal Serial Bus)」)ポート、イーサネットポート、又は(IEEE規格802.11に準拠する)WiFiポートである。データポートは、端末100を他の端末又はサーバに接続することを可能にするように構成される。
【0024】
端末100はキーボード130などの少なくとも1つの入力ユニットを更に備える。入力ユニットの他の例は、少し挙げると、コンピュータマウス、タッチパッド、タッチスクリーン、又はジョイスティックである。
【0025】
図2は、コンピューティングデバイスの一般的な構造の概略図を示す。コンピューティングデバイスは、
図1のような計算デバイス又はサーバとすることができる。1つの実施形態では、コンピューティングデバイスは、以下に更に詳細に説明されるであろうコンピューティング装置である。以下の説明では、コンピューティングデバイスは、
図1による端末であるとして開示されるであろう。端末100は、端末100の全体的な動作を担当するコントローラ210を備え、好ましくは、市販の任意のCPU(「中央処理ユニット(Central Processing Unit)」)、DSP(「デジタル信号プロセッサ(Digital Signal Processor)」)、又は任意の他の電子プログラマブルロジックデバイスによって実現される。コントローラ210は、例えば、汎用又は専用プロセッサ内の、そのようなプロセッサによって実行されるようにコンピュータ可読記憶媒体(ディスク、メモリなど)240上に格納されることができる実行可能なコンピュータプログラム命令を使用することによって、ハードウェア機能を可能にする命令を使用して実装されることができる。コンピューティングデバイス100はコンピュータファイルを記憶するメモリ240を備える。コンピュータファイルは当該技術分野において周知であり、本明細書では単にファイルと称されるであろう。コントローラ210は、メモリ240から命令を読み出し、端末100の動作を制御するためにこれらの命令を実行するように構成される。メモリ240は、ROM、RAM、SRAM、DRAM、CMOS、FLASH、DDR、EEPROMメモリ、フラッシュメモリ、ハードドライブ、光学ストレージ、又はそれらの任意の組み合わせなどのコンピュータ可読メモリ向けの任意の一般に知られている技術を使用して実現されることができる。
【0026】
メモリ240はコントローラ210によって様々な目的のために使用され、そのうちの1つは、端末100内の様々なソフトウェアモジュール用のアプリケーションデータ及びプログラム命令250を格納するためである。ソフトウェアモジュールは、リアルタイムオペレーティングシステム、マン・マシンインタフェース220用のドライバ、アプリケーションハンドラ、及び様々なアプリケーション250を含む。アプリケーション250は、電子メールなどのメッセージングアプリケーション、ブラウジングアプリケーション、バンキングアプリケーション、及び様々な他のアプリケーション250を含むことができる。
【0027】
端末100は、
図1の端末100においてディスプレイ110、キーパッド130から構成されるユーザインタフェース220を更に備えることができる。ディスプレイ110は、仮想キー(図示せず)を表示し操作することができるタッチディスプレイとすることができる。このような仮想キーは、物理キー130のいずれか又は全てを置き換えることができ、明示的に述べられていないならば、本明細書では相違はないとする。
【0028】
ユーザインタフェース(UI、user interface)220はまた、UIドライバと一緒に、ディスプレイ110、キーパッド130、及びサウンドシステム、LEDインジケータなどの様々な他のI/Oデバイスと連携する1つ又は複数のハードウェアコントローラを含む。一般的に知られているように、ユーザは、このように形成されたマン・マシンインタフェースを介して端末100を操作することができる。
【0029】
端末100は、端末が他のデバイスと通信することを可能にする通信インタフェース230を更に備えることができる。通信インタフェースは、様々な無線周波数技術を使用して通信するように適合されている無線周波数インタフェースとすることができる。そのような技術の例は、少し挙げると、WIFI、Bluetooth(登録商標)、W−CDMA、GSM、UTRAN、LTE、及びNMTである。
【0030】
通信は、更に又は代替的に、端末が様々なネットワーク技術の使用を介して他のデバイスと通信することを可能にするように適合されている有線インタフェース230とすることができる。そのような技術の例は、少し挙げると、USB、イーサネット、ローカルエリアネットワーク、及びTCP/IP(Transport Control Protocol/Internet Protocol、伝送制御プロトコル/インターネットプロトコル)である。
【0031】
このように、コンピューティングデバイス100は通信インタフェース230を介してファイルを受信及び/又は転送するように構成される。
【0032】
図3は、上記で説明されているようなコンピュータ可読媒体の概略図を示す。コンピュータ可読媒体30はこの実施形態ではデータディスク30である。1つの実施形態では、データディスク30は磁気データ記憶ディスクである。データディスク30は、プロセッサなどのコントローラにロードされると、上で開示された実施形態による方法又は手順を実行する命令31を収容するように構成される。データディスク30は、命令をコントローラにロードするために、読取りデバイス32に接続され又は読取りデバイス32内に存在し、且つ読取りデバイス32によって読み出されるように用意される。1つ(又は幾つか)のデータディスク(群)30と併用した読取りデバイス32の1つのこのような例はハードドライブである。コンピュータ可読媒体は、コンパクトディスク、デジタルビデオディスク、フラッシュメモリ、又は一般に使用される他のメモリ技術などの他の媒体とすることもできることに留意されるべきである。そのような実施形態では、データディスク30は有形のコンピュータ可読媒体30の1つのタイプである。
【0033】
命令31は、命令31をコントローラにロードするためにコンピュータデータ読取りデバイス34に無線(又は有線)インタフェースを介して(例えばインターネットを介して)送信されるコンピュータ可読信号33内に命令31を含むことによって、コンピュータ可読媒体上のコンピュータコード化されたデータを読取ることができるコンピュータ又は他のデバイスなどのコンピュータデータ読取りデバイス34にダウンロードされることもできる。そのような実施形態では、コンピュータ可読信号33は、無形のコンピュータ可読媒体30の1つのタイプである。
【0034】
命令は、コンピュータ34のメモリ(
図3では明示的に示されていないが、
図2では240として参照される)に格納されることができる。
【0035】
コンピュータプログラム、命令、コードなどへの言及は、プログラム可能なプロセッサ用のソフトウェア、あるいは、例えば、プロセッサ用の命令であろうと又は固定機能デバイス、ゲートアレイ、もしくはプログラマブルロジックデバイスなどの構成設定であろうと、ハードウェアデバイスのプログラム可能なコンテンツのようなファームウェアを包含するように、理解されるべきである。
【0036】
図4は、少なくとも1つのコンピューティングデバイス100を含む、又は少なくとも1つのコンピューティングデバイス100内で実行される、本明細書の教示の実施形態による圧縮/解凍システム400の概要を示す。コンピューティングデバイス100のコントローラ210はファイル410を受信するように構成される。ファイル410は通信インタフェース230を介して又はメモリ240から受信されることができる。
【0037】
コンピューティングデバイス100のコントローラ210は、圧縮されたファイル410の格納又は送信を改善するようにファイル410を圧縮するためにファイル410を処理するように構成される。これは、記憶スペース及び/又は帯域幅を節約するという点で技術的利点を有する。
【0038】
1つの実施形態では、コントローラは、ファイル410をより小さい部分に裂き又は分割する手段415を採用し、各部分を個別に圧縮するように構成される。以下では、部分又は完全なファイルを処理することの間に相違はないこととする。ファイルの部分が個別に圧縮される実施形態では、対応するコントローラは、部分を個別に処理し、圧縮された部分の解凍によって生じるファイル部分を連結又は、そうでなれれば結合するように構成されるであろう。より小さな部分に分割する1つの利点は、計算が各部分に対して高速であることである。150バイトのファイル部分の例は、各部分に対して4.7%の圧縮率をもたらし、基数{2、3、5、7}のみを使用して4.7%の全体的圧縮という結果をもたらした。
【0039】
コントローラ210は、ファイル410を数Xに変換する手段420を採用することによって、ファイル410(又はその部分)を圧縮するように構成される。1つの実施形態では、コントローラは、ファイル410を10進数、すなわち基数10を有する数に変換するように構成される。1つの実施形態では、コントローラは、ファイル410を16進数、すなわち基数16を有する数に変換するように構成される。1つの実施形態では、コントローラは、ファイル410を2進数、すなわち、基数2を有する数に変換するように構成される。そのような実施形態では、実際の変換は、ファイルを、数学的演算を実行するのにより適したフォーマットに単純に変換することによって表されることができる。1つのこのような実施形態では、変換されるフォーマットは文字列ベクトルである。
【0040】
次に、コントローラ210は、数Xを指数ベクトルexpに変換する手段430を用いる。コントローラ210は、基数ベクトルbaseの指数を決定することによって数Xを指数ベクトルexpに変換するように構成され、数Xは、基数ベクトルbaseの各要素の指数ベクトルexpの対応する要素乗によって表されることができる。基数を慎重に選択することによって、数Xは、その数がその自然の形で表現される場合よりもはるかに短い形で表現されることができる。
【0041】
説明するための簡単な例、10進数256(256
10)に対応するファイル[1000000]は、対応する基数16の指数2で表される。従って、送信又は格納される必要があるのは、[10]=2
10(10進数2)が全てであり、25%の圧縮率が既に達成された。
【0042】
次に、コントローラ210は、同じ又は別のコンピューティングデバイスによる後の検索のために指数ベクトルを格納又は送信することができる。以下では、格納はメモリ240への送信によって表されることとし、メモリ240に格納することと通信インタフェース230を介して送信することとの間に相違はないこととする。
【0043】
同じ又は別のコンピューティングデバイスのコントローラ210は、メモリ240から又は通信インタフェース230を介してのいずれかで指数ベクトルexpを受信し、指数ベクトルexpを、指数ベクトルexpを数に変換する手段440を採用して、数に変換するように構成される。その後、コントローラ210は、数X
rをファイルに変換する手段450を採用し、それによりファイル410を解凍する。ファイル410の部分が圧縮されている実施形態では、コントローラはその部分を解凍し、次いで、その結果として得られるファイルの部分を完結したファイルに連結又は他の方法で結合する。特に、部分に対応する指数ベクトルexpが順不同で受信される場合、コントローラ210は順序を決定し、その部分を正しい順序で結合するように構成される。順序は、その部分を表す数に対して指数ベクトルexpの一部である連続又は順序番号によって示されることができる。
【0044】
コントローラ210は、メモリから(又は通信インタフェースを介して)基数ベクトルbaseを検索するように構成され、ファイルを圧縮するコントローラ及びファイルを解凍するコントローラ(同じコントローラである可能性がある)の両方が同じ基数ベクトルbaseへのアクセスを有する場合、その数は、単純に基数ベクトルbaseの要素の指数ベクトルexpの要素乗及び部分的な結果の結合によって、容易に再構築されることができる。
【0045】
図5Aは指数ベクトルexpの表現500の概略図を示す。指数ベクトルexpの各要素は表現500の(ビット)フィールドによって表される。
図5Aの例では、指数ベクトルexpは、順序数(ordering number)n、スケーリング数(scaling number)N、指数a、b、cなど、及び定数Kを含む。
【0046】
順序数n、スケーリング数N、及び/又は定数Kは任意選択的であることに留意されるべきである。指数ベクトルexpの必須要素は、基数指数a、b、cなどである。
【0047】
1つの実施形態では、指数ベクトルexpは、1つ又は幾つかの基数に対して複数の指数を含むこともできる。例えば、指数ベクトルexpは、基数{A、B、C}を含む基数ベクトルbaseに対して{n、N、a
1、a
2、b、c
1、c
2、K}とすることができる。
【0048】
1つの実施形態では、指数ベクトルexpは、基数ベクトルの各基数に対して定数c
iを含むこともできる。これらの定数c
iはスケーリング定数である。
【0049】
図5Bは対応する基数ベクトルbaseを示す。
図5Bの例では、基数ベクトルは基数A、B、Cなどを含む。
【0050】
ファイル数は、基数ベクトルbaseの基数の指数ベクトルexpの指数乗を加算、乗算、又はそれらの組み合わせによって結合することにより、再現されることができる。
【0051】
数を再現する1つの一般的な式は、
【数1】
ここで、
【数2】
は乗算や加算などの結合演算を表す。
【0052】
上で述べたように、各基数は複数の対応する指数を有することができる。このような場合、数Xのより一般的な式は、
【数3】
ここで、aiは基数Aの指数(群)であり、biは基数Bの指数(群)であり、ciは基数Cの指数(群)である。代替的に、基数ベクトルbaseは重複した基数を含むことができ、それによって、最初の式が適用されることができる。同様のことは、以下に示す式に対しても当てはまる。
【0053】
必要な計算の数を低減し、指数のサイズを低減し、圧縮の解像度(resolution)を向上させるために、倍率(scaling factor)を使用することができる。
【0054】
各基数−指数対もスケーリングされる実施形態では、一般化された式は以下のようになる。
【数4】
ここで、c
iは倍率である。
【0055】
代替的に、各基数の合計はスケーリングされ(これは同じ基数に対する全ての倍率は同じである、c
i=c
j、ことに対応する)、一般化された式は次のようになる。
【数5】
ここで、c
aは基数Aに対する倍率である。
【0056】
スケーリングの組み合わせに対して、式は次のようになる。
【数6】
【0057】
式は再帰的な要素又は反復される要素を有する可能性があることも留意すべきである。これを説明するために、以下の表記が選択される。
【数7】
【0058】
ここで、Nj及びKjは各繰り返しに対する乗数及び定数であり、Nt及びKtは合計式に対する乗数及び定数である。上記に指摘したように、全ての倍率、乗数、及び/又は定数並びに基数は、明示的に式の一部である必要はない。
【0059】
定数Kは、数が奇数であることを示し、それにより、処理を、偶数のみを低減するように低減するために使用されることができ、これは、その後、低減する前にその数が実際に奇数又は偶数であったかどうかを示すためにビットを伴うであろう(その後、奇数は低減される前に−1で減算され、再構築時に+1が加算されるであろう)。従って、定数Kは、複数の部分、すなわち、奇数/偶数を表す1つの部分及び可能な剰余を示す1つの部分を有する可能性がある。上記の表記によって示されるように、式の各繰り返しに対して1つの(1組の)定数(群)が存在する可能性がある。
【0060】
結合演算
【数8】
は、通常括弧で示すようなセグメント化された計算又は部分的な計算を示すために使用されることもできる。もちろん、これは複数回出現する幾つかの基数によって表わされることもできる。例えば(この例から除外された定数、倍率、乗数、ただし、上の表記で示されているように、それらを含めることもできることが留意されるべきである)
A
a(B
b+C
c)は、A
a*B
b+A
a*C
cとして表されることも可能である。
【0061】
これが幾つかのステップで繰り返される場合、表記は
ΣAj
aj(Bj
bj+Cj
cj)=A1
a1(B1
b1+C1
c1)+A2
a2(B2
b2+C2
c2)…
となる可能性があり、これは、
ΣAj
aj*Bj
bj+Aj
aj*Cj
cj=A1
a1B1
b1+A1
a1C1
c1+A2
a2B2
b2+A2
a2C2
c2…
として表されることも可能である。
【0062】
上記の式が3つの基数のみを有していても、任意の数の基数が可能であることが留意されるべきである。低い数の基数がより短い指数ベクトルをもたらすので、基数の数は、より高い圧縮比を可能にするために、低く、例えば10未満又は5未満に保たれることができる。
【0063】
負の定数を避けるために、指数が0である基数は無視されることができ、従って、基数が互いに加算される場合、すなわち、
【数9】
の場合、合計に寄与しない。代替的に、指数は決定された指数よりも大きい指数として格納され、その後、基数は指数−1乗される。
【0064】
基数ベクトル用に選択される基数は、設計上の問題に依存し、圧縮されるファイルのサイズ、圧縮の比率、及び圧縮の速度に応じて選択されることができる。例えば、大きな基数は、より短い指数ベクトル及びより速い圧縮を提供するが、そのような良好な解像度を提供せず、大きな定数及び場合により順序数を必要とする。大きな基数はまた、より短い指数をもたらす。より低い基数はより高い解像度を提供するが、より遅い圧縮を提供する可能性がある。
【0065】
1つの実施形態では、大きな基数が数Xをより速く低減するので、基数は、解像度及びより速い圧縮を提供するように間隔を空けられる。
【0066】
基数は指数的に、
A=10(=10
1)、B=100(=10
2)、C=1000(=10
3)
A=10、B=100(=A
2)、C=10000(=B
2)
又は、線形に大きくなることができる。
A=10、B=20、C=30
A=2、B=3、C=5
【0067】
基数が素数の場合、それらは除算ループが起きることを回避する。このような基数ベクトルの例は、{2、3、5、7}(線形)及び{2、31、127、1027}(指数的)である。
【0068】
基数の1つが数の書式(例えば、基数が2進数に対して2、10進数に対して10など)の基数と等しく、その基数が乗算によって結合される場合、表現の末尾の0の数を単純に数えることによって、それによって除算演算を回避して、最大ではないかもしれないが少なくとも部分的な、指数を見出すのは簡単である。
【0069】
1つの実施形態では、各基数(又は少なくとも1つの基数)の指数は、その基数に対してスケーリング定数を伴うことができる。これは、特に、大きな数X(又は低減されている場合、数Xの大きな残余)に対して、数Xのより高速な圧縮/低減を可能にする。例えば、数A=10、B=100を使用して数220を低減することになっている場合、その数は、表記X=c
aA
a+c
bB
b及びexp={c
a;a;c
b;b}を使用して、11011100より短い2;1;2;1又は2進数10;1;10;1すなわち101101で表すことができる。同じ数が、倍率なしで、すなわちX=A
a+B
b+K及びexp={a;b;K}を使用して、表現されるならば、数220は{1;1;11011110}と表されるであろう。代替的に、一般的なスケーリング、すなわち、{10;1;1}となるであろう表記X=N(A
a+B
b)+K及びexp={N;a;b;K}、が使用される可能性がある。見られるように、倍率の使用は、指数ベクトルのサイズ、又は少なくとも指数ベクトルの要素を大幅に低減することができる。倍率を使用することの利点は、指数のみの使用は、指数の増加が大きすぎる変化をもたらす可能性があるが、一方で単純なスケーリングは数を迅速に低減でき且つ倍率は基数より常に小さい(又はそれらは必要とされない可能性がある)ので、それらは多くのスペースを必要とせず、従って指数ベクトルの大きさに多くを加えないことをもたらす、という事実に由来する。
【0070】
同じ基数に対して複数の指数を使用することは、その数又はその数の残余が最高の又は次の基数よりもはるかに大きい場合に有益となる。それで、所与の基数に対してその数内に複数の基数−指数対を適合させることが可能である。
【0071】
図6は、数を、基数ベクトルbase={A、B、…、D}に基づいて指数ベクトルexp={c
a、a、c
b、b、…、c
d、d}に低減する一般的な方法のフローチャートを示す。数は、変換されたファイル(又は部分ファイル)の結果とすることができる。倍率は個別的に又は全体的に任意選択的であることが留意されるべきである。また、
図6の例で使用されている表記では表現されていないが、少なくとも1つの基数の複数の指数(及び倍率)の使用も可能であり、代替として開示されることになることに留意されたい。
【0072】
方法は数Xを受信する610ことから始まる。次に、基数の指数が見出される620。1つの例では、(次の)最高の指数が見出される。1つの例では、指数が(次の)最大の基数に対して見出される。1つの例では、最大の基数の最高の指数が見出される。
図6の表記例では、基数Dの最高dが見出される。指数dは数Xを基数Dで繰り返し除算することによって見出されることができる。指数dは代わりにテーブルルックアップによって見出されることができる。指数dは、数Xの最上位位置(msp、most significant position)を見出すことによって代替的に見出されることができる。この選択肢は、以下の
図7及び8を参照して詳細に説明されるであろう。
【0073】
最高の指数dが見出されたので、倍率は、(それが使用される場合)、数Xを最高の基数Dのd乗で除算し、その結果を切り捨てることにより決定されることができる630。使用されている表記では、c
d=Trunc(X/D
d)。
【0074】
その後、残余数X
resは、数から倍率を掛けた基数の指数乗を減算することによって、すなわちX
res=X−c
dD
dで見出される640。又は、データ論理表記では、X
res=Modula(X/D
d)。基数が乗算によって結合されることになっている実施形態では、残余数は除算によって決定される。両方の場合において、残余数は、基数の指数乗によって数を低減することで決定される。
【0075】
任意選択的に、複数の指数が現在処理中の基数に対して見出されることになっている場合、方法は、残余数X
resを数Xとして使用して、すなわちX=X
resに設定して645、基数の最高の指数を見出すことに戻る。
【0076】
その後、指数を見出すべき基数ベクトルbaseに更に基数が存在するかどうかが判定される650。そうであるならば、次のより低い基数を使用して残余数を低減することすなわちX=X
res及びbase=base
k−1に設定する660、に進む。ここで、kは、基数ベクトルが昇順で順序付けられていると仮定して現在の基数のインデックスである。これは、指数ベクトルexpの(他の)指数c、b、a…を提供する。基数がもはや存在しないならば、残余数は残り又は定数Kであり、すなわちK=X
resに設定され670、指数ベクトルexpは完了し680、数Xに解凍して戻されその後の検索のために格納又は送信されることができる。
【0077】
指数ベクトルを数Xに解凍する690ために、単純に指数ベクトルexpを圧縮に使用される式に挿入する。この式は、上記で与えられた任意の種類の式とすることができる。
【0078】
上記に開示されているように、基数の最高の指数は、数Xに対して最上位位置を見出すことによって見出されることができる。
図7は、最上位位置mspがマークされている数Xの表現を示す。2進数Xに対しては、最上位位置は最上位の1のビットである。
図7の例では、数X=109が8ビットで示され、mspは位置2である。
図7の例では、最上位位置の番号付けは最下位位置から最上位に行くが、番号付け自体は重要ではない可能性があることが留意されるべきである。1つの実施形態では、それはテーブルルックアップに対してのみ使用される。1つの実施形態では、しかしながら、それは、指数をmspに基づいて計算することによって指数を決定するために使用される。
【0079】
図8は、最上位位置を見出すことによってどのように最高の指数を決定するかの一般的な方法のフローチャートを示す。
【0080】
mspを見出すために、コンピューティングデバイスのコントローラは、最初の非ゼロ要素を見出すために数Xの表現を単純に検索することができる810。数Xは任意の数ではなく、ファイル(の部分)を表しているので、その数が全て0からなる又は多数の0で始まっているであろう可能性は非常に少なく、従って、mspの検索は、ほんのわずかな比較を必要とし、かなり高速となるであろう。
【0081】
その後、最高の指数が見出される820。指数はテーブルルックアップを介して見出されることができる。そのようなテーブルの一例を、2進数X(=109)及び基数(=7)に対しての
図7の例について以下に示す。
【0083】
代替的に、最高の指数は、基数ベクトルbaseの現在の基数、数Xの数の基数(2進数、10進数、16進数、…)、及びmspに基づいて計算することによって、見出されることができる。
【0084】
基数B、指数e、及び数の基数Dに対して、最高の指数は次のように決定されることができる。
【数10】
【0085】
代替的に、指数e又は少なくとも指数eに近い指数は、低減するために使用する基数(すなわち、基数ベクトルbaseの要素(群))が既知であり、数表現の基数も既知であり、それによって基数Bの数の基数D根が予め決定されることができるので、より高速な方法で決定されることができる。それで、指数eは次のように決定されることができる。
【数11】
又は代替的に、
【数12】
ここで、
【数13】
又は
【数14】
はより高速な計算のために予め決定されることができる。
【0086】
指数が0であることが見出される830場合、次のより低い基数が選択され、指数は、上のようにテーブルルックアップ又は計算のいずれかによってより低い基数に基づいて決定される。従って、大きい数、すなわち大きなファイルに対して、指数−mspテーブルを、指数がゼロである全ての要素を除外することによって、それに応じて短くすることができる。その結果、
図7の例の表は次のようになる。
【0088】
代替的に、テーブルは指数だけでなく、対応する基数も含むことができる。そのような場合、指数がゼロであるかどうかの決定は、定数Kが、もはやより低い基数が存在しない場合と同じ場合の数であるという結果をもたらす。
図7及び
図8の例では、各基数に対して1つの指数のみが決定されると仮定されているが、同じ方法論が1つ又は複数の基数に対して複数の指数に使用されることができる。一般化するために、複数の指数を使用することは、重複した基数を有する基数ベクトルを有すると見なされることができる。これは、上記の及び
図6を参照した開示に対して当てはまる。
【0089】
図8に関して、このように、まだ基数が存在するか否かの判定835が、指数がゼロであるかどうかの判定830に続く。まだ他に基数が存在するならば、方法は次の基数に進む。基数がもはや存在しないならば、定数Kは数Xに等しく設定され850、指数系列は終了する。
【0090】
指数が0ではないと判定される場合、指数が見出され、方法は、指数を見出した620後に
図6のように進む。
【0091】
基数が数の基数で均等に分割可能であるならば、基数の指数乗(D
d)は一連のシフトによって計算され、時間のかかる乗算動作は必要ではない。
【0092】
このように、ファイルを数(又は各々がファイルの部分に対応する一連の部分数)に変換し、式及び基数ベクトルbaseを用いてその数を指数ベクトルexpに低減することによって、ファイルが圧縮されることができる方法が、上に開示されている。その結果、ファイルは、格納又は送信のために指数ベクトルによって単独で表されることができる。ファイルを解凍するために、必要なものは、基数ベクトルの基数に関する知識並びに任意の倍率及びそれらが適用される方法に関する知識だけである。
【0093】
基数、指数の順序、倍率が適用されるべきか否か、などを知らずにファイルを解凍することは不可能であるので、本明細書の方法を使用してファイルを暗号化することも可能であることは当然明らかである。
【0094】
知られているように、公開暗号化スキームは、暗号化に使用される式が公に開示されている業界で好まれている。これは、より広範な普及につながる可能性があるので、本明細書に提示される圧縮スキームにも有益であろう。しかしながら、指数ベクトルの要素を送信する順序について秘密裏に別の当事者と単に合意するのみで、ファイルは圧縮されるだけでなく暗号化されることができる。特に、ファイルがより小さな部分に分割されることができる大きなファイルの場合、解凍結果がファイル全体の一部のみを提供し、解凍の正しさをチェックすることを困難にするであろうから、指数の再順序付けされた結合が正しい解凍につながったかどうかを解読することは殆ど不可能である。
【0095】
より小さな部分に分割する利点の1つは、各部分に対する計算が高速であることである。150バイトのファイル部分の例は、各部分に対して4.7%の圧縮率をもたらし、基数ベクトル{N、2、3、5、7、K}のみを使用して4.7%の全体的圧縮に至った。
【0096】
図9は、本明細書の教示によるファイルを暗号化及び復号する方法のフローチャートを示す。ファイルは、上記のように圧縮され910、指数ベクトルexpをもたらす。
【0097】
指数ベクトルexpは、再順序付けされ920、それにより圧縮を効果的に暗号化し、その後格納又は送信される930。
【0098】
代替的に、破線920のボックスによって示されているように、指数ベクトルは再順序付けされない。そのような実施形態では、基数及びその順序は秘密に保たれる。
【0099】
ファイルを解凍する950前に、指数ベクトルexpは、実際に指数ベクトルexpを再順序付けするか又は対応する式を適用するかのいずれかによって、使用される式に適合するように再び順序付けされることができる940。
【0100】
本明細書の開示が指数ベクトルを再順序付ける傾向があるとしても、同じ教示が、基数ベクトルbaseを再順序付けすること、すなわち、圧縮器又は解凍器のいずれかによって異なる式を使用すること、これは実際には指数ベクトルの再順序付けに対応する、に適用されることができることに留意すべきである。
【0101】
圧縮自体が対応するファイルを暗号化するのにも役立つので、指数及び/又は基数ベクトルが順序に関して秘密に保たれているか且つ/又は維持されているかにかかわらず、暗号化が行われることが留意されるべきである。
【0102】
1つの実施形態、特にファイルが幾つかの部分に分割されている実施形態では、基数ベクトルbaseも送信又は格納されることができる。次に、指数が対応する基数と対になることができるように、指数ベクトルexp及び基数ベクトルbaseのフォーマットを仮定することによって、一般式がファイルを解凍するために使用されることができる。このような一般的なフォーマットの1つの例は、指数ベクトルexpの各要素が、同じ順序で基数ベクトルbaseの基数に対応することである。別の例は、指数ベクトルexpの各要素対が、同じ順序で基数ベクトルbaseの基数に対応する倍率及び指数を構成することである。
【0103】
そのような実施形態では、基数ベクトル及び指数ベクトルは、更なる可能な暗号化を提供するために、再順序付けられることができる。また、指数ベクトル(及び場合により基数ベクトル)は、ファイル部分ごとに異なる順序で順序付けられることができる。再順序付けは、式に基づく又はテーブルに従うとすることができる。1MBの例示的なファイル、150バイトのファイル部分(400桁の10進数に対応)、及び4つの基数を有し、倍率を使用する基数ベクトルに対して、ファイル部分ごとに、4!*8!=967680の可能性が存在し、967680*6991[=1MB/150バイト]=6,765,050,880の可能性をもたらす。不規則な順序でファイル部分を送信することと組み合わせると、可能性の数は更により大きくなる。
【0104】
ファイルを復号するために、指数ベクトルは元の順序に再順序付けされるか又は復号は再順序付けされた基数ベクトルに基づくとすることができる。代替的又は追加的に、順序及び/又は基数は秘密に保たれる。
【0105】
基数ベクトルbaseが圧縮ファイルの一部として格納又は送信される実施形態では、基数はmspに基づいて動的に選択されることができる。例えば、多くの先行ゼロ(低いmsp)が存在する場合、より小さい基数が選択され、一方mspが高い場合、より高い基数が選択される。これは、やや低いがより高速の圧縮及び適合した解像度をもたらす。
【0106】
本明細書の教示が送信されるべき指数ベクトルexp(スカラー及び/又は定数を含む可能性がある)をもたらすので、本発明者は、ファイルによって表される指数ベクトルそれ自体も(更に)圧縮又は暗号化されることができることを認識した。
【0107】
従って、1つの実施形態では、方法及びその方法を組み込むデバイスは、所望の圧縮率が達成されるまで、指数ベクトルexp(スカラー及び/又は定数を含む可能性がある)を圧縮(及び/又は暗号化)し続けるように構成される。
【0108】
図10は、コンピューティングデバイスによって実行される可能性があるこのような方法のフローチャートを示す。ファイルは受信され、数Xに(上記で論じたように、場合により部分的に)変換され1010、数Xは指数ベクトルE(スカラー及び/又は定数を含む可能性がある)に圧縮される。指数ベクトルEは、元のファイル(又はその一部)と比較されるファイル(構造)によって表される。圧縮率(ファイル(部分)のサイズで除算された指数ベクトルのサイズとして定義される)1030が閾値レベル、例えば5%、10%、15%、20%より低くない又は0〜25%の範囲内でない場合、指数ベクトルEは圧縮されて新しい指数ベクトルE’となる数X’に変換される。元のファイル(部分)と比較されて新しい指数ベクトルE’の圧縮率が決定され1020、それが閾値を超えている1030場合、この手順は、所望の圧縮比が達成されるまで繰り返される。
【0109】
これは、決定されるべき部分サイズと計算複雑さ対計算速度との間の交換が行われることを可能にする。
【0110】
例えば、指数ベクトルを見出す計算の複雑度は、より大きなファイル部分に対して増加するが、より小さい部分の圧縮率は、より大きい部分の圧縮率よりも高い。連続的に圧縮することによって、部分サイズと計算速度との間のトレードオフが達成されることができる。これは、計算の複雑さが部分サイズと非線形に増加するが、圧縮を反復することは線形複雑度に基づく。
【0111】
図11は、どのように、ファイル(部分)Xのサイズが繰り返し圧縮されるかの概略図を示す。各圧縮はそれ自体67%の圧縮比をもたらし、それによって、得られる指数ベクトルはそれぞれ67%、44%、30%及び20%に圧縮される。
【0112】
ファイルを解凍するために、解凍ビットが各圧縮の前に追加される1015。解凍ビットは、更なる解凍が実行されるべきかどうかを示す(1は更なる解凍を示し、0は解凍が終了したことを示す)。ファイルが解凍されることになっている場合、指数ベクトル(スカラー及び/又は定数を含む可能性がある)が受信され1210、解凍される1220。解凍ビットがチェックされ1230、それが更なる解凍を示す(ビット=1)場合、解凍が繰り返される。解凍ビットがそれ以上の解凍を示さない場合(BIT=0)、解凍は完了している。
【0113】
本発明は、主に少数の実施形態を参照して上に記述されている。しかしながら、当業者には容易に理解されるように、添付の特許請求の範囲によって規定されるように、上に開示されているもの以外の他の実施形態も本発明の範囲内において同様に可能である。