Для случая, когда вы можете вычислить веса, используя функцию w (i, j), вы можете вычислить минимальное остовное дерево в пространстве O (n) вместо O (n ^ 2), используя алгоритм Прима (https://en.wikipedia.org/wiki/Minimum_spanning_tree#Classic_algorithms).
На каждом этапе поддерживать набор T узлов в дереве, а для каждого узла, не входящего в дерево, поддерживать наименьшее расстояние от этого узла до любого узла в дереве.
В начале Tэто узел 0, и для каждого другого узла вы вычисляете наименьшее расстояние от узла 0 до этого узла.
На каждом этапе выберите узел, не входящий в дерево с наименьшим расстоянием. Теперь вычислите расстояние от этого узла до всех остальныхузлы не в дереве. Если это меньше, чем их текущее наименьшее расстояние, обновите это наименьшее расстояние.
Стоимость хранения составляет O (n) для поддержания T и O (n) для поддержания для каждого узла, не входящего в деревопримечание о наименьшем расстоянии от дерева до этого узла.