2014 dxdy logo

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

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


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 Построить алгорифм Маркова для функции y = 7x + 2
Сообщение01.05.2017, 23:49 
Аватара пользователя


05/11/11
91
В единичной системе счисления задача элементарная:

$\\
\#1 &\rightarrow 1111111\# \\
\#\phantom{1} &\mapsto 11 \\
\phantom{\#1} &\rightarrow \#
$

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

 Профиль  
                  
 
 Re: Построить алгорифм Маркова для функции y = 7x + 2
Сообщение02.05.2017, 12:54 
Заслуженный участник


27/04/09
28128
Можно пойти простым, но длинным путём: конвертируем в единичную, делаем дело, конвертируем назад. Это если конвертация туда и обратно выглядят более понятными. :-)

 Профиль  
                  
 
 Re: Построить алгорифм Маркова для функции y = 7x + 2
Сообщение02.05.2017, 14:48 
Аватара пользователя


05/11/11
91
Ну, допустим, я примерно представляю, как сделать конвертацию в единичную сс. Допустим, даже сделаю.
Обратную конвертацию пока затрудняюсь придумать, но допустим, что осилю и её.

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

 Профиль  
                  
 
 Re: Построить алгорифм Маркова для функции y = 7x + 2
Сообщение02.05.2017, 21:01 
Заслуженный участник


27/04/09
28128
qx87 в сообщении #1213636 писал(а):
А команда с пустой правой частью может быть только одна и только в конце списка. Как же я тогда сделаю композицию этих алгорифмов?
Вы хотели сказать, с пустой левой? :-)

Если алгорифму перед началом работы требуется символ-курсор на краю строки, его можно просто не выкидывать в конце предыдущего алгорифма, работающего с таким символом, а передвинуть в нужное место, заменив на первом шаге передвижения. Например, допустим, алгорифм А1 перевода из восьмеричной в унарную имеет вид $$r_1,\; \ldots,\; r_m,\; \alpha\#\beta\mapsto\gamma,\; r'_1,\; \ldots,\; r'_n,\; \varepsilon\to\#,$$где $\alpha,\beta,\gamma$ — какие-то строки, $\gamma$ не содержит $\#$, и $\varepsilon$ обозначает пустую строку. Дополним его, чтобы в конце работы в левом конце строки был символ $\#'$, до алгорифма А2: $$c_1\flat\to\flat c_1,\; \ldots,\; c_k\flat\to\flat c_k,\; \flat\mapsto\#',\; r_1,\; \ldots,\; r_m,\; \alpha\#\beta\to\flat\gamma,\; r'_1,\; \ldots,\; r'_n,\; \varepsilon\to\#,$$где $c_1, \ldots, c_k$ — все символы кроме $\#$, использующиеся в правилах алгорифма А1. Если в А1 несколько завершающих правил, избавляющихся от $\#$, их все надо поменять как здесь, а вот если есть правила, избавляющиеся от $\#$, но не завершающие, это надо рассматривать отдельно.

 Профиль  
                  
 
 Re: Построить алгорифм Маркова для функции y = 7x + 2
Сообщение02.05.2017, 21:28 
Аватара пользователя


05/11/11
91
arseniiv в сообщении #1213717 писал(а):
Вы хотели сказать, с пустой левой? :-)


Так точно )

Ну хорошо. Допустим, композиция алгорифмов всегда построяема. Будем пока что работать в этом направлении, а там разберёмся. НАМ перевода из восьмеричной в унарную я построил (и он даже не содержит правила с ПЛЧ -- пустой левой частью). НАМ обратного перевода в восьмеричную у меня циклится:

$\\
\#|||||||| &\rightarrow |\# \\
\#||||||| &\rightarrow 7 \\
\#|||||| &\rightarrow 6 \\
\#||||| &\rightarrow 5 \\
\#|||| &\rightarrow 4 \\
\#||| &\rightarrow 3 \\
\#|| &\rightarrow 2 \\
\#| &\rightarrow 1 \\
\# &\rightarrow 0 \\
\phantom{\#} &\rightarrow \#
$

Он верно переводит число, но потом бесконечно вставляет в начало слова октоторп и тут же заменяет его на ноль. Что можно тут сделать?

P. S. Что-то я начинаю подозревать, что в НАМах нельзя многократно использовать правило с ПЛЧ... Хотя я тут мало имею опыта, может, и можно как-то орагнизовать.

 Профиль  
                  
 
 Re: Построить алгорифм Маркова для функции y = 7x + 2
Сообщение02.05.2017, 21:32 
Заслуженный участник


27/04/09
28128
Сейчас подумаю.

qx87 в сообщении #1213729 писал(а):
Будем пока что работать в этом направлении, а там разберёмся.
Вообще я, кстати, как раз надеялся, что кто-нибудь придёт и укажет царский путь. Но пока не пришли…

 Профиль  
                  
 
 Re: Построить алгорифм Маркова для функции y = 7x + 2
Сообщение02.05.2017, 21:39 
Аватара пользователя


05/11/11
91
Ну, царский путь -- это, по идее, сделать всё в восьмеричной системе. То есть приписать к числу его копию, к ней приписать ноль (т. е. умножить на 8), из неё вычесть оригинал, а потом добавить два. Видел я такой царский путь.

(Оффтоп)

... в гробу

 Профиль  
                  
 
 Re: Построить алгорифм Маркова для функции y = 7x + 2
Сообщение02.05.2017, 21:43 
Заслуженный участник


27/04/09
28128
:lol:

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

qx87 в сообщении #1213729 писал(а):
P. S. Что-то я начинаю подозревать, что в НАМах нельзя многократно использовать правило с ПЛЧ... Хотя я тут мало имею опыта, может, и можно как-то орагнизовать.
Хороший вопрос для исследования, но я надеялся, что у нас не будет нужды доходить до этого правила больше раза в текущем случае. :-)

(Ещё не додумал тот ваш вопрос.)

-- Вт май 02, 2017 23:52:48 --

qx87 в сообщении #1213729 писал(а):
Он верно переводит число, но потом бесконечно вставляет в начало слова октоторп и тут же заменяет его на ноль. Что можно тут сделать?
Топорная коррекция вот такая: раз он начинает зацикливаться, когда закончились палочки, надо поймать этот момент: $$\#|^8\mapsto|\#,\; |\#|^7\to|7,\; \ldots,\; |\#|^0\to|0,\; \#|^7\mapsto7,\; \ldots,\; \#|^0\mapsto0,\; \varepsilon\to\#$$($|^n$$n$ палочек подряд).

 Профиль  
                  
 
 Re: Построить алгорифм Маркова для функции y = 7x + 2
Сообщение02.05.2017, 21:53 
Аватара пользователя


05/11/11
91
Да тут, блин, коэффициент неудобный -- из трёх единиц. Или опять же, приписывать три нуля, а потом вычитать самое себя -- тогда никакого толком проку от перевода. Вообще, мне кажется, что с точки зрения сложности реализации арифметика в любой сс, кроме унарной, будет примерно одинаковой.

-- 02.05.2017, 23:14 --

arseniiv в сообщении #1213738 писал(а):
Топорная коррекция вот такая: раз он начинает зацикливаться, когда закончились палочки, надо поймать этот момент


Отлично! Спасибо большое, работает!

Все три фазы алгоритма готовы, завтра попробую собрать его.

 Профиль  
                  
 
 Re: Построить алгорифм Маркова для функции y = 7x + 2
Сообщение02.05.2017, 22:44 
Заслуженный участник


27/04/09
28128
Удачи. :-)

 Профиль  
                  
 
 Re: Построить алгорифм Маркова для функции y = 7x + 2
Сообщение03.05.2017, 20:23 
Аватара пользователя


05/11/11
91
Сделал композицию первых двух шагов. НАМ принимает на вход число $x$ в восьмеричной системе счисления, возвращает число $y = 7x+2$ в унарной системе счисления.

$\\
|0 \rightarrow 0|^8 \\
1 \rightarrow 0|^{1 \cdot 7} \\
2 \rightarrow 0|^{2 \cdot 7} \\
3 \rightarrow 0|^{3 \cdot 7} \\
4 \rightarrow 0|^{4 \cdot 7} \\
5 \rightarrow 0|^{5 \cdot 7} \\
6 \rightarrow 0|^{6 \cdot 7} \\
7 \rightarrow 0|^{7 \cdot 7} \\
0 \rightarrow \\
\# \mapsto || \\
\phantom{\#} \rightarrow \#
$

 Профиль  
                  
 
 Re: Построить алгорифм Маркова для функции y = 7x + 2
Сообщение03.05.2017, 21:04 
Заслуженный участник


27/04/09
28128
Хорошо сократили!

 Профиль  
                  
 
 Re: Построить алгорифм Маркова для функции y = 7x + 2
Сообщение03.05.2017, 23:29 
Аватара пользователя


05/11/11
91
Алгорифм готов.

$\\
\mbox{Шаг 2. Замена на близнецовый алфавит} \\
\ast| \to \ast L \\
L| \to LL \\
\\
\mbox{Шаг 3. Перевод из унарной системы обратно в восьмеричную, финал} \\
\ast L^8 \to L \ast \\
L+ \to +L \\
\\
L\ast L^7 \to +L 7 \\
L\ast L^6 \to +L 6 \\
L\ast L^5 \to +L 5 \\
L\ast L^4 \to +L 4 \\
L\ast L^3 \to +L 3 \\
L\ast L^2 \to +L 2 \\
L\ast L\phantom{^1} \to +L 1 \\
L\ast \phantom{L^0} \to +L 0 \\
\\
\ast L^7 \mapsto 7 \\
\ast L^6 \mapsto 6 \\
\ast L^5 \mapsto 5 \\
\ast L^4 \mapsto 4 \\
\ast L^3 \mapsto 3 \\
\ast L^2 \mapsto 2 \\
\ast L\phantom{^1} \mapsto 1 \\
\ast \phantom{L^0} \mapsto 0 \\
\\
+ \to \ast \\
\\
\mbox{Шаг 1. Перевод числа } x \mbox{ в восьмеричной системе в число } y = 7x+2 \mbox{ в унарной системе} \\
|0 \to 0|^8 \\
1 \to 0|^{1 \cdot 7} \\
2 \to 0|^{2 \cdot 7} \\
3 \to 0|^{3 \cdot 7} \\
4 \to 0|^{4 \cdot 7} \\
5 \to 0|^{5 \cdot 7} \\
6 \to 0|^{6 \cdot 7} \\
7 \to 0|^{7 \cdot 7} \\
0 \to \\
\# \to \ast|| \\
\phantom{\#} \rightarrow \#
$

Нашёл в литературе алгоритм композиции НАМов, делал по нему. Однако ввиду специфики задачи и ещё того, что выходной алфавит первого шага состоит из одного символа $\{|\}$, удалось избавиться от тонны вспомогательных правил. В том числе от целой группы правил перевода строки из близнецового алфавита обратно в родной, количество которых равно трижды квадрату мощности расширенного алфавита: $3 \cdot |V \cup V'|^2$, т. е. 300 штук для моего случая :).

Проблема, однако, возникла с тем, что финальный алгоритм перевода обратно в восьмеричную систему многократно использует правило с ПЛЧ, поэтому вашим, arseniiv, методом воспользоваться не удалось. На этот раз проблему решил уже сам, введя новый маркер $+$, который я вставляю вместо $\ast$, когда тот уничтожается на НЕтерминальных правилах, а потом гоню плюс обратно в начало строки, где он сбрасывает личину и перевоплощается обратно в $\ast$. Кажется, я понемногу научиваюсь думать нормальными алгорифмами )

arseniiv, задача решена, огромное спасибо за помощь!! :appl: :D

 Профиль  
                  
 
 Re: Построить алгорифм Маркова для функции y = 7x + 2
Сообщение04.05.2017, 15:34 
Заслуженный участник


27/04/09
28128
Да тут, в общем, не за что, вы же практически всё сами составляли.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

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



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

Сейчас этот форум просматривают: gevaraweb


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

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