信号匹配

从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", n); return 0;
} 注意:通过浏览器提交答案。只填写缺少的内容,不要填写任何多余的内容(例如:说明性文字或已有符号) j = next[j]

java实现第五届蓝桥杯信号匹配的更多相关文章

  1. java实现第五届蓝桥杯殖民地

    殖民地 带着殖民扩张的野心,Pear和他的星际舰队登上X星球的某平原.为了评估这块土地的潜在价值,Pear把它划分成了M*N格,每个格子上用一个整数(可正可负)表示它的价值. Pear要做的事很简单- ...

  2. java实现第五届蓝桥杯LOG大侠

    LOG大侠 atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称Log大侠. 一天,Log大侠的好友 drd 有一些整数序列需要变换,Log大侠正好施展法力- 变换的规则是: 对其某个 ...

  3. java实现第五届蓝桥杯生物芯片

    生物芯片 X博士正在研究一种生物芯片,其逻辑密集度.容量都远远高于普通的半导体芯片. 博士在芯片中设计了 n 个微型光源,每个光源操作一次就会改变其状态,即:点亮转为关闭,或关闭转为点亮. 这些光源的 ...

  4. java实现第五届蓝桥杯供水设施

    供水设施 X星球的居民点很多.Pear决定修建一个浩大的水利工程,以解决他管辖的N个居民点的供水问题.现在一共有N个水塔,同时也有N个居民点,居民点在北侧从1号到N号自西向东排成一排:水塔在南侧也从1 ...

  5. java实现第五届蓝桥杯排列序数

    排列序数 如果用a b c d这4个字母组成一个串,有4!=24种,如果把它们排个序,每个串都对应一个序号: abcd 0 abdc 1 acbd 2 acdb 3 adbc 4 adcb 5 bac ...

  6. java实现第五届蓝桥杯幂一矩阵

    幂一矩阵 天才少年的邻居 atm 最近学习了线性代数相关的理论,他对"矩阵"这个概念特别感兴趣.矩阵中有个概念叫做幂零矩阵.对于一个方阵 M ,如果存在一个正整数 k 满足 M^k ...

  7. java实现第五届蓝桥杯斐波那契

    斐波那契 标题:斐波那契 斐波那契数列大家都非常熟悉.它的定义是: f(x) = 1 .... (x=1,2) f(x) = f(x-1) + f(x-2) .... (x>2) 对于给定的整数 ...

  8. java实现第五届蓝桥杯神奇算式

    神奇算式 题目描述 由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成. 比如: 210 x 6 = 1260 8 x 473 = 3784 27 x 81 = 2187 都符合要求 ...

  9. java实现第五届蓝桥杯扑克序列

    扑克序列 AA223344,一共4对扑克牌.请你把它们排成一行. 要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌. 4A3A2432, 2342A3A4 请填写出 ...

随机推荐

  1. 帝国cms 批量替换 字段内容包含的 指定的 关键字 SQL命令

    帝国cms 批量替换 字段内容包含的 指定的 关键字update phome_ecms_news_data_1 set newstext=replace(newstext,'原来','现在');

  2. Azure B2C登录,react-web端实现,自定义登录页面ui

    import React, { Component } from 'react'; import Particles from 'react-particles-js'; import { Form, ...

  3. 如何搭建一个WEB服务器项目(五)—— Controller返回JSON字符串

    从服务器获取所需数据(JSON格式) 观前提示:本系列文章有关服务器以及后端程序这些概念,我写的全是自己的理解,并不一定正确,希望不要误人子弟.欢迎各位大佬来评论区提出问题或者是指出错误,分享宝贵经验 ...

  4. hadoop与spark的处理技巧(四)推荐引擎处理技巧

    经常一起购买的商品 scala> var file=sc.textFile("/user/ghj/togeterBought") file: org.apache.spark ...

  5. 【雕爷学编程】Arduino动手做(54)---大按键点动模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...

  6. 类linux 系统上端口被占用

    好几次遇到这问题,明明Ctrl+C退出了node,但是下次启动的时候总是会报错: listen EADDRINUSE :::80 之类的. 这时候可能是被占用,也可能是上次进程没有真的退出. ps - ...

  7. node中几个路径的梳理

    大半夜睡不着... 今天用node写了返回客户端请求资源的http服务,确实发现了一些以前没注意到的问题. 第一个是在接收到请求的时候,解析完路径后,一定要判断请求的文件的后缀,以便选择对应的Cont ...

  8. 异步http接口调用库:httpx

    谈到http接口调用,Requests大家并不陌生,例如,robotframework-requests.HttpRunner等HTTP接口测试库/框架都是基于它开发.这里将介绍另一款http接口测试 ...

  9. 王艳 201771010127《面向对象程序设计(java)》第七周学习总结

    1.实验目的与要求 (1)进一步理解4个成员访问权限修饰符的用途: (2)掌握Object类的常用API用法: (3)掌握ArrayList类用法与常用API: (4)掌握枚举类使用方法: (5)结合 ...

  10. hdu3861他的子问题是poj2762二分匹配+Tarjan+有向图拆点 其实就是求DAG的最小覆盖点

    The King’s Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...