An arc-factored dependency parser scores every head–dependent arc i → j with S[i, j]
and decodes the highest-scoring single-root tree. Bock's procedure (1971) solves the same problem as a
minimum-cost rooted arborescence on the cost matrix C[i, j] = −S[i, j].
Unlike Chu–Liu/Edmonds, it never builds contracted graphs: it keeps the original matrix and node indices and represents
contracted circuits by shared labels. The reformulation (Algorithm 1 in the paper) separates its interleaved Algol control flow into explicit phases:
- Candidate search. For the current column K and its active component H, pick the first arc
entering H from outside that minimizes the adjusted cost C[i, j] − U1[j] (dependents scanned in increasing order, then heads).
- Column adjustment. Add that minimum to U1 for every processed column in H, so the chosen candidate has adjusted cost zero.
- Backward trace. Follow starred (provisional) predecessors from the candidate's head, collecting visited components in an explicit
TRACE set (the original marks them by temporarily negating SPAN labels) and writing the candidate into empty bar entries.
- Contraction. If the trace returns to H, a circuit has formed: every vertex in
TRACE receives the active label
(the original assigns a fresh label) and the search repeats.
- Star-and-bar transfer. Otherwise install the candidate as a star; each displaced star is replaced using the barred arc reference stored at its dependent, until no star is displaced.
Worked example (from the paper). Nodes 0, 1, 2 with root 0 and arcs 0→1, 0→2, 1→2, 2→1 of costs 50, 60, 10, 20.
At K = 1 the procedure stars 2→1; at K = 2 selecting 1→2 closes the circuit 1→2→1, which is contracted.
The renewed search compares adjusted costs 50 − 20 = 30 (0→1) and 60 − 10 = 50 (0→2), selects 0→1, and the transfer
yields the arborescence 0→1→2 of cost 50 + 10 = 60.
Formal results.
- Faithfulness to original Bock: in exact arithmetic, with the same scan order and first-minimum tie rule, the reformulation returns the same predecessor array and objective value as the original Algol procedure (or both report infeasibility).
- Theorem 1 (coupled Bock–Tarjan executions): under a prescribed component schedule and common original-arc tie order, Bock's starred arc set equals the branching returned by corrected Tarjan recovery at every completed column prefix, so the final arborescences coincide even when the optimum is not unique.
- Theorem 2 (single-root parsing equivalence): the Dozat-derived CL/E used in Stanza (root reweighting) and Bock single-root inference (enumerating the sole root child) both solve the single-root parsing objective and attain the same optimal score.
- Complexity: the reformulation runs in O(n3) time with O(n2) storage, matching the original Bock procedure and the Dozat-derived CL/E bound for rooted arborescences; the implemented single-root Bock procedure is O(n4) in the worst case.