У меня есть массив размером 4,9,16 или 25 (в зависимости от ввода), и числа в массиве одинаковы, но меньше на единицу (если размер массива равно 9, то самым большим элементом в массиве будет 8) числа начинаются с 0 и я хотел бы сделать некоторый алгоритм для создания какой-то контрольной суммы для массива, чтобы я мог сравнить, что 2 массива равны, не перебирая весь массив и проверяя каждый элемент один за другим.
Где я могу получить такую информацию? Мне нужно что-то максимально простое. Спасибо.
редактировать: просто чтобы понять, чего я хочу:
-Все числа в массиве различны, поэтому [0,1,1,2] недопустимо, потому что есть повторяющийся элемент (1)
-Положение чисел имеет значение, поэтому [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
Честно говоря, я понятия не имею, что делает обратная линия, но, к сожалению, алгоритм не работает. Для массивов [2,1,3,0] и [1,3,2,0] я получаю одинаковую контрольную сумму.
РЕДАКТИРОВАТЬ2:
хорошо, вот еще один, контрольная сумма Адлера 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
Это тоже не работает. Массивы [2,0,3,1] и [1,3,0,2] генерируют одинаковую контрольную сумму. Я теряю надежду, есть идеи?