Реализация заданного алгоритма сверки - PullRequest
6 голосов
/ 22 сентября 2009

Я ищу реализации алгоритма согласования множеств. Проблема заключается в следующем: есть два набора с элементами, идентифицированными по некоторому относительно компактному значению (например, UUID или MD5 / SHA1 / независимо от хэша), расположенными на разных машинах. Эти наборы отличаются относительно небольшим количеством элементов, и я хочу синхронизировать эти наборы при передаче минимального объема данных. Большинство гугл-гуглов ведет здесь . Это реализация GPL того, что кажется современным подходом к решению задачи. Проблема в том, что я не могу использовать код GPL в своем приложении. Скорее всего, мне придется переопределить это сам, используя что-то вроде nzmath, но, возможно, есть другие реализации (предпочтительно Python или C / C ++), или, может быть, есть другие более приятные алгоритмы?

Ответы [ 3 ]

1 голос
/ 22 октября 2009

Этот код не в моей голове, и поэтому подпадает под действие любой лицензии, применимой к образцам кода на этом сайте.

# 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'
1 голос
/ 22 сентября 2009

Неспособность использовать GPL часто является вопросом абстракции; то есть, если у вас проблемы с лицензией. Поэтому, если вы создаете небольшое приложение GPL (выпущенное под GPL), вы можете вызвать это из своего приложения не-GPL. Зачем заново изобретать колесо?

Особенно, если вы можете использовать уже существующий скрипт на python: почему бы не использовать его? Конечно, все по-другому, если вы не можете разоблачить алгоритмы повторного объединения элементов.

0 голосов
/ 20 ноября 2014

Проект Synchronizing Keyserver обеспечивает эффективное согласование наборов в OCaml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...