Кіріспе
Уақытты бағалау үшін ең жақсы көздерді таңдау алгоритмі. Кесісу алгоритмі – бұл көптеген қате уақыт көздерінен дәл уақытты бағалауға арналған көздерді таңдау үшін қолданылатын келісім алгоритмі. Ол қазіргі заманғы Желілік уақыт протоколының құрамдас бөлігі болып табылады. Бұл Марзулло алгоритмінің өңделген түрі. Марзулло алгоритмі көздердің ең көп санымен сәйкес келетін ең кіші интервалды қайтарады, бірақ қайтарылған интервал міндетті түрде кесісудегі барлық көздердің орталық нүктесін (есептелген қателік) қамтымайды. Кесісу алгоритмі Марзулло алгоритмі қайтаратын интервалды қайтарады, бірақ ол орталық нүктелерді қамтитындықтан үлкенірек болуы мүмкін. Бұл үлкен интервал қосымша статистикалық деректерді пайдаланып интервал ішіндегі нүктені таңдауға мүмкіндік береді, соның арқасында қайталап орындау кезінде тербеліс азаяды.
The intersection algorithm is an agreement algorithm used to select sources for estimating accurate time from a number of noisy time sources. It forms part of the modern Network Time Protocol. It is a modified form of Marzullo's algorithm. While Marzullo's algorithm will return the smallest interval consistent with the largest number of sources, the returned interval does not necessarily include the center point (calculated offset) of all the sources in the intersection. The intersection algorithm returns an interval that includes that returned by Marzullo's algorithm but may be larger since it will include the center points. This larger interval allows using additional statistical data to select a point within the interval, reducing the jitter in repeated execution.
Әдіс
M c ± r түріндегі интервалдарды (бұл [c−r, c+r] дегенді білдіреді) ескере отырып, алгоритм M−f көздері бар интервалды табуға тырысады. f мәні қателік бар дереккөздердің саны ретінде көрсетіледі (нақты мән сенімділік диапазонынан тыс). Ең жақсы бағалау – ең аз қателік белгілерін (f) қамтитын интервал. Нәтижелер f < M/2 болса жарамды деп есептеледі, әйтпесе алгоритм интервалдың орнына қате (FAILED) қайтарады. Киылысу алгоритмі <оффсет, тип> түйірлер тізімін жасаудан басталады. Әрбір интервал үшін үш жазба болады: төменгі нүкте, ортаңғы нүкте және жоғарғы нүкте, тиісінше -1, 0 және +1 типтерімен белгіленеді. Осылайша, c ± r интервалы <c−r,−1>, <c,0> және <c+r,+1> жазбаларын тудырады. Бұл жазбалар оффсет бойынша сұрыпталады. Айтмалылар: Бұл алгоритмде f – жалған тікелейлердің саны, endcount және midcount – бүтін сандар. Lower және upper – оффсет мәндері. [ең жақсы f-ті инициализациялау] f=0-ден бастаңыз, барлық кіріс интервалдары жарамды деп есептелінеді. Егер интервал табылмайтын болса, f мәні f ≥ M/2 болғанға дейін немесе интервал табылғанға дейін әр ретте 1-ге арттырылады. [инициализациялау] endcount=0 және midcount=0. [төменгі нүктені табу] Тізімнің басынан (ең төменгі оффсеттен) бастап, әрбір түйірді ретімен қарастырыңыз. endcount = endcount - тип. Егер endcount ≥ M−f болса, онда lower = оффсет және 3-қадамға өтіңіз, себебі (мүмкін) төменгі нүкте табылды. Егер тип = 0 болса, онда midcount = midcount + 1. Келесі түйірмен қайталаңыз. Егер тізімнің соңына жетсе, 6-қадамға өтіңіз. [алдын ала төменгі нүкте табылды, жоғарғы нүктені табу үшін инициализациялау] endcount=0 деп қойыңыз. [орталық нүктелердің санын анықтау] Тізімнің соңынан бастап, төменгі оффсеттерге қарай жұмыс істеңіз. endcount = endcount + тип. Егер endcount ≥ M−f болса, онда upper = оффсет, 5-қадамға дайындық. Егер тип = 0 болса, онда midcount = midcount + 1. Келесі түйір үшін қайталаңыз. Егер тізімнің соңына жетсе, 6-қадамға өтіңіз. Егер lower ≤ upper және midcount ≤ f болса, онда [lower, upper] интервалын сенімділік интервалы ретінде қайтарыңыз. [жалған белгілердің санын арттыру] f = f + 1. Егер f ≥ M/2 болса, тоқтатыңыз және FAILED қайтарыңыз, әйтпесе 1-қадамға өтіңіз.
if lower ≤ upper and midcount ≤ f then return interval [lowerendpoint, upperendpoint] as resulting confidence interval. [increment number of falsetickers] f = f+1. If f ≥ M/2 then terminate and return FAILED, otherwise goto step 1.