隣接リストを表すためにこのリンクをたどっています。
http://www.geeksforgeeks.org/graph-and-its-representations/
次のように、コードの一部に単純な疑問があります。
// A utility function to print the adjacenncy list representation of graph
void printGraph(struct Graph* graph)
{
int v;
for (v = 0; v < graph->V; ++v)
{
struct AdjListNode* pCrawl = graph->array[v].head;
printf("\n Adjacency list of vertex %d\n head ", v);
while (pCrawl)
{
printf("-> %d", pCrawl->dest);
pCrawl = pCrawl->next;
}
printf("\n");
}
}
ですから、ここでは、すべてのV
whileループが実行されるときに、d
回言います。ここで、dは各頂点の次数です。
時間の複雑さは
d0 + d1 + d2 + d3 ....... +dV where di is the degree of each vertex.
これはすべてO(E)を合計しますが、リンクは時間の複雑さがO(| V | + | E |)であることを示しています
理解の何が問題かわからない。ここで必要ないくつかの助け
ここで重要なことは、時間の複雑さが有効であるためには、考えられるすべての状況をカバーする必要があるということです。
前に述べたように、| E |外側のループでのみ行われる作業を考慮する必要があるほど、かなり小さい場合があります。したがって、| V |を単純に削除することはできません。期間。