我一直在試圖實現馬爾可夫的算法,但我只取得了部分成功。該算法非常簡單,可以找到here。如何用變量和標記實現馬爾科夫算法?
但是,我的項目有一個額外的困難,我必須使用包含標記和變量的規則。
一個變量表示字母表中的任何字母,而標記只是一個用作移動變量(它沒有真實值)的引用的字符。
此示例複製字符串中的每個字符:
字母:{A,B,C}
標記:{M}
變量:{X}
規則1:Mx - > xxM
規則2:xM - > x
規則3:X - >的Mx
輸入:ABC
ABC //我們應用規則3
MABC //我們應用規則1
aaMbc //我們應用規則1
aabbMc //我們應用規則1
aabbccM //我們應用規則2
爲aabbcc
這是我實現了一個馬爾科夫算法,只有例如字符串輸入工作遞歸函數:第1條:「蘋果」 - >「橙色」,輸入:「蘋果」。
public static String markov(String input, LinkedList<Rule> rules) {
for (Rule rule : rules) {
if (!input.equals(input.replace(rule.getFrom(), rule.getTo()))) { //If the rule matches a substring
if (rule.isTerminating()) { //If the rule is terminating
input = input.replaceFirst(Pattern.quote(rule.getFrom()), rule.getTo());
System.out.println(input); //Replace the first instance
return input; //return and end the cycle
} else {
input = input.replaceFirst(Pattern.quote(rule.getFrom()), rule.getTo());
System.out.println(input);
return markov(input, rules); //Start looking again for matching rules
}
}
}
return input;
}
我無法弄清楚如何實現變量和標記這個邏輯,所以也許有人能教我在執行這一邏輯的最好方法?歡迎任何建議。
如果問題不符合SO準則,請讓我知道爲什麼在評論中,所以我不重複這個錯誤。
謝謝!