2019年认证杯SPSSPRO杯数学建模B题(第一阶段)外星语词典全过程文档及程序

2019年认证杯SPSSPRO杯数学建模

基于方差分布的方法对未知语言文本中重复片段的自动搜索问题的研究

B题 外星语词典

原题再现:

  我们发现了一种未知的语言,现只知道其文字是以 20 个字母构成的。我们已经获取了许多段由该语言写成的文本,但每段文本只是由字母组成的序列,没有标点符号和空格,无法理解其规律及含义。我们希望对这种语言开展研究,有一种思路是设法在不同段文本中搜索共同出现的字母序列的片段。语言学家猜测:如果有的序列片段在每段文本中都会出现,这些片段就很可能具备某种固定的含义 (类似词汇或词根),可以以此入手进行进一步的研究。在文本的获取过程中,由于我们记录技术的限制,可能有一些位置出现了记录错误。可能的错误分为如下三种:
  1. 删失错误:丢失了某个字母;
  2. 插入错误:新增了原本不存在的字母;
  3. 替换错误:某个字母被篡改成了其他的字母。
  第一阶段问题: 假设我们已经获取了 30 段文本,每段文本的长度都在5000–8000 个字母之间。我们希望找到的片段的长度在 15–21 个字母之间。为简单起见,我们假设文本中出现的错误只有替换错误,而且对我们要找的片段而言,在文本中每次出现时,最多只会出现 4 个字母的替换错误。请设计有效的数学模型,快速而尽可能多地找到符合要求的字母片段,并自行编撰算例来验证算法的效果。

整体求解过程概述(摘要)

  本文针对未知语言文本中重复片段自动搜索的问题,运用了模式识别、非监督学习中的聚类算法等思想理论,构建了含有重复字母序列片段的未知语言文本模型,综合运用了 Matlab, Excel 等软件编程以及数据分析,最终能够高效、准确的找到重复出现的字母序列片段。
  本文的特色是借鉴模式识别中非监督学习的思想,利用方差这一数据统计特征把未知的样本数据中具有相似特点的数据归为一类,进而搜索出重复片段。由于重复出现字母序列片段的长度,所在文本段落中的出现位置都是随机的。针对这样的随机性和未知性,先通过方差这一数据统计特性,缩小搜索范围,相比于传统的穷举遍历法可减少搜索次数近 50 倍,大大提高了搜索速度。
  针对问题一,要求解决文本长度在 5000-8000 个未知语言字母(未知语言的文字由20 个字母构成)之间的 30 段文本中,搜索到长度为 15-21 个字母的重复出现的字母序列片段,并且此字母序列片段中会出现 0 至 4 个字母被篡改的替换错误的问题。首先,运用了随机取样的方法,构建了含有重复字母序列片段的未知语言文本模型,运用了Matlab 软件编写基于方差分布的自动搜索算法,再通过该算法能够搜索到重复的字母序列片段。
  针对问题二,要求解决评价所编写的算法的有效性及时效性问题,运用了 Matlab软件编程求解。最终得出本文所编写的算法有较高的准确率和时效性的结论。
  本文最后给出了基于方差分布的自动搜索算法的评价,客观地评价算法的优点和缺点。优点:1.提高运算速度,简化搜索过程;2.搜索到的重复字母序列片段准确性高;3. 此算法适应性强,对模型要求低。缺点:1.搜索的结果中会有一定数量的字母片段丢失;2. 当样本增长时,搜索时间将急速增长,不适用于过大的样本数量情况下的搜索。

问题分析:

  对问题一的分析
  该问题要求在文本长度在 5000-8000 个未知语言字母(未知语言的文字由20 个字母构成)之间的 30 段文本中,搜索到长度为 15-21 个字母的重复出现的字母序列片段,并且此字母序列片段中会出现 0 至 4 个字母被篡改的替换错误。首先,所研究的语言文字—字母未知,所以需要先将用已知语言的字母标记未知语言的字母。其次,实验所需的 30 段文本样本未知,我们需要建立 30 段未知语言的文本库。再次,保证每段文本中会含有重复出现的字母序列片段,同时也需要建立随机的目标字母序列片段库,并将产生的目标字母序列片段随机插入30 段文本中的随机位置。最后,根据非监督学习中的聚类算法的思想,编写程序算法,在文本中快速且多地搜索到含有替换错误的重复出现的目标字母序列片段。
  对问题二的分析
  由于模型一设计的算法已可以查找出问题中所要找的片段,但为了评价算法的查找能力,我们需要建立如下评价标准。我们通过实际算例验证所编写的算法的有效性及时效性。

模型假设:

  (1) 为方便计算,假设每段文本的长度均相同;
  (2) 假设希望找到的片段长度在 15-21 个字母之间;
  (3) 为了简化问题,假设问文本中出现的错误只有替换错误,并且所找片段中最多只出现 4 个字母的替换错误;
  (4) 为了方便提取随机样本,假设随机抽取的 30 段样本均满足均匀分布;
  (5) 由于语言未知,目前已知此语言由 20 个字母构成,为了方便生成样本研究,故使用英文字母 A~T(共 20 个)代表未知语言的 20 个未知字母。

论文缩略图:

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:(代码和文档not free)

clc;
clear;
%假设有original_num段原始数据,有target_num段目标数据,有替换错误
出现(每段目标数据有一个被随机替换)
%假设原始数据长度一致,目标数据长度随机,每段原始数据随机插入随机
段不同目标数据
%生成原始数据及目标数据
original_num = 30;
original_length = 5000; %原始数据长度
target_num = 10; %目标数据段数
target_length = ceil(rand(1,target_num)*7)+14; %目标数据长度矩阵,每一
列为对应段目标数据长度,取值为15~21
Origin_Data = ceil(rand(original_length,original_num)*20);
for i=1:target_numtemp = ceil(rand(target_length(1,i),1)*20); %按长度生成每段数据temp = [temp;zeros(21-length(temp),1)]; %将数据补零至21位(最大),
以便于合成矩阵Target(:,i) = temp; %生成的目标数据,每一列为一段
end
temp = []; %清空temp
%初始化替换后的目标数据
for i=1:original_numTarget_after(:,:,i) = Target; %每一列为目标数据,第三维为原始数据
个数
end
%生成替换后的目标数据
for i=1:original_numfor j=1:target_numreplace_index(i,j) = ceil(rand*target_length(1,j));replace_value(i,j) = ceil(rand*20);Target_after(replace_index(i,j),j,i) = replace_value(i,j);end
end
%生成插入下标,0表示不插入
Insert_index = zeros(original_num,target_num); %初始化插入位置下标
for i=1:original_num
index = 0; %当前插入下标
last_index = 0; %记录上一次插入下标for j=1:target_numtemp = rand;if temp>=0.5overlap_flag = 0; %下标重叠标志位while(overlap_flag==0)index = ceil(rand*(original_length-target_length(1,j))); %
随机生成下标
%如果当前生成下标与上一次生成下标差大于目标数据长度,则生成有效,
防止覆盖上一次插入值if(abs(index-last_index)>target_length(1,j))Insert_index(i,j) = index;
overlap_flag=1;
last_index = index;endend endend
end
temp = []; %清空temp
%将目标数据随机插入到原始数据中
for i = 1:original_numfor j=1:target_numif Insert_index(i,j) ~= 0 %只插入下标不为0的Origin_Data(Insert_index(i,j):Insert_index(i,j)+target_length(1,j)-1,i) = 
Target_after(1:target_length(1,j),j,i);endend
end
%%以上为随机生成的模型代码
%%以下为自动搜索算法的代码
%开始计时
tic
%采样参数
sample_length = 14; %单次采样长度
sample_count = original_length-sample_length+1; %采样次数
%存放采样后的矩阵
Origin_Data_sample = zeros(sample_length,sample_count,original_num);
%存放方差的矩阵
Origin_Data_var = zeros(original_num,sample_count);
%采样并计算方差
for i=1:original_numfor j=1:sample_lengthfor k=1:sample_countOrigin_Data_sample(:,k,i) = Origin_Data(k:k+sample_length-1,i);Origin_Data_var(i,k) = var(Origin_Data_sample(:,k,i),1); endend
end
%计算方差分布
var_divide_num = 13; %划分端点数,划分段数=段点数-1
max_var = max(max(Origin_Data_var)); %最大方差值
min_var = min(min(Origin_Data_var)); %最小方差值
var_divide_point = linspace(min_var,max_var,var_divide_num); %计算分割
点
var_divide_center = zeros(1,var_divide_num-1);
for i=1:var_divide_num-1var_divide_center(i) = mean(var_divide_point(i:i+1)); %计算分割中心
end
var_distribution_num = zeros(original_num,var_divide_num-1);
for i=1:original_numvar_distribution_num(i,:) = 
hist(Origin_Data_var(i,:),var_divide_center); %进行分割
end
%方差分布直方图
% figure(1)
% bar(var_divide_center,A_var_distribution_num);
% figure(2)
% bar(var_divide_center,B_var_distribution_num);
% figure(3)
% bar(var_divide_center,C_var_distribution_num);
% 
%对方差及其下标进行排序
var_order = zeros(original_num,sample_count);
var_index_order = zeros(original_num,sample_count);
for i=1:original_num[var_order(i,:),var_index_order(i,:)] = sort(Origin_Data_var(i,:));
end
%生成下标重排序矩阵,按照方差分布排序,便于后续寻找下标
for i=1:original_numfor j=1:var_divide_num-1for k=1:var_distribution_num(i,j)var_index_reorder(k,j,i) = 
var_index_order(i,sum(var_distribution_num(i,1:j-1))+k);endend
end
%两两按方差分布比较,位于同一方差分布段内的才进行比较,减少比较次
数
compare_count = 1;
similar_count = 1;
similar_num = 0;
for x=1:original_num-1for y=x+1:original_numfor n=1:var_divide_num-1for i=1:var_distribution_num(x,n)for j=1:var_distribution_num(y,n)error_count = 0; %初始化错误计数位for k=0:sample_length-1if Origin_Data(var_index_reorder(i,n,x)+k,x) ~= 
Origin_Data(var_index_reorder(j,n,y)+k,y) %如果不相等则error_count+1error_count = error_count+1; endif error_count>=4 %error_count>=4时,跳出
循环
break;endif k == sample_length-1 %k到达最大值,判断
AB相似,则记录下标similar_index(similar_count,compare_count) = var_index_reorder(i,n,x);similar_index(similar_count,compare_count+1) = var_index_reorder(j,n,y);similar_index(similar_count,compare_count+2) = var_index_reorder(i,n,x)-
var_index_reorder(j,n,y);similar_count = similar_count+1;
similar_num = similar_num+1;endendendend endcompare_count = compare_count+3;similar_count = 1;end
end
%计时结束
toc
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/235204.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Phoenix基本使用

1、Phoenix简介 1.1 Phoenix定义 Phoenix是HBase的开源SQL皮肤。可以使用标准JDBC API代替HBase客户端API来创建表,插入数据和查询HBase数据。 1.2 Phoenix特点 容易集成:如Spark,Hive,Pig,Flume和Map Reduce。性能…

golang并发安全-select

前面说了golang的channel, 今天我们看看golang select 是怎么实现的。 数据结构 type scase struct {c *hchan // chanelem unsafe.Pointer // 数据 } select 非默认的case 中都是处理channel 的 接受和发送,所有scase 结构体中c是用来存储…

C++模板——(4)C++泛型编程与标准模板库简介

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 勤奋,机会,乐观…

海量数据处理数据结构之Hash与布隆过滤器

前言 随着网络和大数据时代的到来,我们如何从海量的数据中找到我们需要的数据就成为计算机技术中不可获取的一门技术,特别是近年来抖音,快手等热门短视频的兴起,我们如何设计算法来从大量的视频中获取当前最热门的视频信息呢&…

Vue3:使用解构赋值来读取对象里的键-值对(值也是对象)

一、前言 在Vue3中,想要读取一个对象的“键—值”对(值也是一个对象),数据格式如下: {1:{courseName: 课程1, study: 951526, visit: 3785553},2:{courseName: 课程2, study: 181630, visit: 380830}&…

VCG 网格曲率计算

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 Mesh曲率特征通常指的是在三维几何网格(Mesh)上计算的曲率相关的一系列特征,包括主曲率、高斯曲率、平均曲率等。这些曲率特征提供了对Mesh表面形状的详细描述,对于表面形状分析、形状比较和几何建模等领域非常…

【UML】第16篇 活动图

目录 一、什么是活动图 二、应用场景: 三、绘图符号的说明: 四、语法: 五、例图 六、建模的流程 6.1 对业务流程建模时 6.2 对用例进行活动图建模时 一、什么是活动图 活动图(Activity Diagram)是UML中用于描…

msckf-vio 跑Euroc数据集,并用evo进行评估

所需材料: Euroc数据集主页:https://projects.asl.ethz.ch/datasets/doku.php?idkmavvisualinertialdatasetsevo评估工具代码:https://github.com/MichaelGrupp/evo向msckf-vio中添加保存位姿的代码,可参考https://blog.csdn.ne…

网络安全复习--简答整理

-----------------------------------------------------教材如上图------------------------------------------------------------ 1.对称加密和非对称加密各有什么特点?加密解密过程中有什么区别?优点P38【考】 对称加密的特点:在针对同一…

JDBC多表联查

JDBC多表联查 在单一表进行查询时&#xff0c;只需要对表中的单个字段进行解析即可&#xff1b;例如下面代码&#xff1a; Overridepublic List<ClassBean> selectAllDao() {List list new ArrayList();try {String sql "select * from class";rs select(s…

Spring MVC 参数接收

参数接收 Springmvc中&#xff0c;接收页面提交的数据是通过方法形参来接收&#xff1a; 处理器适配器调用springmvc使用反射将前端提交的参数传递给controller方法的形参 springmvc接收的参数都是String类型&#xff0c;所以spirngmvc提供了很多converter&#xff08;转换器…

网络名称解读 -入门5

WAN: Wide Area Network(跨区域&#xff09;&#xff0c;LAN&#xff1a; Local Area NetworkWAN MAC&#xff0c; 用来连接上级网络&#xff0c; LAN MAC&#xff0c; 用于内部网路。 LAN & WAN 3.1&#xff0c;LAN表示子网&#xff0c;通过掩码来筛选子网内主机数量&…

Unity Delaunay三角剖分算法 动态生成

Unity Delaunay三角剖分算法 动态生成 Delaunay三角剖分Delaunay三角剖分 定义Delaunay 边Delaunay 空圆特性 Delaunay 三角形Delaunay 最大化最小角特性 Delaunay 三角形特征Delaunay 算法Delaunay Lawson算法Delaunay Bowyer-Watson算法 Unity Delaunay三角剖分 应用Unity 工…

Vulnhub-VULNCMS: 1渗透

文章目录 一、前言1、靶机ip配置2、渗透目标3、渗透概括 开始实战一、信息获取二、获取shell三、获取密码文件四、提权 一、前言 由于在做靶机的时候&#xff0c;涉及到的渗透思路是非常的广泛&#xff0c;所以在写文章的时候都是挑重点来写&#xff0c;尽量的不饶弯路。具体有…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -后端鉴权拦截器实现

锋哥原创的uniapp微信小程序投票系统实战&#xff1a; uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

邻接矩阵、可达性矩阵、完全关联矩阵、可达性矩阵的计算

邻接矩阵&#xff1a;很简单&#xff0c;就是两个点有关系就是1&#xff0c;没有关系就是0 可达性矩阵&#xff1a;非常简单&#xff0c;两点之间有路为1&#xff0c;没有路为0 可发行矩阵的计算&#xff1a;有n个元素&#xff0c;初始可达性矩阵为A&#xff0c;那么最终的矩阵…

K2P路由器刷OpenWrt官方最新版本固件OpenWrt 23.05.2方法 其他型号的智能路由器OpenWrt固件刷入方法也基本上适用

最近路由器在开机时总出问题,于是就那他来开刀,直接刷一个OpenWrt官方最新版本的固件, 刷其他第三方的固件总是觉得不安全, 而且很多第三方固件都带了些小工具,始终会有安全隐患, 而且占用内存空间太多,本来这个东西就没有多少内存,于是就干脆刷一个官方的原始固件(才6.3M, 相…

使用numpy处理图片——滤镜

大纲 3维数组切分打平重组法深度切分法 3维数组堆叠 我们在用手机拍照片时&#xff0c;往往会对照片进行滤镜处理&#xff0c;从而让照片更加美观。本文我们将实现几种滤镜效果——去除所有像素中的某一种原色&#xff0c;形成只有红绿、红蓝和绿蓝原色的照片。 为了突出色彩丰…

怎么投稿各大媒体网站?

怎么投稿各大媒体网站&#xff1f;这是很多写作者及自媒体从业者经常面临的问题。在信息爆炸的时代&#xff0c;如何将自己的文章推送到广大读者面前&#xff0c;成为了一个不可避免的挑战。本文将为大家介绍一种简单有效的投稿方法——媒介库发稿平台发稿&#xff0c;帮助大家…

可重入锁和不可重入锁

概念 Reentrant Re entrant&#xff0c;Re是重复、又、再的意思&#xff0c;entrant是enter的名词或者形容词形式&#xff0c;翻译为进入者或者可进入的&#xff0c;所以Reentrant翻译为可重复进入的、可再次进入的&#xff0c;因此ReentrantLock翻译为重入锁或者再入锁。 可…