Упорядочение событий на основе векторных часов

У меня есть копии некоторой структуры данных и истории операций, которые произошли на ней. Каждая операция имеет метку времени с векторными часами.

Предположим, три векторных часов: VC(a) = <1, 0, 0>, VC(b) = <0, 1, 0> а также VC(c) = <1, 0, 3>, Мы можем заявить, что:

  • VC(a) случилось раньше VC(c)
  • VC(a) совпадает с VC(b)
  • VC(b) совпадает с VC(c)

На основе a happened before c На самом деле мы знаем, что есть только три действительных заказа: bac, abc а также acb,

Как мы можем вычислить все действительные заказы программно? Я попытался отсортировать векторные часы, используя happened before как < компаратор. Однако проблема в том, что VC(a) !< VC(b) а также VC(b) !< VC(a) не означает, что VC(a) == VC(b) (это только подразумевает, что они параллельны), однако это то, на что полагаются алгоритмы сортировки.

Следовательно, сортировка вышеупомянутых векторных часов приведет к a b c или же a c b но нет b a c так как a < c и ошибочно c == b и поэтому a < b,

Я знаю, что могу вычислить все перестановки, а затем отфильтровать порядки, в которых одно из причинных отношений не соблюдается, однако это ужасно неэффективно, поскольку n! перестановки из n операций.

Я предполагаю, что проблема сортировки происходит из-за того, что я пытаюсь отсортировать частично упорядоченный набор?

0 ответов

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