⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 switchdistance.java

📁 该原代码是实现机器学习中条件随机场模型的Java代码
💻 JAVA
字号:
/**
 * 
 */
package lcrf.stuff;

import java.util.List;
import java.util.Vector;

import lcrf.logic.Atom;
import lcrf.logic.Constant;
import lcrf.logic.NumberConstant;
import lcrf.logic.Term;

/**
 * @author Bernd Gutmann
 * 
 */
public class SwitchDistance {

    public static int switchDistance(List<Atom> p, List<Atom> q) {
        assert p != null;
        assert q != null;
        assert p.size() == q.size();

        Vector<Term> p1 = new Vector<Term>(p.size());
        Vector<Term> p2 = new Vector<Term>(p.size());
        Vector<Term> q1 = new Vector<Term>(q.size());
        Vector<Term> q2 = new Vector<Term>(q.size());

        for (Atom a : p) {
            assert a != null;
            assert a.getTermRepresentation() instanceof Constant;

            Constant c = (Constant) a.getTermRepresentation();

            assert c.getName().equals("o");
            assert c.hasSubterms();
            assert c.getSubterms().size() == 2;
            assert c.getSubterms().get(0) instanceof NumberConstant;
            assert c.getSubterms().get(1) instanceof NumberConstant;

            p1.add(c.getSubterms().get(0));
            p2.add(c.getSubterms().get(1));
        }

        for (Atom a : q) {
            assert a != null;
            assert a.getTermRepresentation() instanceof Constant;

            Constant c = (Constant) a.getTermRepresentation();

            assert c.getName().equals("o");
            assert c.hasSubterms();
            assert c.getSubterms().size() == 2;
            assert c.getSubterms().get(0) instanceof NumberConstant;
            assert c.getSubterms().get(1) instanceof NumberConstant;

            q1.add(c.getSubterms().get(0));
            q2.add(c.getSubterms().get(1));
        }

        return switchDistance(p1, p2, q1, q2);
    }

    private static int switchDistance(List<Term> p1, List<Term> p2, List<Term> q1, List<Term> q2) {
        assert p1.size() == p2.size();
        assert q1.size() == q2.size();
        assert p1.size() == q1.size();

        if (p1.size() == 0) {
            return 0;
        } else {
            if (p1.get(0).equals(q1.get(0)) && (p2.get(0).equals(q2.get(0)))) {
                // match, look at rest
                return switchDistance(p1.subList(1, p1.size()), p2.subList(1, p2.size()), q1.subList(1, q1
                        .size()), q2.subList(1, q2.size()));
            } else {
                // mismatch, switch rest and count error
                return switchDistance(p2.subList(1, p2.size()), p1.subList(1, p1.size()), q1.subList(1, q1
                        .size()), q2.subList(1, q2.size())) + 1;
            }
        }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -