結局のところ、1 つの英数字には少なくとも 36 の可能な値があります。句読点や小文字などを含めると、72 個の可能な値を簡単に渡すことができます。
文字列をすばやく比較できる衝突しない数値は、必然的に文字列の長さに応じて指数関数的に大きくなります。
したがって、最初に、比較する予定の最長の文字列を決定する必要があります。長さが N 文字であると仮定し、大文字と数字の 0 ~ 9 のみが必要であると仮定すると、36^N までの整数表現が必要になります。
長さ 25 の文字列 (共通名フィールド) の場合、130 ビットの 2 進数が必要になります。
それを 32 ビットの数値に構成する場合は、4 が必要になります。その後、各数値を比較できます (4 つの整数の比較は、文字列をたどるのに比べて時間がかかりません)。多数のライブラリをお勧めしますが、この特殊なケースでは、独自のライブラリを作成してパフォーマンスを向上させることができると確信しています。
文字ごとに 72 の可能な値 (大文字、小文字、数字、句読点など) を処理する必要があり、10 文字が必要な場合は、62 ビットが必要になります - 2 つの 32 ビット整数 (またはオンの場合は 1 つの 64 ビット) 64 ビット コンピューティングをサポートするシステム)
ただし、文字列内の数字を制限することができず (つまり、256 個の文字/数字/文字/文字などのいずれかである可能性があります)、文字列のサイズを定義できない場合は、文字列を直接比較することは唯一の方法ですが、近道があります。
文字列のポインタを 32 ビットの符号なし整数配列にキャストし、文字列を一度に 4 バイト (または 64 ビット プロセッサでは一度に 64 ビット/8 バイト) 比較します。これは、100 文字の文字列を比較する必要があるのは、最大で 25 回だけであることを意味します。
優先順位の高い文字には 0 に近い値が割り当てられ、優先順位の低い文字には 255 に近い値が割り当てられるように、文字セットを再定義する (および文字列を変換する) 必要がある場合があります (比較方法によっては、その逆も同様です)。 .
幸運を!
-アダム