Понимание аккорда update_finger_table псевдокод - PullRequest
0 голосов
/ 01 апреля 2020

Я застрял дома прямо сейчас по той же причине, что и все остальные, и я использую Chord. Я столкнулся с тем, что мне кажется проблемой в статье, и я в замешательстве.

Псевдокод присоединения Chord включает раздел, в котором описывается, как обновить таблицы finger других узлов в сети, как только мы мы создали нашу собственную таблицу пальцев, которая выглядит следующим образом:

n.updateOthers()
  for i=1 to m
    p = find_predecessor(n - 2^(i-1))
    p.update_finger_table(n,i)

n.update_finger_table(s,i)
  if s in [n,n.finger[i].node)
    n.finger[i].node = s
    p = predecessor
    p.update_finger_table(s,i)

В случае, если это полезно, для справки об этом можно найти на странице 6 статьи по аккордам, которая является http://nms.lcs.mit.edu/papers/chord.pdf тут.

update_finger_table мне кажется проблемой, а именно то, что диапазон, который он использует, кажется мне неправильным. s, находящееся между n и finger [i], недостаточно, чтобы сделать s правильным значением для finger [i]: s должно быть между finger [i] .start (ie n + 2 ^ (i)), и finger [i], чтобы иметь правильное значение. Я думаю, что, возможно, метод поиска предшественника в updateOthers имеет дело с этим при первом вызове update_finger_table, но в моей реализации это происходит по крайней мере после рекурсивного вызова p.update_finger_table, где вообще нет проверки.

Должен ли псевдокод действительно быть:

n.update_finger_table(s,i)
  if s in [n.finger[i].start,n.finger[i].node)
    n.finger[i].node = s
    p = predecessor
    p.update_finger_table(s,i)

Или я что-то неправильно понял?

...