Algorithm for merging sets that share at least 2 elements

后端 未结 5 1212
情歌与酒
情歌与酒 2021-02-05 16:11

Given a list of sets:

  • S_1 : [ 1, 2, 3, 4 ]
  • S_2 : [ 3, 4, 5, 6, 7 ]
  • S_3 : [ 8, 9, 10, 11 ]
  • S_4 : [ 1, 8, 12, 13 ]
  • S_5 : [ 6, 7,
5条回答
  •  遇见更好的自我
    2021-02-05 16:40

    Let there be a list of many Sets named (S)
    
    Perform a pass through all elements of S, to determine the range (LOW .. HIGH).
    
    Create an array of pointer to Set, of dimensions (LOW, HIGH), named (M).
    
    do
        Init all elements of M to NULL.   
    
        Iterate though S, processing them one Set at a time, named (Si).
    
            Permutate all ordered pairs in Si. (P1, P2) where P1 <= P2.
            For each pair examine M(P1, P2)
                if M(P1, P2) is NULL
                    Continue with the next pair.
                otherwise
                    Merge Si, into the Set pointed to by, M(P1, P2).
                    Remove Si from S, as it has been merged.
                    Move on to processing Set S(i + 1)
    
            If Si was not merged, 
                Permutate again through Si
                For each pair, make M(P1, P2) point to Si.
    
    while At least one set was merged during the pass.
    

    My head is saying this is about Order (2N ln N). Take that with a grain of salt.

提交回复
热议问题