Следующий псевдокод из первой главы онлайновой версии предварительного просмотра Руководства по разработке алгоритмов (стр. 7 из этого PDF).
Пример неправильного алгоритма, но я все еще очень хочу его понять:
[...] Двумя идеями может быть многократное соединение ближайшей пары конечные точки, соединение которых не создает проблемы, например преждевременное прекращение цикла. Каждая вершина начинается как собственная единственная цепочка вершин. После слияния всего вместе мы закончим с одной цепью, содержащей все точки в ней. Подключение конечные конечные точки дают нам цикл. На любом этапе выполнения этой эвристики ближайшей пары мы будем иметь набор одиночных вершин и вершинно-дизъюнктивные цепочки, доступные для слияния. В псевдокоде:
ClosestPair(P)
Let n be the number of points in set P.
For i = 1 to n − 1 do
d = ∞
For each pair of endpoints (s, t) from distinct vertex chains
if dist(s, t) ≤ d then sm = s, tm = t, and d = dist(s, t)
Connect (sm, tm) by an edge
Connect the two endpoints by an edge
Обратите внимание, что sm
и tm
должны быть s
m
и t
m
.
Прежде всего, я не понимаю, что означало бы "из разных вершинных цепей". Во-вторых, i
используется как счетчик во внешнем цикле, но i
сам по себе никогда не используется нигде! Может ли кто-нибудь умнее меня объяснить, что здесь происходит?