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

news2024/11/18 17:53:35

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_num
 temp = 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_num
 Target_after(:,:,i) = Target; %每一列为目标数据,第三维为原始数据
个数
end
%生成替换后的目标数据
for i=1:original_num
 for j=1:target_num
 replace_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_num
 temp = rand;
 if temp>=0.5
 overlap_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;
 end
 end 
 end
 end
end
temp = []; %清空temp
%将目标数据随机插入到原始数据中
for i = 1:original_num
 for j=1:target_num
 if 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);
 end
 end
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_num
 for j=1:sample_length
 for k=1:sample_count
 Origin_Data_sample(:,k,i) = Origin_Data(k:k+sample_length-1,i);
 Origin_Data_var(i,k) = var(Origin_Data_sample(:,k,i),1); 
 end
 end
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-1
 var_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_num
 var_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_num
 for j=1:var_divide_num-1
 for 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);
 end
 end
end
%两两按方差分布比较,位于同一方差分布段内的才进行比较,减少比较次
数
compare_count = 1;
similar_count = 1;
similar_num = 0;
for x=1:original_num-1
 for y=x+1:original_num
 for n=1:var_divide_num-1
 for i=1:var_distribution_num(x,n)
 for j=1:var_distribution_num(y,n)
 error_count = 0; %初始化错误计数位
 for k=0:sample_length-1
 if Origin_Data(var_index_reorder(i,n,x)+k,x) ~= 
Origin_Data(var_index_reorder(j,n,y)+k,y) %如果不相等则error_count+1
 error_count = error_count+1; 
 end
 if error_count>=4 %error_count>=4时,跳出
循环
break;
 end
 if 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;
 end
 end
 end
 end 
 end
 compare_count = compare_count+3;
 similar_count = 1;
 end
end
%计时结束
toc
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

哈希表-散列表数据结构

1、什么是哈希表? 哈希表也叫散列表,哈希表是根据关键码值(key value)来直接访问的一种数据结构,也就是将关键码值(key value)通过一种映射关系映射到表中的一个位置来加快查找的速度,这种映射关系称之为哈希函数或者散列函数&…

性能分析与调优: Linux 磁盘I/O 观测工具

目录 一、实验 1.环境 2.iostat 3.sar 4.pidstat 5.perf 6. biolatency 7. biosnoop 8.iotop、biotop 9.blktrace 10.bpftrace 11.smartctl 二、问题 1.如何查看PSI数据 2.iotop如何安装 3.smartctl如何使用 一、实验 1.环境 (1)主机 …

HarmonyOS4.0系统性深入开发15Want概述

Want概述 Want的定义与用途 Want是对象间信息传递的载体,可以用于应用组件间的信息传递。其使用场景之一是作为startAbility()的参数,包含了指定的启动目标以及启动时需携带的相关数据,如bundleName和abilityName字段分别指明目标Ability所…

Vue-10、Vue键盘事件

1、vue中常见的按键别名 回车 ---------enter <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>键盘事件</title><!--引入vue--><script type"text/javascript" src"h…

游戏版 ChatGPT,要用 AI 角色完善生成工具实现 NPC 自由

微软与 AI 初创公司 Inworld 合作&#xff0c;推出基于 AI 的角色引擎和 Copilot 助理&#xff0c;旨在提升游戏中 NPC 的交互力和生命力&#xff0c;提升游戏体验。Inworld 致力于打造拥有灵魂的 NPC&#xff0c;通过生成式 AI 驱动 NPC 行为&#xff0c;使其动态响应玩家操作…

问题记录:关于vivado报错解决

start_gui open_project E:/githome/xxxx.xpr ERROR: [Project 1-510] Parsing generated run data failed 在某些时候打开工程出现如下错误&#xff0c;运行源文件损坏。 解决办法&#xff1a; 重新打开工程。

scrollTop与offsetTop解决小分辨率区域块向上滚动效果效果,结合animation与@keyframes实现标题左右闪动更换颜色效果。

scrollTop 是一个属性&#xff0c;它表示元素的滚动内容垂直滚动条的位置。对于可滚动元素&#xff0c;scrollTop 属性返回垂直滚动条滚动的像素数&#xff0c;即元素顶部被隐藏的像素数。 offsetTop 是一个属性&#xff0c;用于获取一个元素相对于其父元素的垂直偏移量&…

揭秘智慧礼品背后的故事:AI怎么挑选礼物?

如若不是从事技术行业&#xff0c;在罗列礼品清单时&#xff0c;可能不会想到 “数据”&#xff0c;但幸运的是&#xff0c;我们想到了。如何将AI技术应用到当季一些最受青睐的产品中去&#xff0c;训练数据是这一智能技术的背后动力。很多电子设备或名称中带有“智能”一词的设…

中年危机与自我成长职业女性的心理转型之路

中年危机与自我成长&#xff1a;职业女性的心理转型之路 案例&#xff1a;李女士&#xff0c;45岁&#xff0c;职业女性 李女士是一位职业女性&#xff0c;人到中年&#xff0c;她突然感到自己的生活仿佛失去了方向。她来找我咨询&#xff0c;希望能够找到一条心理转型的道路&a…

数据结构入门到入土——链表(完)LinkedList

目录 一&#xff0c;双向链表 1.单向链表的缺点 2.什么是双向链表&#xff1f; 3.自主实现双向链表 接口实现&#xff1a; 二&#xff0c;LinkedList 1.LinkedList的使用 1.1 什么是LinkedList&#xff1f; 1.2 LinkedList的使用 1.LinkedList的构造 2.LinkedList的…

Ubuntu下多设备映射名称设置

目录 序言解决方法详细步骤编写映射规则文件针对 外设硬件信息 进行区分针对 机器人系统接口信息 进行区分 生效映射规则 摄像头外设特殊说明参考文献 序言 在机器人开发过程中&#xff0c;开发者会使用到多个外设&#xff0c;在传感器外设中&#xff0c;会用到激光雷达、摄像头…

关于git使用的tips

前言 这里是一些git指令使用的tips&#xff0c;如果你作为初学者的话&#xff0c;我认为它将对你有所帮助。 常见指令 常见问题处理 1、使用git clone下载【huggingface.co】资源超时或无法请求问题 绝大多数情况是网络问题&#xff0c;首先如果是比较大的资源&#xff0c;你需…

Centos7升级openssl到openssl1.1.1

Centos7升级openssl到openssl1.1.1 1、先查看openssl版本&#xff1a;openssl version 2、Centos7升级openssl到openssl1.1.1 升级步骤 #1、更新所有现有的软件包列表并安装最新的软件包&#xff1a; $sudo yum update #2、接下来&#xff0c;我们需要从源代码编译和构建OpenS…

【教3妹学编程-算法题】移除后集合的最多元素数

3妹&#xff1a;好冷啊&#xff0c; 冻得瑟瑟发抖啦 2哥 : 这才哪跟哪&#xff0c;上海这几天温度算是高的啦。你看看哈尔滨&#xff0c;那才是冰城。 3妹&#xff1a;据说沈阳千名“搓澡大姨”支援哈尔滨&#xff1f;哈哈哈哈 2哥 : 就像今年的淄博烧烤&#xff0c;可能有炒作…

【VTKExample::Visualization】第四期 BLOW

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享Blow样例,用于挤出吹塑工艺的有限元分析,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 目录 前言 1. Blow样例

Mariadb和mysql数据库的区别和相同之处

目 录 一、maridb 和mysql在linux系统中广泛应用 二、MySQL数据库 三、MariaDB数据库 四、MariaDB和MySQL有哪些相同点 五、MariaDB和MySQL的不同点 一、mariadb 和mysql在linux系统中广泛应用 用linux&#xff08;包括centos和Ubuntu&#xff09;的都知道&a…

浅谈WAF——守护网络安全的无形之盾

随着信息化时代的到来&#xff0c;网络已逐渐融入我们日常生活的方方面面。然而&#xff0c;与此同时&#xff0c;网络安全问题却也如影随形。为此&#xff0c;一种名为“Web应用防火墙”的工具应运而生&#xff0c;简称”WAF”。 WAF是什么&#xff1f; WAF&#xff08;Web …

再不收藏就晚了,Axure RP Pro 各版本大集合

Axure RP Pro下载链接 https://pan.baidu.com/s/1hRJRY6t0ZONKhdwvykAc3g?pwd0531 1.鼠标右击【Axure RP Pro9.0】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 Axure RP Pro9.0】。 2.打开解压后的文件夹&#xff0c;鼠标右击【Axu…

Java进阶 1-3 枚举(switch的新特性)

本笔记参考自&#xff1a; 《On Java 中文版》 在Java中&#xff0c;“模式匹配”经历过好几个版本的功能扩充。这些扩充和switch关键字密切相关。如果对Java最新的特性感兴趣&#xff0c;可以查看Java增强建议&#xff08;JEP&#xff09;。 新特性&#xff1a;switch的箭头语…

Java爬虫获取省市区镇村5级行政区划

公司有个项目需要五级行政区划&#xff0c;没有现成的数据&#xff0c;写了一段代码&#xff0c;从gj统计j获取的数据。记录一下。 1.引入maven解析html <!-- jsoup --> <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifa…