В целом звучит как задача кластеризации. Методы тут можно разные выбрать, главное -- как метрику задать.
На вскидку, можно попробовать определить расстояние между пользователями Вася и Петя следующим образом. Для каждого захода Вася ищем ближайший заход Пети и смотрим как они различаются по времени. Получится набор времен t_1, t_2, ... t_В. Делаем тоже самое для Пети. Дальше считаем среднее значение как расстояние. Разницу можно считать на зацикленном периоде (на неделе между воскресеньем и понедельником расстояние -- 1 один день).
Расстояние между Васей и Васей будет 0. Неравенство треугольника вроде выполняется. Если Вася и Петя заходили в одно и то же время, расстояние между ними будет маленькое.
P.S. Расстояние можно посчитать за линию от числа заходов через линейный мердж сортированных массивов.