Ниже приведен мой псевдокод для преобразования подключенного графика в MST с использованием алгоритма Prim. Однако я получаю сложность n^3, а не n^2. Пожалуйста, помогите мне разобраться в необязательных шагах. У меня есть матрица смежности «a», чтобы сохранить вес графов графа и двумерную матрицу «проверить», сохраняя «1» для вершин, уже находящихся в дереве, и «0» для остальных.Оптимизация MST с использованием алгоритма Prim от O (n^3) до O (n^2)
Также обратите внимание, что это также можно сделать в nlog (n), но я не хочу ссылаться на какой-либо существующий псевдокод и хочу попробовать его самостоятельно. Я был бы признателен за ответ, оптимизирующий мой собственный подход.
Initialize check. //check[0][1]==1
while(--no_of_vertices)
{
minimum_outer = infinite
for(i from 1 to no_of_vertices)
{
minimum_inner = infinite
select i from check having value 1
for(j from 1 to no_of_vertices)
{
select j from check having value 0
if(a[i-j] < minimum_inner)
minimum_inner = a[i-j]
temp_j = j;
}
if(minimum_inner<minimum_outer)
{
minimum_outer = minimum_inner
final_i = i
final_j = temp_j
}
}
//until here basically what I have done is, selected an i-j with lowest
//weight where "i" is chosen from vertices already in MST and "j" from
//remaining vertices
check[final_j][1] = 1
print final_i - final_j
cost_of_mst += a[final_i][final_j]
}
Спасибо за ответ. Но как я спросил в вопросе, есть ли способ изменить мой собственный псевдокод, а не пойте еще один, как тот, который вы предложили. Я хотел знать, какие изменения я могу сделать в своем решении выше. – nitinsh99
Я добавил исправление к вашему коду, так как вы видите, что произошли значительные изменения, поскольку логика, которую он реализует, отличается, я не думаю, что вы можете сделать небольшую ревизию, если вы хотите, чтобы код работал с 'O (n^2) 'время –
Спасибо, что помогло. – nitinsh99