2014-12-28 5 views
0

Я хотел бы получить некоторую помощь для анализа временной сложности следующей функции.Сложность времени для переноса графика

Графы хранят все вершины в списке векторов. Каждая вершина имеет вектор, который хранит края вершин. Этот вектор называется соседи.

Graph 
Graph::transpose() const 
{ 
    Graph Graph_T; 

    for(auto& vertex : list) 
    { 
     Graph_T.insert_vertex(vertex -> get_name()); 
    } 

    for(auto& vertex : list) 
    { 
     for(auto& edges : vertex -> neighbours) 
     { 
     Graph_T.insert_edge(edges,vertex); 
     } 
    } 
    return Graph_T; 
} 

Первый за цикл, очевидно, V | , где | V | - число вершин.

Вторая петля также | V | но имеет третью петлю, расположенную внутри. Моя догадка заключается в том, что третья сложность времени цикла равна | E |, где | E | - количество ребер в графе.

Сумма: Сложность времени равна/theta (V + V + E) =/theta (E + V).

Является ли мой анализ правильным?

+1

Какова временная сложность 'insert_vertex' и' insert_edge'? – Codor

+0

Оба метода работают в постоянное время. –

ответ

1

Я бы сказал, что O (| V |^2), поскольку существует двойной для: внешний выполняется | V | раз, а внутренняя - максимум | V | раз.

+0

Это правда. Но это также можно выразить с помощью E, я думаю. +1 – keyser

+0

У вас это есть. Правильно – HAL9000

+0

Внешние петли цикла в O (V) и внутренние работают в O (E), что означает, что transpose() выполняет O (EV), а не в O (V^2). Поскольку E в худшем случае равно V^2, транспонирование() также может быть выражено как O (V^3). –