Участник:Masha — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Новая страница: «== Алгоритм декодирования кодов Прюфера == Пусть есть массив <tex>P = {p_1, ..., p_{n - 2}}</tex> - код Прю…»)
 
(Алгоритм декодирования кодов Прюфера)
Строка 1: Строка 1:
== Алгоритм декодирования кодов Прюфера ==
+
== Алгоритм декодирования кодa Прюфера ==
 
Пусть есть массив <tex>P = {p_1, ..., p_{n - 2}}</tex> - код Прюфера какого-то дерева и массив вершин дерева <tex>V</tex>. Для получения дерева по коду Прюфера необходимо выполнять следующие действия, пока массив <tex>P</tex> не станет пустым. В массиве <tex>V</tex> найти вершину <tex>v_{min}</tex> с минимальным номером, не содержащуюся в массиве <tex>P</tex>. Добавить ребро {<tex>p_1</tex>, <tex>v_{min}</tex>} в дерево, удалить найденные вершины из соответствующих массивов. В конце работы алгоритма в массиве <tex>V</tex> останется две вершины, составляющих последнее ребро дерева.
 
Пусть есть массив <tex>P = {p_1, ..., p_{n - 2}}</tex> - код Прюфера какого-то дерева и массив вершин дерева <tex>V</tex>. Для получения дерева по коду Прюфера необходимо выполнять следующие действия, пока массив <tex>P</tex> не станет пустым. В массиве <tex>V</tex> найти вершину <tex>v_{min}</tex> с минимальным номером, не содержащуюся в массиве <tex>P</tex>. Добавить ребро {<tex>p_1</tex>, <tex>v_{min}</tex>} в дерево, удалить найденные вершины из соответствующих массивов. В конце работы алгоритма в массиве <tex>V</tex> останется две вершины, составляющих последнее ребро дерева.
  
Строка 11: Строка 11:
 
       P.erase(0)
 
       P.erase(0)
 
       V.erase(indexOf(x))
 
       V.erase(indexOf(x))
      '''if''' P.count(u) == 0:
 
          V.push(u)
 
 
     G.push({v[0], v[1]})
 
     G.push({v[0], v[1]})
 
     '''return''' G
 
     '''return''' G

Версия 11:44, 29 декабря 2020

Алгоритм декодирования кодa Прюфера

Пусть есть массив [math]P = {p_1, ..., p_{n - 2}}[/math] - код Прюфера какого-то дерева и массив вершин дерева [math]V[/math]. Для получения дерева по коду Прюфера необходимо выполнять следующие действия, пока массив [math]P[/math] не станет пустым. В массиве [math]V[/math] найти вершину [math]v_{min}[/math] с минимальным номером, не содержащуюся в массиве [math]P[/math]. Добавить ребро {[math]p_1[/math], [math]v_{min}[/math]} в дерево, удалить найденные вершины из соответствующих массивов. В конце работы алгоритма в массиве [math]V[/math] останется две вершины, составляющих последнее ребро дерева.

Реализация

function buildTree(P, V):
   while not P.empty():
      u = P[0]
      v = min(x [math]\in[/math] V: P.count(x) == 0)
      G.push({u, v})
      P.erase(0)
      V.erase(indexOf(x))
   G.push({v[0], v[1]})
   return G