Вот что я знаю о проблеме обхвата в неориентированных невзвешенных графах. Прежде всего, если обхват четный, вы можете определить его за времени - это старый результат Итай и Родех (А. Итай и М. Родех. Нахождение минимальной цепи в графе. SIAM J. Computing, 7 (4): 413-423, 1978.). Идея такова: для каждой вершины графа запускайте BFS, пока не закроется первый цикл (затем остановитесь и перейдите к следующей вершине); вернуть самый короткий найденный цикл. Если обхват даже самый короткий найденный цикл будет самым коротким циклом. В частности, если ваш график является двудольным, он всегда вычисляет обхват. Однако, если обхват нечетный, вы найдете цикл длины или , так что вы можете быть на .г г г + 1 1O(n2)ggg+11
Теперь настоящая проблема с нечетным обхватом состоит в том, что ваш алгоритм неизбежно должен был бы определить, есть ли на графике треугольник. Лучшие алгоритмы для этого используют умножение матриц: min { время для графов на узлах и ребрах. Итай и Родех также показали, что любой алгоритм, который может найти треугольник в плотных графах, также может вычислять обхват, поэтому у нас есть алгоритм временного обхвата. Однако время выполнения для обхвата в разреженных графиках не так хорошо, как для поиска треугольников. Лучшее, что мы знаем в целом, это . В частности, то, что кажется самым сложным, - это найти алгоритм времени для графов сn 2,38 , м 1,41 ) n m O ( n 2,38 ) O ( m n ) o ( n 2 ) m = O ( n ) .O(n2.38,m1.41)nmO(n2.38)O(mn)o(n2)m=O(n)
2n1+1/k2k, Таким образом, чем плотнее график, тем легче найти хорошее приближение к обхвату. Когда график очень разреженный, обхват может быть существенно большим.