Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архив1 / docx31 / отчет3 (2)

.docx
Скачиваний:
23
Добавлен:
01.08.2013
Размер:
646.26 Кб
Скачать

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ

Чорноморський державний університет імені Петра Могили

Факультет комп’ютерних наук

Кафедра інтелектуальних інформаційних систем

ЗВІТ

з лабораторної роботи №3

Нормальний алгоритм Маркова

Дисципліна “Теорія алгоритмів та математична логіка”

Спеціальність “Інтелектуальні системи прийняття рішень”

6.050101–ЛР.ПЗ.03–303.2910302

Студент___________К.О.Баранов

(підпис)

____________

(дата)

Викладач___________Д.О.Назаренко

(підпис)

____________

(дата)

Миколаїв – 2012

Варіант 1

Реалізувати нормальний алгоритм Маркова відповідно до варіанту, наведеного у таблиці 1.

варiанту

A

B

C

D

1

a b c d

ab→c

bd→/\

cd→a

ac→/\

aacbbadcd

dcabbaaddc

Реалізація алгоритму Маркова за допомогою Інтерпретатора Алгоритмів Маркова:

Для С:

Для D:

Алгоритм:

  1. У впорядкованій послідовності підстановок шукається найперша підстановка, ліве слово якої входить в рядок даних.

  2. В рядку даних шукається найперше (лівіше) входження лівого слова знайденої підстановки.

  3. Це входження в рядку даних замінюється на праве слово знайденої підстановки (перетворення даних).

  4. Кроки 1-3 повторюються до тих пір не виникне ситуація, коли крок не може бути виконаний через те, що жодна із підстановок не підходить

Лістинг програми:

public class Main {

static int nLevel = 0;

public String Rules(String inStr, int inRule, String[] rs) {

String newStr = inStr.substring(0, inRule);

newStr += rs[1];

newStr += inStr.substring(inRule + rs[0].length());

return newStr;

}

public void Marcov(String inStr, String[][] rs, int l) {

nLevel++;

String inputStr = inStr;

String[][] rules = rs;

int level = l;

++level;

String newStr;

int count =0;

for (int i = 0; i < rules.length; i++) {

int inRule;

inRule = inputStr.indexOf(rules[i][0]);

if (inRule != -1) {

for(int j=0; j<nLevel; j++){

System.out.print(" ");

}

newStr = Rules(inputStr, inRule, rules[i]);

count++;

System.out.println("Рівень = " + level + ", " + inputStr + " -> " + rules[i][0] + " замінюємо " + rules[i][1] + " -> " + newStr);

Marcov(newStr, rules, level);

}

}

nLevel--;

}

public static void main(String[] args) {

DataFromFile dff = new DataFromFile();

Main m = new Main();

dff.readFile();

System.out.println("Правила: ");

for (int i = 0; i < 4; i++) {

for (int j = 0; j < 2; j++) {

System.out.print(dff.finalRules[i][j]+" ");

}

System.out.println();

}

for (int k=0;k<2;k++) {

System.out.println("Рядок на вході:\n" + dff.finalStrings[k]);

System.out.println("Нормальний алгоритм Маркова:");

m.Marcov(dff.finalStrings[k], dff.finalRules, 0);

}

}

}

public class DataFromFile {

static String[][] finalRules = new String[4][];

static String[] finalStrings = new String[2];

public void readFile() {

try {

LineNumberReader str_in = new LineNumberReader(new BufferedReader(new FileReader("inputStr.txt")));

LineNumberReader rules_in = new LineNumberReader(new BufferedReader(new FileReader("inputRules.txt")));

String[] rules = new String[4];

for (int i=0;i<rules.length;i++){

finalRules[i] = new String[2];

}

for (int i = 0; i < 2; i++) {

finalStrings[i] = str_in.readLine();

}

for (int i = 0; i < 4; i++) {

rules[i] = rules_in.readLine();

}

for (int i=0;i<4;i++){

finalRules[i][0]= rules[i].substring(0, rules[i].indexOf("-"));

finalRules[i][1] = rules[i].substring(rules[i].indexOf("-") + 1, rules[i].length());

}

finalRules[3][1] = "";

for (int i = 0; i < 4; i++) {

for (int j = 0; j < 2; j++) {

if (finalRules[i][j] == " ") {

finalRules[i][j] = "";

}

}

}

} catch (IOException ex) {

System.out.println("Error. File not found.");

}

}

}

Результат:

Соседние файлы в папке docx31