"フラッシュメモリ等の2進非対称チャネルに追従するメモリ上に書き込まれたビットシーケンスを復号するための方法であって、前記ビットシーケンスが低密度パリティチェックコードすなわちLDPCにより符号化されており、これによって前記シーケンスの各ビットが前記LDPCコードにより規定された対応するパリティチェックを有し、この方法が、-第1の状態S1および第2の状態S2を含むビット状態セット10と、条件セット20と、を提供することであって、条件が満足された場合にビット状態が変更されることになり、前記条件セットが、ビット状態を前記第1の状態から前記第2の状態へと変更するための第1の条件C1と、ビット状態を前記第2の状態から前記第1の状態へと変更するための第2の条件C2と、を含み、前記第1の条件と前記第2の条件とは異なっている、ことと、-前記ビットシーケンスの各ビットの値を読み取り、読み取った前記値に従って各ビットを前記セットの各状態に関連付けることS100と、-前記ビットシーケンスのターゲットビット30について、条件を評価することS200であって、前記条件は、前記ターゲットビットの状態に従って前記条件セットから選択され、前記条件を評価することは、前記ターゲットビットに対応した前記パリティチェックの計算結果を用いる、ことと、-前記条件が満足されたことを判定することS300と、-前記条件が満足されたことの結果として前記ターゲットビットの前記状態を変更することS400と、-前記ターゲットビットの前記状態に従って前記ターゲットビットの前記値を設定することS500と、を含む、方法。前記評価するステップを繰り返しS600、前記ターゲットビットが、前記評価するステップの各繰り返しにおいて前記シーケンスの異なるビットである、請求項1に記載の方法。前記パリティチェックの前記計算の結果によって全てのパリティチェックが満足されたことが示されるか、または最大繰り返し数に達するまで、前記評価するステップを繰り返す、請求項2に記載の方法。-前記ビット状態セットが前記第1の状態および前記第2の状態から成り、-前記条件セットが前記第1の状態および前記第2の状態から成り、-各ビットを関連付ける前記ステップにおいて、ビットを、前記ビットの値が0と読み取られた場合は前記第1の状態に、前記ビットの値が1と読み取られた場合は前記第2の状態に関連付け、-前記ターゲットビットの前記値を設定する前記ステップにおいて、前記ターゲットビットの前記値を、前記ターゲットビットが前記第1の状態に関連付けられている場合は0に、前記ターゲットビットが前記第2の状態に関連付けられている場合は1に設定する、請求項1から3のいずれかに記載の方法。前記ターゲットビットに対応した前記パリティチェックの過半数が満足されない場合はいつでも前記第1の条件が満足され、前記ターゲットビットに対応した全ての前記パリティチェックが満足されない場合はいつでも前記第2の条件が満足される、請求項4に記載の方法。満足されない前記ターゲットビットに対応したパリティチェックの数が第1の閾値よりも大きい場合はいつでも前記第1の条件が満足され、満足されない前記ターゲットビットに対応したパリティチェックの数が第2の閾値よりも大きい場合はいつでも前記第2の条件が満足され、前記第1の閾値と前記第2の閾値とは異なっている、請求項4に記載の方法。-前記ビット状態セットが第3の状態S3および第4の状態S4を更に含み、-前記条件セットが条件対の第1のサブセットを含み、対の一方の条件が、ビット状態をi番目の状態からj番目の状態へと変更するための条件であり、前記対の他方の条件が、ビット状態を前記j番目の状態から前記i番目の状態へと変更するための条件であり、対の前記条件は異なっており、前記第1の条件および前記第2の条件が前記第1のサブセットの対を形成し、-前記条件セットが条件対の第2のサブセットも含み、対の一方の条件が、ビット状態をk番目の状態からl番目の状態へと変更するための条件であり、前記対の他方の条件が、ビット状態を前記l番目の状態から前記k番目の状態へと変更するための条件であり、前記第2のサブセットの対の前記条件は同一である、請求項1から3のいずれかに記載の方法。前記条件セットが、ビット状態をm番目の状態からn番目の状態へと変更するための少なくとも1つの条件を含む第3のサブセットを更に含み、前記条件セットにおいて、ビット状態を前記m番目の状態から前記n番目の状態へ変更するための条件は存在しない、請求項7に記載の方法。前記ターゲットビットに対応した全ての前記パリティチェックの全て、または少なくとも1つであるが過半数よりも少数、または過半数が満足されないか、または前記ターゲットビットに対応した全ての前記パリティチェックが満足された場合はいつでも、条件が満足される、請求項8のいずれかに記載の方法。-前記第1のビット状態が、前記メモリへの書き込み対象の前記ビットの前記値が0であることの高い信頼度に対応し、-前記第2の状態が、前記メモリへの書き込み対象の前記ビットの前記値が0であることの低い信頼度に対応し、-前記第3の状態が、前記メモリへの書き込み対象の前記ビットの前記値が1であることの高い信頼度に対応し、-前記第4の状態が、前記メモリへの書き込み対象の前記ビットの前記値が1であることの低い信頼度に対応し、前記条件の第1のサブセットが、-前記ターゲットビットに対応した全ての前記パリティチェックの少なくとも1つであるが過半数よりも少数が満足されない場合に満足される前記第1の条件と、-前記ターゲットビットに対応した全ての前記パリティチェックが満足されない場合に満足される前記第2の条件と、-前記ターゲットビットに対応した全ての前記パリティチェックの少なくとも1つであるが過半数よりも少数が満足されない場合に満足される、ビットを前記第3の状態から前記第4の状態へと変更させるための第3の条件と、-前記ターゲットビットに対応した全ての前記パリティチェックが満足されない場合に満足される、ビットを前記第4の状態から前記第3の状態へと変更させるための第4の条件と、を含み、前記条件の第2のサブセットが、-前記ターゲットビットに対応した全ての前記パリティチェックの過半数が満足されない場合に満足される、ビットを前記第2の状態から前記第4の状態へと変更させるための第5の条件と、-前記ターゲットビットに対応した全ての前記パリティチェックの過半数が満足されない場合に満足される、ビットを前記第4の状態から前記第2の状態へと変更させるための第6の条件と、を含み、前記条件の第3のサブセットが、-前記ターゲットビットに対応した全ての前記パリティチェックの過半数が満足されない場合に満足される、ビットを前記第1の状態から前記第4の状態へと変更させるための第7の条件と、-前記ターゲットビットに対応した全ての前記パリティチェックの過半数が満足されない場合に満足される、ビットを前記第3の状態から前記第2の状態へと変更させるための第8の条件と、を含む、請求項8に記載の方法。前記ターゲットビットに対応した前記パリティチェックの計算が、対応するビット状態によって決定された前記シーケンスのビットの値に従って実行される、請求項1から10のいずれか1項に記載の方法。コンピュータによって実行するための命令を含むコンピュータプログラムが記録されたコンピュータ読み取り可能記憶媒体であって、前記命令が請求項1から11のいずれかに記載の方法を実行するための手段を含む、コンピュータ読み取り可能記憶媒体。-LDPCコードによって符号化されたビットシーケンスを書き込むのに適したメモリと、-請求項1から11のいずれかに記載の方法を実行するための手段と、を含む、システム。前記メモリが、好ましくは浮動ゲートトランジスタ技術に基づくフラッシュメモリである、請求項13に記載のシステム。以下では、広い範囲でのビット反転アルゴリズムを説明する。長さNおよび次元Kの2進N,KLDPCコードは典型的に、パリティチェックの行列Hによって規定される。HはN列およびM行を有し、M≧N-Kである。Hの各列は情報ビットまたはパリティビットに相当し、各行はチェックサムに相当する。いずれかの一時的なビット決定ベクトルbについて、チェックサムのセットまたはシンドロームはベクトルs=bHTである。ビット反転アルゴリズムにおいて、復号器は、簡単なXOR演算によって2進入力シーケンスbすなわち読み取ったフラッシュページを用いて各パリティチェックを計算するすなわちs=bHT。パリティチェックは、sにおける対応するビットが0の場合は満足され、これが1の場合は満足されない。次いで、あるビットを含む満足されないチェックの数が固定の反転閾値tを超えた場合に、このビットを反転するようにスケジュールする。そして、反転したビットを復号プロセスの次の繰り返しで用いる。復号アルゴリズムは、パリティチェックが全て満足された場合または既定の最大繰り返し限度に達した場合に停止する。従って、この結果得られたビット反転アルゴリズムのための疑似コードは、以下のステップを含む。i.s=bHTを用いてパリティチェックを計算する。これらのパリティチェックの全てが満足された場合、復号を停止する。ii.さもなければ、各ビットについて満足されないパリティチェックの数を検出する。ビットの各々を順番にターゲットと見なす。iii.ターゲットビットを用いたパリティチェック式の過半数が満足されない場合、次の復号繰り返しの前にそのビットを反転する。iv.ステップiからiiiを繰り返す。上述のアルゴリズムは、2進対称チャネルに書き込まれたLDPCコードを復号する際に満足な結果を提供する。しかしながら、LDPCコードの復号を改良する方法を提供することが必要とされている。第1の態様によれば、本発明は、フラッシュメモリ等の2進非対称チャネルに追従するメモリ上に書き込まれたビットシーケンスを復号するための方法として具現化され、ビットシーケンスが低密度パリティチェックコードすなわちLDPCにより符号化されており、これによってシーケンスの各ビットがLDPCコードにより規定された対応するパリティチェックを有する。この方法は、-第1の状態および第2の状態を含むビット状態セットと、条件セットと、を提供することであって、条件が満足された場合にビット状態が変更されることになり、条件セットが、ビット状態を第1の状態から第2の状態へと変更するための第1の条件と、ビット状態を第2の状態から第1の状態へと変更するための第2の条件と、を含み、第1の条件と第2の条件とは異なっている、ことと、-ビットシーケンスの各ビットの値を読み取り、読み取った値に従って各ビットをセットの各状態に関連付けることと、-ビットシーケンスのターゲットビットについて、条件を評価することであって、条件は、ターゲットビットの状態に従って条件セットから選択され、条件を評価することは、ターゲットビットに対応したパリティチェックの計算結果を用いる、ことと、-条件が満足されたことを判定することと、-条件が満足されたことの結果としてターゲットビットの状態を変更することと、-ターゲットビットの状態に従ってターゲットビットの値を設定することと、を含む。実施形態において、この方法はいかの特徴の1つ以上を含むことができる。-評価するステップを繰り返し、ターゲットビットが、評価するステップの各繰り返しにおいてシーケンスの異なるビットであり、-パリティチェックの計算の結果によって全てのパリティチェックが満足されたことが示されるか、または最大繰り返し数に達するまで、評価するステップを繰り返す、-ビット状態セットが第1の状態および第2の状態から成り、条件セットが第1の状態および第2の状態から成り、各ビットを関連付けるステップにおいて、ビットを、ビットの値が0と読み取られた場合は第1の状態に、ビットの値が1と読み取られた場合は第2の状態に関連付け、ターゲットビットの値を設定するステップにおいて、ターゲットビットの値を、ターゲットビットが第1の状態に関連付けられている場合は0に、ターゲットビットが第2の状態に関連付けられている場合は1に設定する、-ターゲットビットに対応したパリティチェックの過半数が満足されない場合はいつでも第1の条件が満足され、ターゲットビットに対応した全てのパリティチェックが満足されない場合はいつでも第2の条件が満足される、-満足されないターゲットビットに対応したパリティチェックの数が第1の閾値よりも大きい場合はいつでも第1の条件が満足され、満足されないターゲットビットに対応したパリティチェックの数が第2の閾値よりも大きい場合はいつでも第2の条件が満足され、第1の閾値と第2の閾値とは異なっている、-ビット状態セットが第3の状態および第4の状態を更に含み、条件セットが条件対の第1のサブセットを含み、対の一方の条件が、ビット状態をi番目の状態からj番目の状態へと変更するための条件であり、対の他方の条件が、ビット状態をj番目の状態からi番目の状態へと変更するための条件であり、対の条件は異なっており、第1の条件および第2の条件が第1のサブセットの対を形成し、条件セットが条件対の第2のサブセットも含み、対の一方の条件が、ビット状態をk番目の状態からl番目の状態へと変更するための条件であり、対の他方の条件が、ビット状態をl番目の状態からk番目の状態へと変更するための条件であり、第2のサブセットの対の条件は同一である、-条件セットが、ビット状態をm番目の状態からn番目の状態へと変更するための少なくとも1つの条件を含む第3のサブセットを更に含み、条件セットにおいて、ビット状態をm番目の状態からn番目の状態へ変更するための条件は存在しない、-ターゲットビットに対応した全てのパリティチェックの全て、または少なくとも1つであるが過半数よりも少数、または過半数が満足されないか、またはターゲットビットに対応した全てのパリティチェックが満足された場合はいつでも、条件が満足される、-第1のビット状態が、メモリへの書き込み対象のビットの値が0であることの高い信頼度に対応し、第2の状態が、メモリへの書き込み対象のビットの値が0であることの低い信頼度に対応し、第3の状態が、メモリへの書き込み対象のビットの値が1であることの高い信頼度に対応し、第4の状態が、メモリへの書き込み対象のビットの値が1であることの低い信頼度に対応し、条件の第1のサブセットが、ターゲットビットに対応した全てのパリティチェックの少なくとも1つであるが過半数よりも少数が満足されない場合に満足される第1の条件と、ターゲットビットに対応した全てのパリティチェックが満足されない場合に満足される第2の条件と、ターゲットビットに対応した全てのパリティチェックの少なくとも1つであるが過半数よりも少数が満足されない場合に満足される、ビットを第3の状態から第4の状態へと変更させるための第3の条件と、ターゲットビットに対応した全てのパリティチェックが満足されない場合に満足される、ビットを第4の状態から第3の状態へと変更させるための第4の条件と、を含み、条件の第2のサブセットが、ターゲットビットに対応した全てのパリティチェックの過半数が満足されない場合に満足される、ビットを第2の状態から第4の状態へと変更させるための第5の条件と、ターゲットビットに対応した全てのパリティチェックの過半数が満足されない場合に満足される、ビットを第4の状態から第2の状態へと変更させるための第6の条件と、を含み、条件の第3のサブセットが、ターゲットビットに対応した全てのパリティチェックの過半数が満足されない場合に満足される、ビットを第1の状態から第4の状態へと変更させるための第7の条件と、ターゲットビットに対応した全てのパリティチェックの過半数が満足されない場合に満足される、ビットを第3の状態から第2の状態へと変更させるための第8の条件と、を含む、-ターゲットビットに対応したパリティチェックの計算が、対応するビット状態によって決定されたシーケンスのビットの値に従って実行される。別の態様によれば、本発明は、コンピュータによって実行するための命令を含むコンピュータプログラムが記録されたコンピュータ読み取り可能記憶媒体として具現化され、この命令が上述の方法を実行するための手段を含む。更に別の態様によれば、本発明はシステムとして具現化され、これは、-LDPCコードによって符号化されたビットシーケンスを書き込むのに適したメモリと、-上述の方法を実行するための手段と、を含む。実施形態において、メモリは、好ましくは浮動ゲートトランジスタ技術に基づくフラッシュメモリである。本発明の更に別の特徴および利点は、以下に列挙する添付図面を参照して、非限定の例として与えられる本発明の実施形態の以下の記載から明らかとなろう。メモリ上に書き込まれたビットシーケンスを復号するためのコンピュータ実施方法を提供する。ビットシーケンスは、低密度パリティチェックすなわちLDPCコードによって符号化されており、これによってビットシーケンスは、LDPCコードにより規定された対応するパリティチェックを有する。この方法は、第1の状態および第2の状態を含むビット状態セットと、条件セットと、を提供することを含む。1つの条件が満足された場合、ビットの状態は変更されることになる。条件セットは少なくとも第1の条件および第2の条件を含む。第1の条件は、ビット状態を第1の状態から第2の状態へと変更するためのものである。第2の条件は、ビット状態を第2の状態から第1の状態へと変更するためのものである。第1の条件と第2の条件とは異なっている。この方法は、メモリ上に書き込まれたビットシーケンスの各ビットの値を読み取ることと、読み取った値に従って各ビットをセットの各状態に関連付けることと、を含む。この方法は、ビットシーケンスのターゲットビットについて条件を評価することを含む。評価する条件は、ターゲットビットの状態に従って条件セットから選択する。評価するステップは、ターゲットビットに対応するパリティチェックの計算結果を利用する。この方法は、条件が満足されたことを判定し、条件が満足されたことの結果としてターゲットビットの状態を変更するステップを含む。次いで、この方法は、その状態に従ってターゲットの値を設定することができる。好ましくは、この方法を、読み取ったビットシーケンスの各ビットについて繰り返す。最後に、シーケンスの各ビットの値をその各状態に従って設定する。かかる方法は、伝統的なビット反転アルゴリズムよりも優れた性能で、複雑度をわずかに増すだけで、LDPCコードにより符号化されたビットシーケンスを復号するためのソリューションを提供する。メモリ上に書き込まれたビットシーケンスを復号するとは、この方法が、書き込み対象のビットシーケンスにできる限り近付くことを意味する。この復号方法は、ビットシーケンスを復号することだけでなく復号後に例えばLDPCコードのビットシーケンスを単語と関連付けた辞書を用いてビットシーケンスを解釈することも含むもっと広い方法の一部とすることができる。ビットシーケンスはLDPCコードにより符号化されており、これは、書き込み対象のビットシーケンスの値のシーケンスがLDPCコードにより承認されたシーケンスであることを意味するので、シーケンスのビットはLDPCコードにより規定された対応するパリティチェックを有する。これは本質的にLDPC符号化として知られる。以下において、シーケンスをb1、...、bNで表す。シーケンスのビットbiの少なくとも一部について、biおよび他のビットに関連した動作すなわちパリティチェックがある。例えばJ回の動作の各々が、kjの他のビットB1i、...、bkjiに関連しjは1からJである、これについて予想される結果がある。動作はXOR演算であり、bib1i...bkjiとすることができ、0に等しいことが予想される。以下において、パリティチェックとは、この演算の結果を意味することができる。パリティチェックは、予想された値と等しい場合は満足されると言われ、予想されていない値に等しい場合は満足されていないと言われる。この方法は、第1の状態および第2の状態を含む少なくとも2つの異なる状態を有するビット状態セットと、条件セットと、を提供することを含む。1つの条件が満足された場合、ビットの状態は変更されることになる。条件セットは、第1の条件および第2の条件を含む少なくとも2つの条件を含む。第1の条件は、ビット状態を第1の状態から第2の状態へと変更するための条件である。第2の条件は、ビット状態を第2の状態から第1の状態へと変更するための条件である。第1の条件と第2の条件とは異なっている。状態は、この方法において用いられビットに関連付けられた中間変数である。ビットの状態は、ビットの値にリンクされることになり、従ってビットの値の検索を可能とする。これについては以下で例示する。条件は、ビットの状態を変更するための必要条件である。条件が満足されたすなわち満たされたと評価されると、ビットの状態はある状態から別の状態へと変更されることになる。状態がsiであるビットbiでは、条件は、biまたはsiあるいはその両方に応じたブール関数とすることができる。関数の評価の結果が真であるそれぞれ偽である場合、条件が満足されたそれぞれ満足されないと言われる。この場合、第1の条件および第2の条件が異なっているという事実により、少なくとも2つの関数が同一の入力について異なる結果を生じるようになっていることが示される。この方法は、メモリ上に書き込まれたビットシーケンスの各ビットの値を読み取ることと、読み取った値に従って各ビットをセットの各状態に関連付けることと、を含む。ビットの値は従来の方法で規定される。すなわち、これはその論理レベルであり、1または0に等しい。どのように関連付けを行うかについての例を後に示す。この方法は、ターゲットビットbitの状態に従って条件セットから選択した条件を評価することを含む。パリティビットは、シーケンスの1つのビットであり、例えばシーケンスの第1のビットである。ターゲットビットの状態sitに従って選択を実行するので、状態sitを別の状態に変更させない条件、すなわち状態s≠sitを別の状態に変更させる条件の評価は行わないことが保証される。これによって、不必要な条件を評価することを防止し、この方法を迅速化する。実施形態において、評価するステップは、ターゲットビットに対応したパリティチェックを計算することを含む。典型的に、パリティチェックの計算は、条件の評価を行うターゲットビットを選択した後に行う。しかしながら、他の実施形態では、シーケンスの全ビットに対応したパリティチェックの計算を、所与のターゲットビットを選択する前、すなわち関連するビットの対応した状態によって決定した現在のビット値に基づいて実行する。このため一般に、評価するステップは、少なくともターゲットビットに対応したパリティチェックの計算結果を利用するものと見なすことができる。具体的には、満足されないパリティチェックまたは満足されたパリティチェックあるいはその両方のパリティチェックの数を含む比較を行うことができる。例えば、満足されないパリティチェックまたは満足されたパリティチェックあるいはその両方の数を閾値と比較することができる。このように、評価によって復号を迅速に実行することができる。条件が満足されたと評価した場合、この方法は、条件が満足されたことの結果としてターゲットビットの状態を変更する。これによって、この方法の終了時に最も適切な状態がターゲットビットに関連付けられていることが確実となる。この方法は次いで、ターゲットビットの値、およびおそらくは各ビットの状態に従ったシーケンスの各ビットの値を設定することができる。このステップは、何を読み取るかには無関係に、書き込み対象とされたビットの値を決定することになる。ビットを変更し、最も適切な状態をビットに関連付ける可能性によって、各ビットの値を設定した場合に、少なくとも部分的にビットの正しい値の検索を可能とする。パリティチェックの計算は、ターゲットビットの状態に従って、およびターゲットビットに対応したパリティチェックに含まれる他のビットの状態に従って実行することができる。パリティチェックを計算するために先に与えた式bib1i...bkjiにおいて、用いた値bi、b1i、...、bkjiは、対応するビット状態に従って各ビットについて設定した値とすることができる。これについては後に例示する。見て取れるように、複雑な式を解く必要はない。このため、従来技術のビット反転アルゴリズムにおいてと同様、この方法は複雑度が低く、著しく迅速である。従来技術の伝統的なビット反転アルゴリズムにおいては、ターゲットビットに対応したパリティチェックの過半数が満足されない場合はいつでもビットの値を反転する。換言すると、条件は1つだけである。本方法では、少なくとも2つの異なる条件を有する条件セットが提供される。異なる条件を有することによって、例えばチャネルの非対称性からメリットを得ることができる。このため、ビットを反転するか否かの決定は、現在のビットの状態に左右される。この方法は、複数のビットに繰り返した場合、終了時に観察されるエラーレートエラーレートは、ターゲットビットまたはシーケンスの他のビットあるいはその両方の値を設定するステップの後にこの方法が出力するビットシーケンスと書き込み対象のビットシーケンスとの間の差を表すものであるは、伝統的なビット反転アルゴリズムのものよりも低いことが確実とする。従ってこの方法では、ビット反転アルゴリズムが改善すなわちエラーレートが低下し、複雑度は線形に変化するだけである。先に注記したように、メモリは2進非対称チャネルに従うことができる。これは例えばフラッシュメモリとすることができる。この場合、図1および図2を参照すると、この方法の非対称性すなわちセットの2つの状態が異なるという事実によってエラーレートが著しく低下する。このため、ビットの状態に条件を適合させることができる。その考えは、1が読み取られた場合、書き込み対象のビットが1であった可能性が高いことを意味するということである。実際、チャネルは、0が誤って1に変換される確率が低いようになっている。一般的に、1を0に変更する条件は、0を1に変更する条件と同一でない方が良い。2つの異なる条件を有する条件セットによって、確実にこれが検証される。原理的に、ビット反転アルゴリズムは、変更なしの2進非対称チャネルBAC上で用いることができるが、BACの特別な性質のために著しい性能劣化があり、これは特に、フラッシュメモリにおける場合のようにbが比較的大きい場合に当てはまる。図3を参照すると、この方法の一実施形態を示すフローチャートが示されている。まず、ビット状態セット10を提供する。これは例えば第1の状態および第2の状態を含む。更に、状態セット20を提供する。前述のように、条件が満足されたと評価した場合にビットの状態を変更するように、条件が設計されている。条件は少なくとも以下を含む。-第1の条件、すなわち第1の状態から第2の状態へとビット状態を変更させるか否かについて。-第2の条件、すなわち第2の状態から第1の状態へとビット状態を変更させるためのもの。第2の条件は第1の条件とは異なっている。図示のように、書き込んだビットシーケンスの各ビットの値を読み取る。次いで、読み取ったビットの値に従って、対応するビットを各状態に関連付けるステップS100。次いで、シーケンスの所与のターゲットビット30について、条件を評価するステップS200。以下のことに留意すべきである。-条件は、ターゲットビットの状態に従って、条件セット20から選択する。-条件の評価は、先に注記したように、ターゲットビットに対応したパリティチェックの計算結果を利用する。全てのパリティチェックは、ターゲットビット30の選択前に計算可能であることに留意すべきである。これに対して、ターゲットビットに対応したパリティチェックは、ターゲットビットの選択後、条件自体を評価する前に計算することができる。これについては以下で更に詳細に論じる。次にステップS300において、選択した条件が満足されたと判定した場合、これに応じてターゲットビットの状態を変更するステップS400。あるいは、ターゲットビットの状態を変更しないステップS300a。最後に、ターゲットビットの値を、その各状態に従って設定することができるステップS500。好ましくは、図3に示すようなプロセスを繰り返すステップS600。ターゲットビット30は、各繰り返しにおいて異なるビットであり、例えばシーケンス内の全てのビットを処理するためにシーケンス内の次のビットとする。各繰り返しは、適切に選択した条件を評価すること、条件が満足されたか否かを判定すること、および、必要な場合は現在処理しているビットの状態を変更することを含む。一実施形態では、各繰り返しにおいてターゲットビットに対応したパリティチェックを計算する必要がある。前述のように、パリティチェックの計算は、シーケンスのビットの現在の状態から検索することができるビット値を含む。次いで、必要な場合には、現在のターゲットビットの値を、繰り返しの完了時に得たその現在の状態に従って設定することができる。かかる実施形態は図3のフローチャートに対応する。一つの変形例においては、パリティチェックは最初に、対応した状態によって決定されるシーケンス内のビットの現在の値に従って計算される。次いで、シーケンスの全ビットを繰り返し処理することができる。すなわち、各繰り返しは、適切に選択した条件を評価すること、条件が満足されたか否かを判定すること、および、必要な場合には現在処理しているビットの状態を変更することを含む。最後に、ビット繰り返しが完了すると、シーケンスの各ビットの値を、前記各ビットの現在の状態に従って設定する。これは、ビット繰り返しにおいて各ビットについてパリティチェックを再計算する必要がなく時間の節約になるという利点を有する。全ての場合において、評価ステップは、ターゲットビットに対応したパリティチェックの計算結果を利用する。実施形態においては、全てのパリティチェックが満足されるまで、すなわちパリティチェック計算の結果によってこれが示されるまで、プロセスを更に繰り返す。変形例では、収斂を確実とするために、最大繰り返し数に達するまでプロセスを繰り返す。従って、繰り返しにより、シーケンスのビットのほとんどが終了時に最も適切な状態に関連付けられていることが確実となる。このため、ビットの値を設定するステップにおいて、設定される値は最も正確であると考えられる。以下で、この方法の2つの実施形態について図4および図5を参照して論じる。これらは、ビット状態セットおよび条件セットの実際の実施を例示する。図4の例変更ビット反転アルゴリズムとも称するにおいて、状態セットは第1の状態S1および第2の状態S2から成る。換言すると、ここではビット状態は2つだけである。このため、ビットが例えば1または0の2進値を有すると仮定した場合、ビットの状態と値との間の全単射対応関係が可能となるこれを以下で考察する。例えば、S1は0に相当し、S2は1に相当する。条件セットは第1の状態C1および第2の状態C2から成る。各ビットを各状態に関連付けた場合、ビットの値が0と読み取られた場合これは第1の状態S1に関連付けられ、ビットの値が1と読み取られた場合これは第2の状態S2に関連付けられる。上述のように、2つの条件に依拠する。第1の条件C1はビット状態をS1からS2に変更するものであり、第2の条件C2はビット状態をS2からS1に変更するものである。しかしながら、例えばチャネルの非対称性からメリットを得るために、第1の条件と第2の条件とは異なっている。評価プロセスの完了時に、ターゲットビットの状態が第1の状態S1である場合はターゲットビットの値を0に設定し、ターゲットビットの状態が第2の状態S2である場合はターゲットビットの値を1に設定する。かかる復号方法は、特に複雑度が低い。このため、この例では、状態S1およびS2は中間変数であり、ビット値と状態との間には完全な対応関係がある。更に詳細には、ターゲットビットに対応したパリティチェックの過半数が満足されない場合はいつでも、または、満足されないターゲットビットに対応したパリティチェックの数が第1の閾値t1よりも大きい場合はいつでも、第1の条件C1を満足させることができる。ターゲットビットに対応した全てのパリティチェックが満足されない場合はいつでも、または、満足されないターゲットビットに対応したパリティチェックの数が第2の閾値t2よりも大きい場合はいつでも、第2の条件C2を満足させることができる。第1の閾値t1および第2の閾値t2を用いる場合、これらはそれぞれ異なっている。典型的に、S1は0に相当し、S2は1に相当するので、t1<t2である。あるいは、比較のために割合を用いることができる。上述の方法の範囲内で、他にも多くの適切な条件を想定することができる。一般に、ターゲットビットに対応したパリティチェックの全て、または少なくとも1つであるが過半数よりも少数、または過半数が満足されない場合はいつでも、条件を満足させることができる。他の種類の条件について、第2の例を参照して述べる。2つの例のいずれかに当てはまる条件は、他の例にも適用することができる。閾値の値は、チャネルの値aおよびbに応じて決めることができる。これによって、この方法が実行されるメモリに応じてこの方法を適合することが保証される。この方法を実行する第2の例2ビット-ビット反転アルゴリズムとも称するについて、図5を参照して論じる。図5に例示するように、ビット状態セットは、第3の状態S3および第4の状態S4を更に含むことができる。条件セットは、例えば{C1、C2、C3、C4}等、条件対の第1のサブセットを含むことができる。形式上、対C1、C2またはC3、C4の一方の条件C1またはC3は、ビット状態をi番目の状態からj番目の状態へと変更するための条件である。対の他方の条件C2またはC4は、ビット状態をj番目の状態からi番目の状態へと変更するための条件である。ここで、対の条件はそれぞれ異なっている。すなわち、第1の条件C1および第2の条件C2は第1のサブセット{C1、C2、C3、C4}の対C1、C2を形成する。i番目の状態はS1またはS3とすることができ、j番目の状態はS2またはS4とすることができる。図5の例において、条件セットは、{C5、C6}等、条件対の第2のサブセットも含む。ここで、対{C5、C6}の一方の条件C5は、ビット状態をk番目の状態例えばS2からl番目の状態例えばS4へと変更するための条件であり、他方の条件C6は、ビット状態をl番目の状態からk番目の状態へと変更するための条件である。条件対の第1のサブセットとは異なり、条件は同一である。図5の場合、第2のサブセットは対を1つだけC5、C6を有する。このため、この場合、パラメータkおよびlは値5または6を取ることができる。しかしながら、例えば5つ以上の状態がある場合、第2のサブセットは一般に2つ以上の対を有することができる。かかる方法は、中間状態を導入することによって状態間の遷移を改善する。第1のサブセットは、異なる状態間に非対称性を導入する。非対称性および中間状態の組み合わせにより、書き込み対象のシーケンスにいっそう近い最終結果に達することができる。条件セットは、{C7、C8}等の第3のサブセットを更に含むことができ、これは、ビット状態をm番目の状態例えばS1またはS3からn番目の状態例えばS4またはS2へと変更するための少なくとも1つの条件C7またはC8を含む。この場合、対になる条件、すなわちビット状態をm番目の状態からn番目の状態へ変更するための条件は存在しないことに留意すべきである。これによって、この方法に更に非対称性が導入され、実際の正確さが改善する。以下の表Iおよび図6に示す場合のように、第1のビット状態S1は、メモリへの書き込み対象のビットの値が0であることの高い信頼度に対応することができる。第2の状態S2は、メモリへの書き込み対象のビットの値が0であることの低い信頼度に対応することができる。第3の状態S3は、メモリへの書き込み対象のビットの値が1であることの高い信頼度に対応することができる。第2の状態は、メモリへの書き込み対象のビットの値が1であることの低い信頼度に対応することができる。かかる場合に各ビットをセットの各状態に関連付けると、値が0と読み取られた場合はビットを状態S1またはS2に関連付けることができ、値が1と読み取られた場合はS3またはS4に関連付けることができる。シーケンスの各ビットの値を設定するステップでは、ビットの状態がS1またはS2である場合は値を0に設定することができ、状態がS3またはS4である場合は1に設定することができる。このため、図4の例においてと同様に、状態と、ビットが有することができる2つの値0または1との間に、対応関係を持たせることができるこれは一般に当てはまるはずである。更に、この対応関係は、パリティチェックを計算するために先に与えた式bib1i...bkjiにおいて用いることができる。実際、ビットの状態bi、b1i、...、bkjiがS1またはS2である場合は、用いる値を0とすることができ、ビットの状態bi、b1i、...、bkjiがS3またはS4である場合は、1とすることができる。この第2の例および第1の例で示したように、ターゲットビットに対応したパリティチェックの計算は、一般的な場合、例えば対応するビット状態によって決定されたシーケンスのビットの値に従って実行することができる。この方法の第2の例では、状態セットは4つの状態から成ることができる。この場合、ビット状態は各状態について2ビット論理で実施することができ、第1の例に比べてオーバーヘッドを招く。この方法の第2の例は、条件セットを適切に変更することによって2進対称チャネルBSC等の他のチャネルモデルに使用可能であることに留意すべきである。以下の表1は、特定の例についての拡張条件セットおよび対応する状態セットを示す。この場合も、かかる状態および条件のセットの実施は、複雑度が比較的低く、実際に良好な結果を達成する。図6は、ランダムレギュラーLDPCコードのシミュレーション結果を示す。コード長は1908であり、列重みは4であり、レートは0.8889である。この結果は、4つの異なる復号方法を用いる場合のフレームエラーレート対遷移確率aを示す。aの値は、図1の2進非対称チャネルで用いたものであり、bは10に等しい。フレームエラーレートは、復号方法を実行した後に残っているグローバルエラーである。換言すると、これは、復号方法が出力したビットシーケンスと書き込み対象のビットシーケンスとの間の差である。復号方法の2つは、従来技術のGallagerBアルゴリズムおよび前述した通常のビット反転アルゴリズムである。他の2つの復号方法の一方は、第1の例に対応する変更ビット反転アルゴリズムであり、t1およびt2はaおよびbに従って選択する。他の2つの方法の他方は、表1に対応する2ビット-ビット反転アルゴリズムである。この結果からわかるように、シミュレーションを行うaの全ての値について、2ビット-ビット反転アルゴリズムおよび変更ビット反転アルゴリズムの双方では、最終フレームエラーレートがそれぞれ低く、従来技術のアルゴリズムに比べて復号の改善を示す。コンピュータプログラムは、コンピュータ化システムによって実行するための命令を含むことができる。この命令は、上述の方法の一部または全てを実行するための手段を含む。かかるコンピュータプログラムは、例えばCD、ハードディスク、またはフラッシュメモリのようなコンピュータ読み取り可能記憶媒体上に記録することができる。システムは、LDPCコードにより符号化されたビットシーケンスを書き込むのに適したメモリ、および、上述の復号方法を実行するためにこのメモリに適切に接続された手段を含むことができる。メモリは、好ましくは浮動ゲートトランジスタ技術に基づいたフラッシュメモリとすることができる。かかるシステムは、データの記憶について特にロバストである。実際、復号方法を実行するための手段があるので、変更した/失われたデータの検索が迅速かつ正確である。本発明は、システム、方法、またはコンピュータプログラムとして具現化可能であることは理解されよう。具体的には、本発明はコンピュータ実施方法として具現化することができる。従って、本発明の態様は、全体的にハードウェアの実施形態、全体的にソフトウェアの実施形態ファームウェア、常駐ソフトウェア、マイクロコード等を含む、または、ソフトウェアおよびハードウェアの態様を組み合わせた実施形態という形態を取ることができ、それらは全て本明細書において、回路、モジュール、またはシステムと一般的に称することができる。更に、本発明の態様は、具現化されたコンピュータ読み取り可能プログラムコードを有する1つ以上のコンピュータ読み取り可能媒体複数の媒体において具現化されたコンピュータプログラムの形態を取ることも可能である。1つ以上のコンピュータ読み取り可能媒体複数の媒体のあらゆる組み合わせを利用することができる。コンピュータ読み取り可能媒体は、コンピュータ読み取り可能信号媒体またはコンピュータ読み取り可能記憶媒体とすることができる。コンピュータ読み取り可能記憶媒体は例えば、限定ではないが、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、デバイス、または前述のもののいずれかの適切な組み合わせとすることができる。コンピュータ読み取り可能記憶媒体の更に具体的な例非網羅的な列挙は、以下を含む。すなわち、1本以上のワイヤを含む電気的接続、携帯型コンピュータディスケット、ハードディスク、ランダムアクセスメモリRAM、読み取り専用メモリROM、消去可能プログラマブル読み取り専用メモリEPROMまたはフラッシュメモリ、光ファイバ、携帯型コンパクトディスク読み取り専用メモリCD-ROM、光記憶デバイス、磁気記憶デバイス、または前述のもののいずれかの適切な組み合わせである。前述のいずれのものも、特別に設計したASIC特定用途向け集積回路によって補足することができ、またはそれに組み込むことができる。この文書の文脈において、コンピュータ読み取り可能記憶媒体は、命令実行システム、装置、またはデバイスによってまたはそれと接続して用いるためにプログラムを含有または記憶することが可能ないずれかのタンジブルな媒体とすることができる。コンピュータ読み取り可能信号媒体は、例えばベースバンドにおいてまたは搬送波の一部として、具現化されたコンピュータ読み取り可能プログラムコードを有する伝播データ信号を含むことができる。かかる伝播信号は様々な形態のいずれかを取ることができ、それらは限定ではないが、電磁、光、またはそれらのいずれかの適切な組み合わせを含む。コンピュータ読み取り可能信号媒体は、コンピュータ読み取り可能記憶媒体でないが、命令実行システム、装置、またはデバイスによってまたはそれと接続して用いるためにプログラムを伝達、伝播、または転送することが可能ないずれかのコンピュータ読み取り可能媒体とすることができる。コンピュータ読み取り可能媒体上で具現化されるプログラムコードは、限定ではないが、無線、有線、光ファイバケーブル、RF等、または前述のもののいずれかの適切な組み合わせを含むいずれかの適切な媒体を用いて伝送することができる。本発明の態様の動作を実行するためのコンピュータプログラムコードは、Java、Smalltalk、C等のオブジェクト指向プログラミング言語、およびCプログラミング言語または同様のプログラミング言語等の従来の手順プログラミング言語を含む1つ以上のプログラミング言語のいずれかの組み合わせにおいて記述することができる。プログラムコードは、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンのソフトウェアパッケージとして、部分的にユーザのコンピュータ上でおよび部分的に遠隔コンピュータ上で、または全体的に遠隔コンピュータもしくはサーバ上で、実行することができる。後者の場合、遠隔コンピュータは、ローカルエリアネットワークLANまたはワイドエリアネットワークWANを含むいずれかのタイプのネットワークを介してユーザのコンピュータに接続することができ、または、接続は、例えばインターネットサービスプロバイダを用いてインターネットを介して外部コンピュータに対して行うことができる。図7は、本発明の一実施形態によるコンピュータハードウェアのブロック図である。本発明の一実施形態によるコンピュータシステム501は、CPU504およびメインメモリ502を含み、これらはバス500に接続されている。バス500はディスプレイコントローラ512に接続され、これはLCDモニタ等のディスプレイ514に接続されている。ディスプレイ514は、コンピュータシステムに関する情報を表示するために用いられる。また、バス500は、IDEまたはSATAコントローラ等のデバイスコントローラ506を介して、ハードディスク508またはDVD510等の記憶デバイスに接続されている。バス500は、更に、キーボード/マウスコントローラ520またはUSBコントローラ図示せずを介して、キーボード522およびマウス524に接続されている。また、バスは、例えばイーサネットプロトコルに準拠した通信コントローラ518に接続されている。通信コントローラ518は、コンピュータシステム501をネットワーク516に物理的に接続するために用いられる。本発明の態様について、本発明の実施形態に従った方法、装置システム、およびコンピュータプログラムのフローチャート図またはブロック図あるいはその両方を参照して上述した。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組み合わせは、コンピュータプログラム命令によって実施可能であるか、または少なくとも誘発されることは理解されよう。これらのコンピュータプログラム命令は、汎用コンピュータ、特殊目的コンピュータ、または他のプログラマブルデータ処理装置のプロセッサに提供されて機械を生成することができ、これによって、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサによって実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能/行為を実施するための手段を生成するようになっている。また、これらのコンピュータプログラム命令はコンピュータ読み取り可能媒体に記憶することができ、これによって、コンピュータまたは他のプログラマブルデータ処理装置に特定の方法で機能するように指示することができ、これにより、コンピュータ読み取り可能媒体に記憶された命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能/行為を実施する命令を含む製造品を生成するようになっている。また、コンピュータプログラム命令を、コンピュータ、他のプログラマブルデータ処理装置、または他のデバイスにロードして、そのコンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させてコンピュータ実施プロセスを生成することができ、これによって、コンピュータまたは他のプログラマブル装置上で実行する命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能/行為を実施するためのプロセスを提供するようになっている。図面におけるフローチャートおよびブロック図は、本発明の様々な実施形態に従ったシステム、方法、およびコンピュータプログラムの可能な実施のアーキテクチャ、機能性、および動作を例示する。この点で、フローチャートまたはブロック図における各ブロックは、規定された論理機能複数の機能を実施するための1つ以上の実行可能命令を含むコードのモジュール、セグメント、または一部を表すことができる。また、いくつかの代替的な実施において、ブロックに明記した機能は、図面に明記した順序どおりでなく発生する場合があることに留意すべきである。例えば、関与する機能性に応じて、連続して示した2つのブロックは実際には実質的に同時に実行されることがあり、またはブロックは時に逆の順序で実行される場合がある。また、ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組み合わせは、規定された機能もしくは行為を実行する特殊目的ハードウェアベースのシステム、または特殊目的ハードウェアおよびコンピュータ命令の組み合わせによって実施可能であることに留意すべきである。"