集合协调算法的实现

2024-05-26 07:46:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找集合协调算法的实现。问题如下:在不同的机器上有两个集合,其中的元素由一些相对紧凑的值(例如UUID或MD5/SHA1/whatever hash)标识。这些集合在相对较少的元素上有所不同,我希望在传输最少数据量的同时同步这些集合。大部分的搜索线索。这是GPL对这项任务的最新方法的实现。问题是我不能在我的应用程序中使用GPL代码。很可能我必须自己使用NZMaX之类的东西来重新实现它,但是也许还有其他的实现(最好是Python或C/C++),或者还有其他更好的算法?


Tags: 方法代码算法机器应用程序元素uuidhash
3条回答

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

这段代码超出了我的理解范围,因此在本网站的代码样本申请许可证时都会涉及到这段代码。

# 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'

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

尤其是如果您可以使用已经存在的python脚本:为什么不利用它呢?当然,如果不能公开元素重新整合算法,情况就不同了。

相关问题 更多 >