Эта проблема имеет простое решение, если наша целевая временная сложность O (| V | * | E |) или O (V ^ 3) и тому подобное. Однако мой профессор недавно дал нам задание с выражением проблемы:
Пусть G = (V, E) - связный неориентированный граф. Напишите алгоритм, определяющий, содержит ли G треугольник в O (| V | + | E |).
В этот момент я в тупике. Wikipedia говорит:
Можно проверить, нет ли графика с m ребрами без треугольника во времени O (m ^ 1.41).
Не было упоминания о возможности более быстрого алгоритма, кроме того, который работает на компьютере Quantum. После этого я начал прибегать к лучшим источникам. Вопрос о Math.SE связал меня с этой статьей, в которой говорится:
Самый быстрый алгоритм, известный для нахождения и подсчета треугольников, основан на быстром матричном произведении и имеет сложность времени O (n ^ ω), где ω < 2.376 - показатель быстрой матрицы.
И что там, где я начал понимать, что, может быть, нас обманывают в работе над нерешенной проблемой! Этот подлый профессор!
Однако, я все еще немного скептически настроен. В документе говорится "поиск и подсчет". Является ли это эквивалентом проблемы, которую я пытаюсь решить?
TL; DR: Меня обманывают, или я пропускаю что-то настолько тривиальное?