если у вас есть только числа в массивах - используйте некоторые вариации базового алгоритма CRC - сложность составляет O (n) на массив, так что это будет максимально быстро https://en.wikipedia.org/wiki/Cyclic_redundancy_check
Аналогичная идея, рассчитатьсумма (массив) и произведение (массив), вы можете вычислить оба значения с помощью O (n).Например:
1, 5, 6, 7 ,8 sum=27, prod=1680
7, 8, 1, 5, 6 sum=27, prod=1680
, но
3, 8, 5, 5, 6 sum=27, prod=3600
ПРИМЕЧАНИЕ особый случай равен 0!Так как это приведет к аннулированию продукта, следует использовать все значения + 1.
NOTE2 Имейте в виду, что идея алгоритмов CRC состоит в том, чтобы использовать одну переменную байта или двойного слова для итогового значения ипеременная будет в конечном итоге переполнена.
Например, в случае байта: 250 + 10 = 5, поскольку байт переполняется на 255. Однако это нормально, поскольку оба массива переполняются, и вероятность ложного отчета очень мала.Я верю, что если мы можем изо всех сил стараться, мы можем доказать это математически, это нормально.
Однако, если вам лень выполнять математику и требуется абсолютная определенность, вы можете использовать этот метод быстрой фильтрации всех отрицательных кандидатов, а затем отсортировать + сравнить только положительные кандидаты.Тем не менее, это будет намного быстрее, чем использование только сортировки + сравнения.
ПРИМЕЧАНИЕ3: Просто понял, что вы используете JS, а JS немного запутан с большими числами и не переполняется арифметическимиопераций.
Однако он переполняется логическими операторами, а алгоритм CRC использует xor, так что вы хороши.Это алгоритм CRC: https://en.wikipedia.org/wiki/Cyclic_redundancy_check
И это реализация с открытым исходным кодом: https://github.com/emn178/js-crc/blob/master/src/crc.js На prima vista, кажется, следует алгоритм, однако я не уверен, насколько оно качественное, поэтомуваша должная осмотрительность!