实现集合协调算法

时间:2009-09-21 21:43:12

标签: python c algorithm synchronization set

我正在寻找set reconciliation算法的实现。问题在于:有两个集合,其中元素由位于不同机器上的一些相对紧凑的值(例如,UUID或MD5 / SHA1 /任何散列)标识。这些集合的元素相对较少,我希望在传输最少量的数据时同步这些集合。大多数谷歌搜索引导here。这是GPL实施的似乎是最先进的任务方法。问题是我不能在我的应用程序中使用GPL代码。最有可能的是我必须使用类似nzmath的东西重新实现它,但也许还有其他实现(最好是Python或C / C ++),或者还有其他更好的算法?

3 个答案:

答案 0 :(得分:1)

无法使用GPL通常是抽象的问题;如果它是您遇到问题的许可证。因此,如果您创建一个小型GPL应用程序(在GPL下发布),您可以从非GPL应用程序中调用它。为什么重新发明轮子?

特别是如果你可以使用已经存在的python脚本:为什么不利用它呢?当然,如果你不能公开元素重新整合算法,情况会有所不同。

答案 1 :(得分:1)

此代码不在我的脑海中,因此适用于本网站代码示例的任何许可证。

# 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

使用如下:

for opcode, datum in set_reconcile(machine1_stuff, machine2_stuff):
    if opcode == 'create':
        # act accordingly
    elif opcode == 'delete':
        # likewise
    else:
        raise RuntimeError, 'unexpected opcode'

答案 2 :(得分:0)

Synchronizing Keyserver项目在OCaml中实现了有效的集合协调。