Учебно-методический комплекс дисциплины для обучающегося «Языки программирования» для специальности 5В010900 Математика



бет87/142
Дата03.01.2022
өлшемі1.33 Mb.
#450516
түріУчебно-методический комплекс
1   ...   83   84   85   86   87   88   89   90   ...   142
УМКДО -ЯзыкиПрограммирования

Пример 1 (вставка и удаление символов)

А={a,b,c,d}. В слове Р требуется заменить первое вхождение подслова bb на ddd и удалить все вхождения символа c.

Например: abbcabbca → adddabba



Решение.

Прежде всего отметим, что в НАМ, в отличие от машины Тьюринга, легко реализуются вставки и удаления символов. Вставка новых символов в слово -это замена некоторого подслова на подслово с бóльшим числом символов; например, с помощью формулы bb→ddd два символа будут заменены на три символа. При этом не надо заботиться о том, чтобы предварительно освободить место для дополнительных символов, в НАМ слово раздвигается автома­тически. Удаление же символов - это замена некоторого подслова на подслово с меньшим числом символов; например, удаление символа c реализуется формулой c → (с пустой правой частью). При этом никаких пустых позиций внутри слова не появляется, сжатие слова в НАМ происходит автоматически.



С учетом сказанного нашу задачу должен, казалось бы, решать такой НАМ:

Однако это не так. Проверим этот НАМ на входном слове abbcabbca (над стрелками указаны номера примененных формул, а в словах слева от стрелок подчеркнуты для наглядности те части, к которым были применены эти формулы):



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



Проверим этот новый алгоритм на том же входном слове:



Учтем это и переставим наши две формулы:

Итак, НАМ сначала удалил все символы c и только затем заменил первое вхождение bb на ddd. Однако НАМ на этом не остановился и стал заменять остальные вхождения bb. Почему? Дело в том, что, пока применима хотя бы одна формула, НАМ продолжает свою работу. Но нам этого не надо, поэтому мы должны принудительно остановить НАМ после того, как он заменил первое вхождение bb. Вот для этого и нужны заключительные формулы подстановки, после применения которых НАМ останавливается. Следовательно, в нашем алгоритме обычную формулу bb→ddd надо заменить на заключительную формулу bb→ ddd:

Вот теперь наш алгоритм будет работать правильно:




Слово, которое получилось после применения заключительной формулы (2), является выходным словом, т.е. результатом применения НАМ к заданному входному слову.

Проверим наш НАМ еще и на входном слове, в которое не входит bb:




К последнему слову (dab) неприменима ни одна формула, поэтому, согласно определению НАМ, алгоритм останавливается и это слово объявляется выходным.


Достарыңызбен бөлісу:
1   ...   83   84   85   86   87   88   89   90   ...   142




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет