Алгоритм сравнения целых чисел N бит - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь написать алгоритм для установления корреляции между n целыми числами битов для значения «1».

Вот пример 5-битного целого числа: 0,1,0,0,1

Я хочу установить процент корреляции между этим целым числом и набором из N других целых чисел.

Например, целое число A (0,1,0,0,1) и целое число B (0,1,0,0,0) имеют корреляцию 0,5 для значения «1» как только второе бит совпадает. В моей базе данных Firebase к каждому user_ID прикреплено одно целое число n бит, которое я хочу сопоставить с целым числом n бит каждого другого пользователя моего приложения, чтобы получить тип корреляции между каждым пользователем. Распределение общих корреляций между пользователями будет следовать гауссовой кривой, которую я хочу использовать в будущем, чтобы сопоставлять пользователей друг с другом.

Например: я хочу, чтобы пользователь А сопоставлялся с каждым другим пользователем, причем эти совпадения отсортированы по убыванию порядка сродства (от высокой к низкой корреляции между их n-битными целыми числами).

Ребята, вы хоть представляете, как я мог бы выполнить алгоритм, чтобы установить корреляцию между числом пользователей N, а затем выполнить другой алгоритм, чтобы отсортировать эти корреляции от высокого к низкому? Любая помощь будет принята с благодарностью.

Спасибо за ваше время,

Maxime

1 Ответ

1 голос
/ 27 марта 2019

вы можете использовать операцию и для получения результата R.

Пример:

A = 9  = 01001
B = 8  = 01000
C = 7  = 00111
D = 31 = 11111

R = A & B gives 8 = 01000, the correlation is counting the ones: R/A = 1/2 = 0,5. 

R = A & C gives 1 = 00001, the correlation: R/A = 1/2 = 0,5.

R = A & D gives 9 = 01001, R/A = 2/2 = 1.

Здесь у нас проблема.Вы можете решить эту проблему, используя максимальное из тех, что встречаются в num, например R / max (A, D)

Я считаю, что лучше использовать общее количество бит (здесь 5).

результатов будет.

corr AB = 1/5 = 0,2
corr AC = 1/5 = 0,2
corr AD = 2/5 = 0,4
corr CD = 3/5 = 0,6
...