Search code examples
algorithmfirebase-realtime-databasecorrelationmatchingbipartite

N bits integer matching algorithm


I am trying to write an algorithm to establish correlation between n bits integers for the value “1”.

Here is an exemple of a 5 bits integer: 0,1,0,0,1

I want to establish the percentage of correlation between this integer and a set of N other integers.

For example, Integer A(0,1,0,0,1) and Integer B(0,1,0,0,0) have a correlation of 0,5 for the value “1” as only the second bit is matching. In my Firebase database, I have one n bits integer attached to each user_ID that I want to match against the n bits integer of every other user of my application to get a type of correlation between each user. The distribution of the total correlations between users will follow a Gaussian curve that I want to use in the future to match users with each other.

For example: I want user A to be matched with every other user with these matches sorted by decreasing order of affinity (from high to low correlation between their n bits integers).

Do you guys have any idea how I could perform the algorithm to establish the correlation between the N number of users and then perform another algorithm to sort these correlations from high to low? Any help would be greatly appreciated.

Thank you for your time,

Maxime


Solution

  • you can use the and operation to get the Result R.

    Example:

    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.
    

    Here we have a problem. you can solve this by using the max of the ones occuring in the num like R/max(A,D)

    I believe it is better to use the total bit count (here 5).

    results would be.

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