Беллман Форд производительность

   for(int k=1; k<=Vertices-1; k++){   
        /*Every sublist has found the shortest to its adjacent vertices
        thats why starting loop from k-1 then going into every edge of a vertex
        and updating the shortest distance from it to the other.
        */
        for(int i=k-1; i<Vertices; i++){
            // Visiting every Vertex(V) and checking distance of its edges to some other vertex Vo.
            for(int j=0; j<Edges[i].size(); j++){
                int v = Edges[i].get(j).src;
                int edge = Edges[i].get(j).dest;
                int weight = Edges[i].get(j).weight;
                // if exisiting distance is not infinity and from source to that vertex the weight is less then update it
                if (dist[v]!=Integer.MAX_VALUE && dist[v]+weight<dist[edge]){
                    dist[edge]=dist[v]+weight;
                    //updating parent of destination to source.
                    parent[edge] = v;
                }
            }
        }
    }

Я реализовал bellman ford из списка (LinkedList), поскольку алгоритм запускает V-1 (цикл 1) раз и, заходя в каждую вершину (в цикле 2), проверяет все его ребра (в цикле 3) и обновляет расстояния пунктов назначения. Я Меня здесь смущает, что временная сложность по-прежнему будет O (VE) или изменена, я видел, как эта работа выполняется в 2 цикла, поэтому, а также будет ли найден кратчайший путь для каждой проходящей вершины, или я должен начать его с 0?


person SajUsman    schedule 02.12.2017    source источник
comment
Подумайте о том, чтобы добавить больше деталей в этот пост, это повысит вероятность того, что вы получите качественные ответы.   -  person Thomas Smyth    schedule 02.12.2017


Ответы (1)


Поскольку вы проверяете все ребра на время V, сложность по-прежнему O(VE). для получения дополнительной информации прочитайте эту.

person Alireza    schedule 02.12.2017
comment
Итак, я должен установить второй цикл на 0, чтобы достичь каждого V раз, верно? - person SajUsman; 02.12.2017
comment
@SajUsman, если вы собираетесь изменить сложность, общая сложность не будет меньше O (VE). Предположим, у вас есть 2 цикла, каждый из которых повторяет n, сложность будет O (n ^ 2). Теперь представьте, что внутренний цикл выполняется 1,2,...n раз. Вычисление этой суммы (1+2+...n) приведет к n(n+1)/2, что также равно O(n^2). - person Alireza; 03.12.2017
comment
ах, теперь я понимаю, что он всегда будет выполняться n раз, и, таким образом, после удаления констант мы все равно получим n раз сложности - person SajUsman; 03.12.2017