Коды Прюфера — различия между версиями
(→Коды Прюфера.) |
(→Коды Прюфера.) |
||
Строка 12: | Строка 12: | ||
Номера всех вершин, которые не являются листьями или имеют номером <tex>n</tex>, встречаются в коде Прюфера. А те, которые не входят - являются листьями. | Номера всех вершин, которые не являются листьями или имеют номером <tex>n</tex>, встречаются в коде Прюфера. А те, которые не входят - являются листьями. | ||
|proof= | |proof= | ||
− | + | 1. Вершина <tex>n</tex> не удаляется, так как у неё максимальный номер (в графе с <tex>>1</tex> вершиной - <tex>\geq 2</tex> листа), а, значит, на последнем шаге у неё была смежная вершина. <tex>\Rightarrow</tex> <tex>n</tex> - как минимум один раз встретилось в коде. | |
− | + | 2. Если вершина - не лист, то у неё на каком-то шаге была смежная вершина - лист. А, значит, номер этой вершины был <tex>>1</tex> выписан в код. | |
− | + | 3. Так как вершина - лист(с номером не равным <tex>n</tex>), она была только удалена. | |
− | + | А, значит, все вершины, не являющиеся листьями "входят" в код Прюфера, а являющиеся листьями - "не входят". | |
}} | }} | ||
Строка 29: | Строка 29: | ||
<br> | <br> | ||
Пусть у нас есть последовательность: <tex>A = [a_1, a_2, ..., a_{n - 2}].</tex> | Пусть у нас есть последовательность: <tex>A = [a_1, a_2, ..., a_{n - 2}].</tex> | ||
− | Выберем минимальное число <tex>v</tex> не лежащее в A. Это означает, что <tex>v</tex> - вершина, которую мы удалили первой(По предыдущей лемме v - лист, а по построению кода мы удаляем | + | Выберем минимальное число <tex>v</tex> не лежащее в A. Это означает, что <tex>v</tex> - вершина, которую мы удалили первой (По предыдущей лемме v - лист, а по построению кода мы удаляем лист с минимальным номером). Соединяем <tex>v</tex> и <tex>a_1</tex> ребром. Выкинем из последовательности <tex>A</tex> - <tex>a_1</tex>. Далее будем перенумеровывать вершины, то есть - <tex>\forall i : a_i > v</tex> выполняем <tex>a_i = a_i - 1</tex>. А теперь мы можем применить предположение индукции. |
}} | }} | ||
Версия 02:32, 9 октября 2010
Коды Прюфера.
Кодирование Прюфера переводит помеченные деревья порядка
в последовательность чисел от до по алгоритму: Пока количество вершин
{
1. Выбирается лист с минимальным номером.
2. В последовательность Прюфера добавляется номер смежной вершины.
3. Лист и инцидентное ребро удаляются из дерева.
}
Полученная последовательность и есть код Прюфера.
Лемма: |
Номера всех вершин, которые не являются листьями или имеют номером , встречаются в коде Прюфера. А те, которые не входят - являются листьями. |
Доказательство: |
1. Вершина А, значит, все вершины, не являющиеся листьями "входят" в код Прюфера, а являющиеся листьями - "не входят". не удаляется, так как у неё максимальный номер (в графе с вершиной - листа), а, значит, на последнем шаге у неё была смежная вершина. - как минимум один раз встретилось в коде. 2. Если вершина - не лист, то у неё на каком-то шаге была смежная вершина - лист. А, значит, номер этой вершины был выписан в код. 3. Так как вершина - лист(с номером не равным ), она была только удалена. |
Лемма: |
По любой последовательности длиной из чисел от до можно построить помеченное дерево. |
Доказательство: |
Доказательство по индукции.
База. |
Теорема: |
Кодирование Прюфера задаёт биекцию между множествами помеченных деревьев порядка и последовательностями длиной из чисел от до |
Доказательство: |
1. Каждому помеченному дереву соотвествует последовательность и только одна. Это верно по построению кода.
2. Каждой последовательности соотвествует помеченное дерево и только одно. Это верно по предыдущей лемме, т.к. восстанавливали мы однозначно.
|
Следствием из этой теоремы является формула Кэли.