2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3  След.
 
 Алгоритмы представления деревьев линейными словами
Сообщение31.01.2010, 12:32 
Аватара пользователя


01/12/06
129
Москва
В учебниках можно часто встретить утверждение, что деревья и (что меня особенно интересует) древовидная структура формул могут быть представлены в виде линейного конструктивного объекта (слова некоторого конечного алфавита). При этом часто ссылаются на использование скобок. Однако я до сих пор не встречал конкретных алгоритмов и теорем, доказанных на основании этих алгоритмов, которые бы конкретно демонстрировали работу и свойства таких представлений. Не знаете ли вы подобную литературу? Особенно о линейном представлении деревьев без использования скобок. Можно даже желательно на английском. Спасибо за понимание.

 Профиль  
                  
 
 Re: Алгоритмы представления деревьев линейными словами
Сообщение04.03.2010, 18:05 
Заслуженный участник


26/07/09
1559
Алматы
Вспомните, например, про обратную польскую нотацию...

 Профиль  
                  
 
 Re: Алгоритмы представления деревьев линейными словами
Сообщение04.03.2010, 19:17 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Я помню, нам на первом курсе доказывали лемму - грубую оценку числа двоичных деревьев с $n$ ребрами через скобочное представление. Дерево кодировалось словом из скобок, и потом количество деревьев оценивалось сверху количеством слов в 2-буквенном алфавите.

 Профиль  
                  
 
 Re: Алгоритмы представления деревьев линейными словами
Сообщение04.03.2010, 19:41 
Аватара пользователя


01/12/06
129
Москва
Спасибо за то, что поддержали тему.
Circiter в сообщении #294528 писал(а):
Вспомните, например, про обратную польскую нотацию...

Да я и не забывал об этом.

Попробую еще раз сформулировать вопрос максимально подробно. Как хорошо всем известно, формулы и термы языка логики записываются на бумаге в виде линейной последовательности символов, однако при их чтении структура этих выражений интерпретируется не как линейная, а как древовидная. Традиционно для выражения древовидной структуры слова используются скобки. Такой способ представления древовидной структуры не является обязательным, о чем говорит польская нотация. Более того, как я слышал, польская нотация нашла себе применение именно в программировании.

Когда же в учебниках заходит речь о древовидной структуре выражений, то доказывают теоремы существования и теоремы о свойствах выражений, причем методами теории множеств. Меня же интересует конструктивный подход к древовидным структурам. Например, исходный бесконечный алфавит (без скобок) языка первого порядка кодируется в двухбуквенном алфавите. Все свойства правильных выражений (и определение самих правильных выражений) демонстрируются построением соответствующих разрешающих алгоритмов. Для каждого правильного выражения строится ее абстрактная древовидная структура в виде опять-таки слова в двухбуквенном алфавите. Предлагается алгоритм, который для каждого правильного выражения, и каждого «места» древовидной структуры этого выражения, и другого выражения строит результат замены подформулы, стоящей на этом месте, новым выражением. И так далее и тому подобное.

Желательно, но не обязательно, чтобы в качестве алгоритмов выступали машины Тьюринга.

Из общих соображений мне казалось, что эта задача рассматривается в каждом учебнике по конструктивной математике. Но до сих пор я не встретил даже постановки этой проблемы. Буду очень рад, если меня поправят.

 Профиль  
                  
 
 Re: Алгоритмы представления деревьев линейными словами
Сообщение04.03.2010, 20:07 
Модератор
Аватара пользователя


11/01/06
5702
пример конкретного линейного представления: http://en.wikipedia.org/wiki/Newick_format

-- Thu Mar 04, 2010 12:11:15 --

Sashamandra в сообщении #284722 писал(а):
В учебниках можно часто встретить утверждение, что деревья и (что меня особенно интересует) древовидная структура формул могут быть представлены в виде линейного конструктивного объекта (слова некоторого конечного алфавита). При этом часто ссылаются на использование скобок. Однако я до сих пор не встречал конкретных алгоритмов и теорем, доказанных на основании этих алгоритмов, которые бы конкретно демонстрировали работу и свойства таких представлений.

Это потому, что такие представления обычно носят вспомогательный характер, но сами не являются объектом исследований. Объектом исследований обычно является та древовидная структура, которую они кодируют.

-- Thu Mar 04, 2010 12:15:48 --

Например, в языках программирования уделяется много внимания представлению нелинейных объектов (деревьев в том числе) в линейной форме - см. Сериализация. Но она опять же носит прикладной характер, и не представляет самостоятельного интереса.

 Профиль  
                  
 
 Re: Алгоритмы представления деревьев линейными словами
Сообщение04.03.2010, 20:55 
Аватара пользователя


01/12/06
129
Москва
Спасибо за ответ.
Цитата:
пример конкретного линейного представления: http://en.wikipedia.org/wiki/Newick_format

Это представление использует скобки и запятые. Меня же интересует представление, которое использует ранги (местность, число предполагаемых аргументов) функциональных символов (на манер польской нотации).

Цитата:
Это потому, что такие представления обычно носят вспомогательный характер, но сами не являются объектом исследований. Объектом исследований обычно является та древовидная структура, которую они кодируют.

Вот это мне и непонятно. Ведь нужно непросто закодировать, нужно будет создавать алгоритмы, которые бы работали для произвольных выражений, то есть для бесконечного числа случаев. А как тут обойтись без исследования математической задачи в рамках конструктивной математики?

 Профиль  
                  
 
 Re: Алгоритмы представления деревьев линейными словами
Сообщение04.03.2010, 21:02 
Модератор
Аватара пользователя


11/01/06
5702
Sashamandra в сообщении #294598 писал(а):
Ведь нужно непросто закодировать, нужно будет создавать алгоритмы, которые бы работали для произвольных выражений, то есть для бесконечного числа случаев. А как тут обойтись без исследования математической задачи в рамках конструктивной математики?

Это задача создания и использования эффективных структур данных. Боюсь, что линейное представление (какое бы оно не было) деревьев к таковым не относится. Существуют куда более "продвинутые" и доказанно эффективные структуры для хранения и работы с деревьями.

 Профиль  
                  
 
 Re: Алгоритмы представления деревьев линейными словами
Сообщение04.03.2010, 21:14 
Аватара пользователя


01/12/06
129
Москва
Я могу ошибаться, но у меня сложилось впечатление, что создание структур данных относится к компьютерной науке, изучающей предметы, которые все не превосходят некую фиксированную длину (=конечные автоматы). Выражения и древовидные структуры, о которых я веду речь, не имеют ограничения на свою длину, то есть могут быть произвольно длинные (=машины Тьюринга).

 Профиль  
                  
 
 Re: Алгоритмы представления деревьев линейными словами
Сообщение04.03.2010, 21:18 
Модератор
Аватара пользователя


11/01/06
5702
Sashamandra
Ваше впечатление ошибочно. Размер объектов нигде не ограничивается.

 Профиль  
                  
 
 Re: Алгоритмы представления деревьев линейными словами
Сообщение04.03.2010, 21:32 
Аватара пользователя


01/12/06
129
Москва
Цитата:
Ваше впечатление ошибочно. Размер объектов нигде не ограничивается.

Рад это слышать. Не могли бы вы указать подходящую литературу?

PS

Все-таки выскажу предварительное сомнение. В рассматриваемой мной задаче важно не сама кодировка или представление, а создание алгоритмов, которые будут работать с этими представлениями: из одних представлений создавать другие. Причем сами представления являются предметами, с которыми работают алгоритмы. Предполагаете ли вы, что любая структура данных (которых бесконечно) может выступать в качестве аргумента нашего алгоритма?

PPS

Понял, что название темы не совсем верно. Тема должна называться так: Представление древовидной структуры линейными совами и алгоритмы их преобразований. Можно ли исправить?

 Профиль  
                  
 
 Re: Алгоритмы представления деревьев линейными словами
Сообщение04.03.2010, 23:44 
Аватара пользователя


01/12/06
129
Москва
maxal в сообщении #294613 писал(а):
Sashamandra
Ваше впечатление ошибочно. Размер объектов нигде не ограничивается.

Например, это ограничение может быть в виде предполагаемой конечности первичного алфавита. Как мы знаем, язык первого порядка предполагает бесконечный алфавит: бесконечное число букв для обозначения переменных. Но надо конкретно посмотреть то, о чем вы говорите.

 Профиль  
                  
 
 Re: Алгоритмы представления деревьев линейными словами
Сообщение05.03.2010, 02:05 
Модератор
Аватара пользователя


11/01/06
5702
Sashamandra в сообщении #294619 писал(а):
Все-таки выскажу предварительное сомнение. В рассматриваемой мной задаче важно не сама кодировка или представление, а создание алгоритмов, которые будут работать с этими представлениями: из одних представлений создавать другие. Причем сами представления являются предметами, с которыми работают алгоритмы.

Алгоритм всегда решает какую-то задачу. Вы же пока рассуждаете о каких-то абстрактных алгоритмах без привязки к задаче. Сформулируйте свою задачу чётче: что именно вам дано, что вы хотите получить, каким свойствам должно удовлетворять решение (алгоритм) и т.д.

-- Thu Mar 04, 2010 18:07:21 --

Sashamandra в сообщении #294619 писал(а):
Понял, что название темы не совсем верно. Тема должна называться так: Представление древовидной структуры линейными совами и алгоритмы их преобразований. Можно ли исправить?

Можно, но это слишком длинное название. Тема не может быть длиннее 80 символов.

 Профиль  
                  
 
 Re: Алгоритмы представления деревьев линейными словами
Сообщение05.03.2010, 20:03 
Аватара пользователя


01/12/06
129
Москва
Цитата:
Алгоритм всегда решает какую-то задачу. Вы же пока рассуждаете о каких-то абстрактных алгоритмах без привязки к задаче. Сформулируйте свою задачу чётче: что именно вам дано, что вы хотите получить, каким свойствам должно удовлетворять решение (алгоритм) и т.д.

Хорошо. Начну с общей постановки проблемы, а затем постепенно перейду к частным задачам.

Конечная цель состоит в том, чтобы язык математической логики сделать предметом (адекватного) математического исследования.

В литературе можно найти три способа отношения к этой задаче.
1. Язык математической логики существует в виде записи на бумаге и не является предметом математического исследования. Все свойства и закономерности языка очевидны для тех, кто им пользуется.
2. Язык математической логики определятся рекурсивно в рамках теории множеств исходя из данного бесконечного алфавита. Все свойства и закономерности языка доказываются как теоремы теории множеств. В частности, доказывается существования функций (определенных на множестве всех выражений), которые осуществляют те или иные преобразования, подстановки или замены.
3. Язык математической логики, или близкий ему язык моделируется на компьютере, например, на языке C++ для создания математических пакетов символьных вычислений, подобных Mathematica. Или же в самой Mathematica на языке программирования высокого порядка пишутся алгоритмы формульных преобразований.

Перечисленные подходы я считаю неадекватными. На мой взгляд, адекватным методом исследования формального языка должна быть конструктивная математика, в которой алгоритмами являются или машины Тьюринга, или нормальные алогорифмы Маркова, или канонические системы Поста. Для определенности выберем машины Тьюринга с двухбуквенным алфавитом. Таким образом, первое условие нашей задачи: представляем выражения формального языка линейной последовательностью, состоящей из двух символов 0 и |, а все свойства и преобразования выражений осуществляется путем построения соответствующих машин Тьюринга: 1)разрешающих это свойство (или выражения относительно этого свойства); 2) преобразующие выражения.

Вторым условием будет требование отсутствия в формальном языке символов пунктуации, а именно скобок и запятых.

Для еще большей конкретизации рассмотрим следующий формальный язык. Алфавит состоит из счетного числа символов, обозначающих предметные переменные, и счетного числа функциональных символов для каждого ранга, принимающего счетное число значений, начиная с единицы. Рекурсивное определение формальных выражений в этом языке очевидно. На нулевом шаге это все переменные. На следующем шаге это последовательности, начинающиеся с функционального символа, за которым стоят столько выражений из уже определенных выражений на предыдущих шагах, каков ранг этого функционального символа.

То, что было сказано в предыдущем абзаце, это интуитивное понимание. Мы должны это понимание воплотить в конструктивной математике. Введем сокращения для упрощения изложения. Последовательность 0| будем обозначать 1, последовательность 0|| будем обозначать 2, последовательность 0||| будем обозначать 3 и так далее. Будем использовать переменные m и n для обозначения произвольной последовательности вида 0|||...
Последовательность 0|0||0||| будем обозначать 1, 2, 3.
Последовательность 00|0||0||| будем обозначать (1, 2, 3).

Предметные переменные исходного алфавита в конструктивной математике будем представлять последовательностью вида (m) .
Функциональные символы ранга n будем обозначать последовательностью вида (n,m). В частности, правильным выражением будет последовательности вида (2,1)(1)(1), (3,1)(3)(2)(1).

Итак, возникает первая конкретная задача. Построить машину Тьюринга, которая перечисляет все правильные выражения. Возникает вторая задача. Построить машину Тьюринга, которая для любой последовательности дает |, если последовательность представляет правильное выражение, и 0 — в противном случае.

Далее очевидно возникает задача построения машин Тьюринга, которая по данному правильному выражению выдают ее древовидную структуру, представленную в виде определенного дерева. Затем возникает задача построения машины Тьюринга, которая по данной последовательности, представляющей правильное выражение, и последовательности, представляющей место в ее древовидной структуре, и другого выражения выдает новое выражение, в котором произошла замена подвыаржения, стоящего на указанном месте, данным выражением. И так далее и тому подобное.

Хотелось бы прежде всего узнать, в каких книгах эти или близкие им задачи рассматриваются. Буду также рад любым комментариям.

 Профиль  
                  
 
 Re: Алгоритмы представления деревьев линейными словами
Сообщение05.03.2010, 20:06 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Sashamandra в сообщении #294936 писал(а):
Хотелось бы прежде всего узнать, в каких книгах эти или близкие им задачи рассматриваются. Буду также рад любым комментариям.

Помнится мне, в Меньдельсоне явно выписано много примитивно-рекурсивных функций для операций над геделевыми номерами формул, вроде и для подстановки.

 Профиль  
                  
 
 Re: Алгоритмы представления деревьев линейными словами
Сообщение05.03.2010, 20:39 
Аватара пользователя


01/12/06
129
Москва
Цитата:
Помнится мне, в Меньдельсоне явно выписано много примитивно-рекурсивных функций для операций над геделевыми номерами формул, вроде и для подстановки.

Если бы язык определи в конструктивной математике, а не на бумаге, то необходимости в гёделевской нумерации не возникло бы. Чувствуете разницу?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу 1, 2, 3  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group