Linear algorithm for finding the diameter of a tree

I have the following code to find the diameter of a tree:

ALGORITHM: TREE_DIAMETER (T)

maxlength ← 0
for s ← 0 to s < |V[T]|
      do temp ← BSF(T, S)
            if maxlength < temp
                   maxlength ← temp
                   increment s by 1
return maxlength

But this algorithm does not work in linear time. Keeping the details of the above code as large as possible (for example: using BSF), is it possible to optimize it to linear time? You can use pseudo code.

+4
source share
2 answers

:
1) v.
2) v BFS ( u).
3) u BFS ( t).
distance(u, t) - .
BFS , .

+9

, :

s t, d(u, v) node u node v.

node X, 2 :

  • X ;
  • X .

1 , , (2) ( , @user2040251), d(X, s), d(X, t). - , d(X, u), u s t , d(s, t), . , (3), d(s, t).

2, (2), 2 :

  • , X, 1 ,
  • , X, .

2.1 Y. - 1 , , Y , s, t. , X, s, t. , (3), d(s, t).

2.2 , X Z. X Z , X, Z, s, t , , node v X Z, node W s t. X Z - , X, d(X, V) + d(V, W) + d(W, t) < d(X, Z). d(Z, V) + d(V, W) + d(W, s) < d(X, Z). : d(X, Z) > 2d(V, W) + d(s, t) > d(s, t), , s to t - .

, 2.2:

s             Z
|             |
|             |
|             |
W-------------V
|             |
|             |
|             |
t             X

, :

d(X, V) + d(V, W) + d(W, t) < d(X, Z), X Z - , X;

d(Z, V) + d(V, W) + d(W, s) < d(X, Z), X to Z - , Z;

:

d(X, Z) + 2d(V, W) + d(s, t) < 2d(X, Z)

, d(X, Z) > 2d(V, W) + d(s, t) > d(s, t), .

+7

All Articles