Зонд с экспоненциальным увеличением, а затем двоичный поиск с наименьшим использованием в распределенной хэш-таблице - словарь

Мне нужен совет, как подойти к этой задаче. Автор создал функцию find_next_free_dataset_num(node) и ищет свободные слоты в распределенной хеш-таблице. Этот DHT использует словарь, как интерфейс, который переопределяет __setitem__, __getitem__ и __contains__. Какой хороший дизайн. Но эта функция теперь использует линейное зондирование для поиска нового неиспользуемого слота для предсказуемого ключа. Таким образом, вопрос заключается в том, решает ли ее экспоненциальная num = num*num + 1 и как реализовать бинарный поиск по новому значению num между 0 и используемым слотом num?

def predictable_key(node, num):
    return "monitor_dataset_{0}_{1}".format(node.get_address(), str(num))


def find_next_free_dataset_num(node):
    # FIXME probe with exponential increase then binary search lowest unused
    num = 0
    while node[predictable_key(node, num)] is not None:
        _log.info("Dataset {0} already exists!".format(num))
        num += 1
    return num

0 ответов

Другие вопросы по тегам