4

イベントログとそのベクタークロックで構成されるログファイルがたくさんあります。ここで、任意の2つのイベントのベクトルクロックを比較するときに、ベクトルクロックの各コンポーネントの二乗和の合計のルートを取り、その結果を使用して別のイベントの結果と比較し、小さい方の値が他の値よりも優先されますか?

4

1 に答える 1

3

いいえ、それを1つの値に減らす方法があれば、ベクトルの代わりにそれを使用します。

ベクタークロックを比較するには、ベクター全体を区分的に比較する必要があります。

class VectorClock {
    private long[] clocks;
    ...
    /**
     * This is before other iff both conditions are met:
     * - each process's clock is less-than-or-equal-to its own clock in other; and
     * - there is at least one process's clock which is strictly less-than its
     *   own clock in other
     */
    public boolean isBefore(VectorClock other) {
        boolean isBefore = false;
        for (int i = 0; i < clocks.length; i++) {
            int cmp = Long.compare(clocks[i], other.clocks[i]);
            if (cmp > 0)
              return false; // note, could return false even if isBefore is true
            else if (cmp < 0)
              isBefore = true;
        }
        return isBefore;
    }
}

最小値と最大値だけを使用して、精度の低いパスを実行できます。

class VectorClockSummary {
    private long min, max;
    ...
    public tribool isBefore(VectorClockSummary other) {
        if (max < other.min)
            return true;
        else if (min > other.max)
            return false;
        else
            return maybe;
    }
}
于 2013-03-16T04:46:33.707 に答える