Algorithms file Number the thoughts put into this file so that we can easily refer to them elsewhere (such as in comments reading "See Note 1 in ALGORITHMS.txt") Note 1: See equation 1 (page 2): intersection(Path(src,i),Path(src,j)) = Path(src,Cp) Cp is the first parent in common of i and j Thus, R(intersection(Path(src,i),Path(src,j))) = R(Path(src,Cp)) We can compute R(Path(src,i)) for each node and store it in the struct. Then, finding R(intersection(Path(src,i),Path(src,j))) is simply a matter of determining Cp (or rather, the node that Cp corresponds to) This is pretty much a pre-order tree traversal, and shouldn't be hard. Note 2: See equation 1 (page 2): I think this equation can be rearranged to involve partial results for capacitance as well. Since the R(common path) = R(common parent) (as in note 1), the part of the sum corresponding to all nodes that share a common parent (but on the other branch from the one under examination) with the node under examination can be computed and stored in that node (or in one of its children). Example: Say that we are examining node x in the diagram. Look at its parent, node u. This is the node on the path common to x and all children on u's left side. Since the equation can be simplified to: (R' is the computed path-to-src R in the struct) sum of all (Ci' * R'u^2 / R'x^2), the resistances can be removed and treated as constants for evaluating all children on u's left side. This leaves Ci' in the sigma. So we can sum all of the left-side children of u and store that as a property of u (or, as I prefer, as a property of v)