zoukankan      html  css  js  c++  java
  • java实现第五届蓝桥杯信号匹配

    信号匹配
    从X星球接收了一个数字信号序列。
    
        现有一个已知的样板序列。需要在信号序列中查找它首次出现的位置。这类似于串的匹配操作。
    
        如果信号序列较长,样板序列中重复数字较多,就应当注意比较的策略了。可以仿照串的KMP算法,进行无回溯的匹配。这种匹配方法的关键是构造next数组。
    
        next[i] 表示第i项比较失配时,样板序列向右滑动,需要重新比较的项的序号。如果为-1,表示母序列可以进入失配位置的下一个位置进行新的比较。
    
        下面的代码实现了这个功能,请仔细阅读源码,推断划线位置缺失的代码。
    
    // 生成next数组 
    int* make_next(int pa[], int pn)
    {
        int* next = (int*)malloc(sizeof(int)*pn);
        next[0] = -1;
        int j = 0;
        int k = -1;
        while(j < pn-1){
            if(k==-1 || pa[j]==pa[k]){
                j++;
                k++;
                next[j] = k;
            }
            else
                k = next[k];
        }
        
        return next;
    }
    
    // da中搜索pa, da的长度为an, pa的长度为pn 
    int find(int da[], int an, int pa[], int pn)
    {
        int rst = -1;
        int* next = make_next(pa, pn);
        int i=0;  // da中的指针 
        int j=0;  // pa中的指针
        int n = 0;
        while(i<an){
            n++;
            if(da[i]==pa[j] || j==-1){
                i++;
                j++;
            }
            else
                __________________________;  //填空位置
            
            if(j==pn) {
                rst = i-pn;
                break;
            }
        }
        
        free(next);
            
        return rst;
    }
    
    int main()
    {
        int da[] = {1,2,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1,1,2,1,2,3};
        int pa[] = {1,2,1,1,2,1,1,1,2};
        
        int n = find(da, sizeof(da)/sizeof(int), pa, sizeof(pa)/sizeof(int));
        printf("%d
    ", n);
        
        return 0;
    }
    
    
    
    注意:通过浏览器提交答案。只填写缺少的内容,不要填写任何多余的内容(例如:说明性文字或已有符号)
    
    
    
    j = next[j]
    
  • 相关阅读:
    CALL FUNCTION 'BAPI_GOODSMVT_CREATE'-(物料凭证创建)
    SAP邮件
    sap人员编制
    ABAP 日期栏函数
    SAP建数据库索引
    去前导零
    SD相关的表
    php 使用 file_exists 还是 is_file
    FastAdmin 的 CRUD 不支持层级模型
    使用 Visual Studio Code (VSCODE)写 C51 (持续更新 2018-04-09)
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13077165.html
Copyright © 2011-2022 走看看