Редактирование: Коды Прюфера

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
== Алгоритм построения кодов Прюфера ==
+
== Коды Прюфера. ==
Кодирование Прюфера переводит [[Количество помеченных деревьев#Помеченное дерево|помеченные деревья порядка <tex>n</tex>]] в последовательность чисел от <tex>1</tex> до <tex>n</tex> по алгоритму:<br>
+
Кодирование Прюфера переводит помеченные деревья порядка <tex>n</tex> в последовательность чисел от <tex>1</tex> до <tex>n</tex> по алгоритму:
Пока количество вершин больше двух:
+
  Пока количество вершин больше одной {
# Выбирается лист <tex>v</tex> с минимальным номером.
+
    1. Выбирается лист <tex>v</tex> с минимальным номером.
# В код Прюфера добавляется номер вершины, смежной с <tex>v</tex>.
+
    2. В код Прюфера добавляется номер вершины, смежной с <tex>v</tex>.
# Вершина <tex>v</tex> и инцидентное ей ребро удаляются из дерева.
+
    3. Вершина <tex>v</tex> и инцидентное ей ребро удаляются из дерева.
<br>
+
  }
Полученная последовательность называется '''кодом Прюфера''' ''(англ. Prüfer code)'' для заданного дерева.
+
Полученная последовательность называется '''кодом Прюфера''' для заданного дерева.
  
 
{{Лемма
 
{{Лемма
 
|statement=
 
|statement=
Номер вершины <tex>v</tex> встречается в коде Прюфера тогда и только тогда, когда <tex>v</tex> не является листом, причём встречается этот номер к коде дерева в точности <math>\deg v - 1</math> раз.
+
Номер вершины <tex>v</tex> встречается в коде Прюфера тогда и только тогда, когда <tex>v</tex> не является листом или <tex>v</tex> имеет номер <tex>n</tex>.
 
|proof=
 
|proof=
 
# Вершина с номером <tex>n</tex> не может быть удалена, следовательно на последнем шаге у неё была смежная вершина, и число <tex>n</tex> встретилось в коде.
 
# Вершина с номером <tex>n</tex> не может быть удалена, следовательно на последнем шаге у неё была смежная вершина, и число <tex>n</tex> встретилось в коде.
# Если вершина не является листом, то у неё на некотором шаге была смежная вершина <tex>-</tex> лист, следовательно номер этой вершины встречается в коде.
+
# Если вершина не является листом, то у неё на некотором шаге была смежная вершина - лист, следовательно номер этой вершины встречается в коде.
# Если вершина является листом с номером меньше <tex>n</tex>, то она была удалена до того, как был удален её сосед, следовательно её номер не встречается в коде.
+
# Если вершина является листом с номером меньше <tex>n</tex>, то она была удалена до того, как был удален ее сосед, следовательно ее номер не встречается в коде.
  
Таким образом, номера всех вершин, не являющихся листьями или имеющих номер <tex>n</tex>, встречаются в коде Прюфера, а остальные <tex>-</tex> нет.
+
Таким образом, номера всех вершин, не являющихся листьями или имеющих номер <tex>n</tex>, встречаются в коде Прюфера, а остальные - нет.
 
}}
 
}}
  
 
{{Лемма
 
{{Лемма
 
|statement=
 
|statement=
По любой последовательности длины <tex>n - 2</tex> из чисел от <tex>1</tex> до <tex>n</tex> можно построить помеченное дерево,
+
По любой последовательности длиной <tex>n - 2</tex> из чисел от <tex>1</tex> до <tex>n</tex> можно построить помеченное дерево,
 
для которого эта последовательность является кодом Прюфера.
 
для которого эта последовательность является кодом Прюфера.
 
|proof=
 
|proof=
Доказательство проведем по индукции по числу <tex>n</tex><br>
+
Доказательство проведем по индукции.
<u>''База индукции:''</u>
+
База. <tex>n = 1</tex> - верно.
 
+
<br>
<tex>n = 1</tex> <tex>-</tex> верно.
+
Переход от <tex>n</tex> к <tex>n + 1</tex>.
 
+
<br>
<u>''Индукционный переход:''</u>
 
 
 
Пусть для числа <tex>n</tex> верно, построим доказательство для <tex>n+1</tex>:
 
 
 
 
Пусть у нас есть последовательность: <tex>A = [a_1, a_2, ..., a_{n - 2}].</tex>
 
Пусть у нас есть последовательность: <tex>A = [a_1, a_2, ..., a_{n - 2}].</tex>
Выберем минимальное число <tex>v</tex> не лежащее в <tex>A</tex>. По предыдущей лемме <tex>v</tex> <tex>-</tex> вершина, которую мы удалили первой. Соединим <tex>v</tex> и <tex>a_1</tex> ребром. Выкинем из последовательности <tex>A</tex> число <tex>a_1</tex>. Перенумеруем вершины, для всех <tex>a_i > v</tex> заменим <tex>a_i</tex> на <tex>a_i - 1</tex>. А теперь мы можем применить предположение индукции.
+
Выберем минимальное число <tex>v</tex> не лежащее в <tex>A</tex>. По предыдущей лемме <tex>v</tex> - вершина, которую мы удалили первой. Соединим <tex>v</tex> и <tex>a_1</tex> ребром. Выкинем из последовательности <tex>A</tex> число <tex>a_1</tex>. Перенумеруем вершины, для всех <tex>a_i > v</tex> заменим <tex>a_i</tex> на <tex>a_i - 1</tex>. А теперь мы можем применить предположение индукции.
 
}}
 
}}
  
Строка 46: Строка 42:
  
 
Следствием из этой теоремы является [[Количество помеченных деревьев|формула Кэли]].
 
Следствием из этой теоремы является [[Количество помеченных деревьев|формула Кэли]].
 
== Пример построения кода Прюфера ==
 
[[Файл: Prufer.png|500px]]
 
 
== Пример декодирования кода Прюфера ==
 
[[Файл: backprufer.png|700px]]
 
 
==См. также==
 
*[[Связь матрицы Кирхгофа и матрицы инцидентности]]
 
*[[Матрица Кирхгофа]]
 
*[[Количество помеченных деревьев]]
 
*[[Подсчет числа остовных деревьев с помощью матрицы Кирхгофа]]
 
 
 
== Источники информации ==
 
* [http://www.intuit.ru/department/algorithms/graphsuse/11/2.html Университет INTUIT | Представление с помощью списка ребер и кода Прюфера]
 
 
[[Категория: Алгоритмы и структуры данных]]
 
[[Категория: Остовные деревья ]]
 
[[Категория: Свойства остовных деревьев ]]
 

Пожалуйста, учтите, что любой ваш вклад в проект «Викиконспекты» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Викиконспекты:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Чтобы изменить эту страницу, пожалуйста, ответьте на приведённый ниже вопрос (подробнее):

Отменить | Справка по редактированию (в новом окне)

Шаблоны, используемые на этой странице: