【发布时间】:2012-06-05 06:13:55
【问题描述】:
我有一个大小为 4、9、16 或 25(根据输入)的数组,数组中的数字相同但减一(如果数组大小为 9,则数组中的最大元素数组将是 8) 数字以 0 开头 我想做一些算法来为数组生成某种校验和,这样我就可以比较两个数组是否相等,而无需遍历整个数组并逐个检查每个元素。
我在哪里可以获得此类信息?我需要一些尽可能简单的东西。谢谢。
编辑:只是为了清楚我想要什么:
-数组中的所有数字都是不同的,所以[0,1,1,2]无效,因为存在重复元素(1)
-数字的位置很重要,所以[0,1,2,3]和[3,2,1,0]不一样
-该数组将包含数字0,因此也应考虑到这一点。
编辑:
好的,我尝试在这里实现 Fletcher 算法: 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:
好的,这是另一个,阿德勒校验和 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] 生成相同的校验和。 我在这里失去了希望,有什么想法吗?
【问题讨论】:
-
数组中的数字不是唯一的,我猜?!那么 { 1,2,2,4 } 是否有效?
-
> 数组中的数字是一样的 你能详细说明一下吗?
-
哦,对不起,我没有提到!是的,这些数字是唯一的,因此 [1,2,2,4] 无效。
-
{1,2,3,4} 和 {4,3,2,1}。根据您的定义,这两个数组是否相等?
-
不,这些是不同的。
标签: arrays algorithm compare checksum