サイズが4、9、16、または25(入力による)の配列があり、配列内の数値は同じですが1つ少なくなっています(配列サイズが9の場合、配列内の最大の要素は次のようになります) 8)数値は0で始まり 、配列全体をループして各要素を1つずつチェックすることなく、2つの配列が等しいことを比較できるように、配列のある種のチェックサムを生成するアルゴリズムを実行したいと思います。
この種の情報はどこで入手できますか?できるだけシンプルなものが必要です。ありがとうございました。
編集:私が欲しいものを明確にするために:
-配列内のすべての数値が異なるため、繰り返し要素(1)があるため、[0,1,1,2]は無効です。
-数字の位置が重要であるため、[0,1,2,3]は[3,2,1,0]と同じではありません
-配列には数値0が含まれるため、これも考慮に入れる必要があります。
編集:
さて、ここでフレッチャーのアルゴリズムを実装しようとしました:http: //en.wikipedia.org/wiki/Fletcher%27s_checksum#Straightforward
int fletcher(int array[], int size){
int i;
int sum1=0;
int sum2=0;
for(i=0;i<size;i++){
sum1=(sum1+array[i])%255;
sum2=(sum2+sum1)%255;
}
return (sum2 << 8) | sum1;
}
正直なところ、リターンラインが何をするのかわかりませんが、残念ながらアルゴリズムは機能しません。配列[2,1,3,0]と[1,3,2,0]の場合、同じチェックサムを取得します。
EDIT2:
もう1つ、Adlerチェックサム http://en.wikipedia.org/wiki/Adler-32#Example_implementationです。
#define MOD 65521;
unsigned long adler(int array[], int size){
int i;
unsigned long a=1;
unsigned long b=0;
for(i=0;i<size;i++){
a=(a+array[i])%MOD;
b=(b+a)%MOD;
}
return (b <<16) | a;
}
これも機能しません。配列[2,0,3,1]と[1,3,0,2]は同じチェックサムを生成します。私はここで希望を失っています、何かアイデアはありますか?