Это вопрос интервью, на который я пытаюсь ответить:
Учитывая социальную сеть, содержащую членов
N
и файл журнала, содержащий временные меткиM
, в которые раз пары членов формировали дружеские отношения, разработайте алгоритм для определения самого раннего времени, когда все члены подключены (т.е. каждый член друг друга друга... друга). Предположим, что файл журнала сортируется по метке времени, и эта дружба является отношением эквивалентности. Время работы вашего алгоритма должно бытьM log N
или лучше и использовать дополнительное пространство пропорциональноN
.
Первое, что я подумал, было... "Я не могу этого сделать!".
Но потом я подумал, как эту социальную сеть можно выразить как структуру данных. Union-find - это структура данных, которая может быть использована. Теперь я должен понять, что это означает, когда все участники подключены. Как я могу просмотреть фактическую структуру данных и как она выглядит, когда каждый член дружит друг с другом?
Я думаю только до тех пор, пока я не смогу понять визуально или концептуально, как система будет полностью подключена, я могу начать выяснять, как найти временную метку, соответствующую этому событию.