Implementation of set reconciliation algorithm

后端 未结 3 1998
别跟我提以往
别跟我提以往 2021-02-04 18:56

I\'m looking for implementations of set reconciliation algorithm. The problem is following: there are two sets with elements identified by some relatively compact value (e.g. UU

相关标签:
3条回答
  • 2021-02-04 19:10

    This code is out of my head, and thus covered by whatever license applies for code samples in this site.

    # given two finite sequences of unique and hashable data,
    # return needed opcodes and data needed for reconciliation
    
    def set_reconcile(src_seq, dst_seq):
        "Return required operations to mutate src_seq into dst_seq"
        src_set= set(src_seq) # no-op if already of type set
        dst_set= set(dst_seq) # ditto
    
        for item in src_set - dst_set:
            yield 'delete', item
    
        for item in dst_set - src_set:
            yield 'create', item
    

    Use as follows:

    for opcode, datum in set_reconcile(machine1_stuff, machine2_stuff):
        if opcode == 'create':
            # act accordingly
        elif opcode == 'delete':
            # likewise
        else:
            raise RuntimeError, 'unexpected opcode'
    
    0 讨论(0)
  • 2021-02-04 19:22

    The Synchronizing Keyserver project implements efficient set reconciliation in OCaml.

    0 讨论(0)
  • 2021-02-04 19:30

    Not being able to use GPL is often a matter of abstraction; that is if it is the license you have problems with. So if you create a small GPL application (released under GPL) you can call this from your non-GPL application. Why re-invent the wheel?

    Especially if you can use a python script which already exists: why not leverage it? Of course things are different if you can not expose the element reconsolidation algorithms.

    0 讨论(0)
提交回复
热议问题