美文网首页
基于线性代数与 差分方程方法的模型的算法实现

基于线性代数与 差分方程方法的模型的算法实现

作者: 栖梧楼主 | 来源:发表于2017-12-02 02:26 被阅读0次
import java.util.*;

/***
 * 在度娘上查找差分方程与线性代数的资料,发现此篇,无聊之中,便想用算法实现一个,我想应该有更好的办法吧。有哪位哥们可以指教一下,当然,还有些问题,原因是因为最后少了一个出栈操作
 * 参考 :@see <a href="https://wenku.baidu.com/view/55c0bb0ba216147916112812.html">基于线性代数与 差分方程方法的模型</a>
 */
public class DifferenceModel {

    private String[] participator = {"人", "狗", "鸡", "米"};

    //private int st = getState(participator); //初始状态


    //四种操作状态
    private int[] opts={getState("人","狗"),
            getState("人","鸡"),
            getState("人","米"),
            getState("人")};


    //禁止出现的状态
    private int[] forbidMask ={ getState("人","鸡","米"),
            getState("人","鸡","狗"),};
    private int[] forbid ={ getState("鸡","米"),
            getState("鸡","狗"),};


    int intiSt = getState(participator); //初始状态

    Stack<Integer> stack = new Stack();
    Set<Integer> historySt = new HashSet<>(); //历史状态
    public void searchWay(int st){

        Queue<Integer> queue = new LinkedList<>(); //用以保存正确的状态值
        Queue<Integer> opQueue = new LinkedList<>(); //用以保存正确的状态值
        for(int op:opts){
            int nSt = op ^ st;

           // System.out.println(nSt);

            if(nSt == 0){

                printOPs();
                continue;
            }

            if(historySt.contains(nSt)){ //如果状态已经存在过了
                continue;
            }
            if(check(nSt)) {
              //  System.out.println("**"+Integer.toBinaryString(nSt));
                historySt.add(nSt);
                queue.add(nSt);
                opQueue.add(op);
            }
        }

        Integer mSt;
       while ((mSt = queue.poll())!=null){
           stack.push(opQueue.poll());
           searchWay(mSt);
      //     System.out.println(Integer.toBinaryString(mSt));
           stack.pop();
       }

    }




    private boolean check(int state){


        for(int i = 0; i< forbidMask.length; i++){
            if((state & forbidMask[i])== forbid[i]){
                return false;
            }

            if(((~state) & forbidMask[i])== forbid[i]){

                return false;
            }

        }
       // historySt.add(s)
        return true;

    }

    private Map<Integer,String> map =new HashMap<>();
    {
        putMap("人","狗");
        putMap("人","鸡");
        putMap("人","米");
        putMap("人");
    }

    private void putMap(String... s){
        String v = s.length > 1? s[0]+s[1] : s[0];
        map.put(getState(s),v);
    }

    private void printOPs(){
        for(Integer i:stack){
            printOp(i);
        }
    }
    private void printOp(int mOp){
        System.out.println(map.get(mOp));
    }


    private int getState(String... values) {

        int resutl = 0;
        for (String v : values) {
           int idx = indexOf(participator,v);
           resutl |= 1<<idx;
        }


        return resutl;
    }

    private int indexOf(String[] strings,String s){
        for (int i = 0; i < strings.length; i++) {
            if(strings[i].equals(s)){
                return i;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        DifferenceModel df = new DifferenceModel();
        df.searchWay(df.intiSt);

    }
}

https://github.com/wwdz540/MyTest/blob/master/src/main/java/DifferenceModel.java

相关文章

  • 基于线性代数与 差分方程方法的模型的算法实现

    https://github.com/wwdz540/MyTest/blob/master/src/main/ja...

  • 协同过滤

    协同过滤算法有多个方法实现,基于邻域算法、隐语义模型、基于图的随机游走等基于邻域算法公认效果较好的算法,分以下2类...

  • 时间序列2 AR,MA,ARMA

    1. 方法性工具 1.1 延迟算子p阶差分和k步差分 式中为延迟算子 1.2 线性差分方程 差分方程 齐次特征方程...

  • 偏微分方程数值解

    目录 抛物方程的有限差分方法冯诺依曼分析法追赶法Crank-Nicolson方法边界条件 抛物型方程的有限差分方法...

  • 2020 时序分析(8) 差分方差

    今天我们了解一下差分方程,只有理解好了差分方程我们才能真正理解时间序列模型中平稳性时间序列时间模型的原理。所以有必...

  • 协同过滤算法

    协同过滤算法:基于用户行为数据设计的推荐算法,分为:基于邻域的方法、隐语义模型(LFM)、基于图的随机游走算法 1...

  • QoS基础(1)

    基于DiffServ差分服务模型的Qos主要分为三大类: 1、报文分类和重标记 要实现差分服务,首先要将报文分为不...

  • 图片处理-opencv-10.图像锐化与边缘检测

    图像锐化与边缘检测 1.Roberts算子 Roberts算子又称为交叉微分算法,它是基于交叉差分的梯度算法,通过...

  • 机器学习--K-means算法优化

    主要的聚类算法可以划分为如下几类:划分方法、层次方法、基于密度的方法、基于网格的方法以及基于模型的方法。目前,聚类...

  • 正则化(Regularization) 线性回归

    假设我们的模型是: 对于线性回归的求解,我们之前推导了两种学习算法:一种基于梯度下降,一种基于正规方程。 正则化线...

网友评论

      本文标题:基于线性代数与 差分方程方法的模型的算法实现

      本文链接:https://www.haomeiwen.com/subject/libgbxtx.html