Алгоритм Марзулло (винайдений Кейтом Марзулло[en] в рамках своєї кандидатської дисертації в 1984 році) — це алгоритм узгодження даних, що використовується для вибору більш точних джерел для оцінки точного часу з ряду джерел часу. Перероблена версія цього алгоритму, названа «алгоритмом перетинів», є частиною мережевого протоколу часу (NTP).
Алгоритм Марзулло ефективний (в термінах часу) для отримання оптимального значення з набору оцінок з їх довірчими інтервалами, де оптимальне значення може лежати поза довірчим інтервалом для деяких джерел. Найкращою оцінкою слід вважати найменший інтервал, який відповідає найбільшій кількості джерел.
Припустимо, що ми маємо такі оцінки: 10 ± 2, 12 ± 1 і 11 ± 1 в інтервалах [8,12], [11,13] і [10,12]. Їх перетином буде інтервал [11,12] або точка 11.5 ± 0.5, що відповідає всім трьом джерелам.
Якщо натомість діапазони становлять [8,12], [11,13] та [14,15], то інтервал не відповідає всім цим значенням, але [11,12] відповідає найбільшій кількості джерел, а саме - двом.
Нарешті, якщо є діапазони [8,9], [8,12] та [10,12], то обидва інтервали [8,9] і [10,12] узгоджуються з найбільшою кількістю джерел. Ця процедура визначає інтервал. Якщо бажаний результат є найкращим значенням з цього інтервалу, тоді наївним підходом було б прийняти центр інтервалу як значення, яке було визначено в оригінальному алгоритмі Марзулло. Більш складний підхід визнав би, що це може викинути корисну інформацію з довірчих інтервалів джерел і що ймовірнісна модель джерел може повернути значення, відмінне від центру.
Зауважимо, що обчислене значення, ймовірно, краще характеризується як "оптимістичне", а не "оптимальне". Наприклад, розглянемо три інтервали [10,12], [11, 13] та [11,99,13]. Алгоритм, описаний нижче, обчислює [11,99, 12] або 11,995 ± 0,005, що є дуже точним значенням. Якщо ми підозрюємо, що одна з оцінок може бути невірною, то принаймні дві оцінки повинні бути правильними. За цієї умови найкраща оцінка є [11,13], оскільки це найбільший інтервал, який завжди перетинає щонайменше дві оцінки. Описаний нижче алгоритм легко параметризується з максимальною кількістю неправильних оцінок.
Алгоритм Марзулло починається з підготовки таблиці джерел, їх сортування та подальшого пошуку (ефективного) перетину інтервалів. Для кожного джерела існує діапазон [c − r, c + r], визначений c ± r. Для кожного діапазону таблиця матиме два кортежі форми <зміщення, тип>. Один кортеж представлятиме початок діапазону, позначений типом -1 як <c − r, −1>, а другий буде представляти кінець з типом +1 як <c + r, + 1>.
В описі алгоритму використовуються такі змінні: best (знайдена найбільша кількість інтервалів, що перекриваються), cnt (поточна кількість інтервалів, що перекриваються), beststart і bestend (початок і кінець найкращого інтервалу, знайденого поки що), i (index) , і стіл кортежів.