[发明专利]基于语义计算的中值选取算法在审
申请号: | 201810303261.9 | 申请日: | 2018-04-07 |
公开(公告)号: | CN108563614A | 公开(公告)日: | 2018-09-21 |
发明(设计)人: | 段玉聪;宋正阳 | 申请(专利权)人: | 海南大学 |
主分类号: | G06F17/18 | 分类号: | G06F17/18 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 570228 海南省*** | 国省代码: | 海南;46 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 算法 语义 算法设计 选择算法 语义分析 时间复杂度 数据结构 问题描述 策略性 奥卡 构建 剃刀 优化 展示 分析 | ||
1.本发明定义提出的中位数选择策略为MS,输入是一组数字{x1, x2, x3, x4, x5, x6,... , xn}, 对于{xi, xi + 1}中的每两个数字,本发明设置用于演示目的的顺序方向,假设每个数字的价值都不同,并指定相关规则,其特征在于有如下步骤:
步骤S01)输入一组数字{x1, x2, x3, x4, x5, x6, ... , xn},定义为数组ARR,并以{xi, xi+1}的形式组织ARR;
步骤S02)xi 与 xi+1比较大小,若xi > xi+1, 则交换xi 和 xi+1的位置
步骤S03)从ARR中以{xi, xi+1}形式逐次取值(i>2);
步骤S04)放入已处理队列,评估MS的所有属性pMS,本发明给出前两次处理的pMS评估如下:
步骤S041)方法从数字对{x1, x2}开始,比较1次,我们会得到:
x1 <x2或x1> x2
(S1)这两种情况在展示当前方法方面没有区别,因为这两个数字的值在开始时实际上是可变的;由于我们正在搜索上界,并且x1 <x2需求无操作来维持方向;
本发明选择了x1> x2这个更复杂的情况,
(S2)我们做1次切换操作以得到在指定方向上的x2 <x1;
评估中位数:x1和x2均为中位数;
隐形中间分界在x1和x2之间, 本发明假定有一个中间分界线MDL,形式为: {x2} MDL{x1},然后,对于包含两个新数字的已处理队列,在每次引入两个新数字作为MDL的迭代处理之前,本发明提出的策略将集中在维持MDL;
步骤S042)引入数字对{x3,x4},比较1次,我们会得到
x3 <x4或x3> x4
(S1)我们选择x3> x4情况作为更复杂的情形,这种情形需要1次交换操作,交换之后,我们得到x4 <x3;
(S2)然后将它们引入{x2} MDL {x1},在MDL的两侧需要一次划分,最初的2个比较将是x4 与 x2和x3 与 x1比较大小,根据每次比较的两种可能性,会有4种组合情形:
{x4 <x2 且 x3> x1,x4> x2 且 x3 <x1,x4 <x2 且 x3 <x1,x4> x2 且 x3> x1}
步骤S043)容易和困难的两种情况的处理,根据对称情况的相同性,细分这四种情形分为两种情形:
(S1)情况(i):x4 <x2 且 x3> x1或x4> x2 且 x3 <x1,
对于x4 <x2且x3> x1,中值评估的结果将为{x2} MDL {x1},
对于x4> x2且x3 <x1,中值评估的结果将为{x4} MDL {x3},
因此,中值选择的下界将是这种情况的不断重合;由于对于两个新数字的处理,只有两次的引入比较,因此n个数值的中位数选择的下限是:Omega(1.5n),因为结合了为两个引入数字的一次初始比较和情况(i)中的2次比较;
这种情况的特点是每次处理都能很好地保持pML和pMR,并且由于ML和MR的顺序被保持,所以pMLR得到很好的保持;
(S2)情况(ii):x4 <x2 且 x3 <x1或x4> x2 且 x3> x1,
这种情况不同于情况(i),因为ML与MR的比较结果的顺序不能被保证以符合pMLR的属性,象征性地,ML> MR或ML <MR这种情况的复杂性与相关数字的具体含义无关,同时,具体表示的数字将证实这种情况的复杂性,因此为了便于解释,我们选择该场景的具体代表性名称为:x4 <x2且x3 <x1
(S21)此时,本发明规定ML :: = x2,MR :: = x3;
(S22)为了评估pMLR,需要1次比较: x2 与 x3比较;
对于这两种可能的情况,
a.如果x2 <x3,则保持pMLR,处理在当前阶段完成,并且可以进入另一轮迭代;
b.如果x2> x3,则不保持pMLR,处理在当前阶段完成,并且可以进入另一轮迭代;
因为我们正在寻找MS的上限,我们选择利用在单独的左侧比较和右侧比较之后更复杂的ML> MR的情况,因此我们选择探索的场景:
x2> x3
(S23)因此,需要一次交换才能切换到MDL的另一侧:
x2→MR
x3→ML
(S24)由于这次切换改变了两侧的元素,需要再次评估<pML,pMR,pMLR>的pMS,
对于pML,需要评估x4 与 ML比较的大小,由于x3> x4,pML属性是有保证的;
从语义上讲,MS在整个过程中对这种情况的一般意义是引入的两个数字转换到了同一侧;
本发明将情景的影响表示为pML | MRN;对于pMR,需要评估x1 与 MR的比较;
从语义上讲,这个场景对于整个MS处理过程的一般意义在于,对于引入两个新数字之前的队列,先前合理的ML或MR(用MLbefore和MRbefore表示)转移到在引入两个新数字之前仅由相同的元素组成的另一侧(用sidebefore(ML)和sidebefore(MR)表示),在MLnew和MRnew引入两个新数字之后,重新将队列中的ML或MR表示为合理的ML或MR;
那么对于这种情况的MLnew或MRnew评估是MLnew 与 sidebefore(MR)比较大小或MRnew 与sidebefore(ML)比较大小;
根据在引入两个数字之前合理队列的中位数的定义,已知的顺序是MLnew < sidebefore(MR)的每个元素,所以MLnew<sidebefore(MR),相应地,我们得到MRnew> sidebefore(ML);
从语义上讲,这种情况的含义是前一个中位数被交换到仅由相同顺序中的前面元素组成的MDL一侧,对于这种情况,定理是不需要操作维护pML或pMR,我们将情景的结果影响表示为pML | MRY;
对于pMLR,如果pML和pMR都保持不变,那么pMLR也是合理的;
一般来说,在每个复杂处理过程中会有两个相互关联的情况,称为cMS:
cMS :: = <pML | MRN,pML | MRY>
步骤S05)pML | MRN上的建设性语义启示,对于pML | MRN,更一般的情况是,在用{a,b}和a <b表示的两个新引入的数字切换到MDL的一侧,组成sidebefore(ML)(不包括MLbefore)或sidebefore(MR)(不包括MRbefore)之前, 需要去验证新的ML 或 MR:
对于MLnew,它位于{{b}, sidebefore(ML) - MLbefore}之中
对于MRnew,它位于{{a}, sidebefore(MR) - MRbefore}之中
从语义上讲,就全局评估所需的操作次数而言,两种情况彼此相等,因此可以选择使用其中的任何一种情况来进行后续解释,本发明选择从{{b}, sidebefore(ML) - MLbefore}中找到MLnew作为代表方案;建设性地,我们从之前的四个数字场景{x1, x2, (MDL), x3,x4}before继续前面的特定的具体分析开始,对这些数字的表示进行了更新,以便后续的理解;
由于MLbefore是x2, sidebefore(ML) - MLbefore是{x1},当a<b被引入到左侧时,{{b},sidebefore(ML) - MLbefore}是{{b}, {x1}}:
MLnew :: = min {{b},{x1}} = min {b,x1}
经过1次比较后,我们会得到b和x1之间的顺序,将会有两种可能的模式:
步骤S06)(i)branchNew模式
b <x1,MLnew = x1
从语义上讲,这种情况可以解释为(a,b)将被链接到x1;
从语义上讲,一般意义地,这种情况可以解释为,所引入的新数字对(在此场景中是(a,b))将排序在MDL一侧的最小或最大数据集合(不包括之前的ML或MR的中值)即biggest(sidebefore(ML) - MLbefore )或者 smallest(sidebefore(MR) - MRbefore)之后作为新的分支;
在两侧的数据集合的新状态如下:
MLnew::= biggest(sidebefore(ML) - MLbefore )
表示MLnew是(sidebefore(ML) - MLbefore )的最大数字;
Sidenew(ML)::={ sidebefore(ML) - MLbefore , (a,b) precede biggest(sidebefore(ML)- MLbefore ) as a new branch}
其中,(a,b) precede biggest(sidebefore(ML) - MLbefore ) as a new branch表示(a,b) 作为新分支放在(sidebefore(ML) - MLbefore )的最大数字之前;
或者:
MRnew::= smallest(sidebefore(MR) - MRbefore )
表示(sidebefore(MR) - MRbefore )的最小数字
Sidenew(MR)::={ sidebefore(MR) - MRbefore, (a,b) follow smallest(sidebefore(MR)- MRbefore ) as a new branch}
其I中,(a,b) follow smallest(sidebefore(MR) - MRbefore ) as a new branch表示(a,b) 作为新分支放在(sidebefore(MR) - MRbefore )最小数字后面;
步骤S07)(ii)branchBefore模式
b> x1,MLnew = x1
从语义上讲,这种情况可以解释为,x1将被链接到b;
从语义上讲,一般意义地,这种情况可以解释为MDL一侧数据集合的最小或最大数字(不包括先前的ML或MR的中值),即biggest(sidebefore(ML) - MLbefore )或smallest(sidebefore(MR) - MRbefore)将作为一个新的分支链接到新引入的一对数字的较小或较大数字中,本例中是(a,b);
在两侧的数据集合的新状态如下:
MLnew::= b
Sidenew(ML)::={ sidebefore(ML) - MLbefore , {a, b}, biggest(sidebefore(ML) -MLbefore ) as a new branch precedes b as a new branch}
其中,biggest(sidebefore(ML) - MLbefore ) as a new branch precedes b as a newbranch表示 (sidebefore(ML) - MLbefore ) 的最大数字作为新分支放在b之前作为新分支;
或者:
MRnew::= b
Sidenew(MR)::={ sidebefore(MR) - MRbefore , {a, b}, smallest(sidebefore(MR) -MRbefore ) as a new branch follows b as a new branch }
其中,smallest(sidebefore(MR) - MRbefore ) as a new branch follows b as a newbranch表示(sidebefore(MR) - MRbefore )最小数字作为新分支放在b之后作为新分支;
步骤S08)基于步骤S07更新已处理队列;
步骤S09)判断ARR中的数字对是否已被处理完毕,若处理完毕,输出中位数,若未完毕,继续取数字对处理;
本发明对算法的一些重要分析,一种基于语义计算的中值选取算法,其特征在于有如下分析步骤:
步骤1)分枝和保护的分析,
branchNew和branchBefore的分支情况是根据分支点MLnew或MRnew差异来表示的,属于新的数据对引入之前新的已引入的数字对或数字集,然而,这种区分对于评估计算而言并不意味着必要的语义;
影响:
唯一有意义的或重要的语义是,1个分支被添加到biggest(sidebefore(ML) - MLbefore )的集合或smallest(sidebefore(MR) - MRbefore)的集合任意一者的前一个状态;
原子:
语义分支是完整的、必要和充分的比较操作结果的表达,所以它的影响是独立于其他原子操作的;
分支的传递和保护:
对于一系列分支操作,一组数字上的不同操作顺序可能会产生不同形式的树比如表达式,由于分支表达式作为一个整体不是顺序敏感的,因此它们仅仅可以在相同的目标数字集合S上针对相同数量的M个比较产生相同数量的N个分支,用如下定义表达:
N :: = SameAmountBranches(M,S)
通过考虑分支的数量而不是相应树的形态的实际变化,本发明使用基本语义来避免繁琐地形式模型列举,这种举例在前面已经做过了,以证实这里的抽象;
对于n个数字上的一次MS进程,可以通过假设每次引入一对新数字来创建1个新分支以评估最大数量的分支,引入分支的最大数量是:n / 2个
步骤2)建设性逆向合并和获取最小/最大的分析
一个基本的事实是合并两个分离的分支将需要一次比较,每次从{sidebefore(ML)-MLbefore}或{sidebefore(MR)-MRbefore}的已暴露的孤立分支中获得biggest(sidebefore(ML)-MLbefore)或smallest(sidebefore(MR)-MRbefore)将花费1到n / 2次比较;
根据遵循逆向工程的思想,本发明可以建设性地设计一个实施过程,用于限制整个MS过程中查找所有必要的biggest(sidebefore(ML) - MLbefore )或smallest(sidebefore(MR) -MRbefore)的最大合并次数,让其等于创建的分支的数量;
基本的思想是,对于每一次合并比较,尽可能限制所操作的两个比较得而数字是不同的数字,因此,合并操作将始终将多分支树转换为二叉树的层次结构,例如,当x5作为ML移到MDL的另一侧时,为获得biggest(sidebefore(ML) - MLbefore ),sidebefore(ML)的双层结构可以像{{x1, x2, x3, x4} 先于 x5}一样复杂,需要合并{x1,x2,x3,x4}的4个分支;
不会仅仅从中搜索最大的数字,将为它构造一棵二叉树,这样每个比较的语义将被保存以备将来重复使用而无需重复操作;
本发明尽可能地将比较限制为不同的数字,以充分利用每个单一比较操作的区分可能性,说明的构造树是{(x1 先于x2), (x3 先于x4), (x2 先于x4) }并且x4是ML;
在这种二叉树上删除最小/最大值后,寻找最小/最大值的进一步请求将不需要比较,因为比较已经完成并记录在相应的树中,对于在sidebefore(ML) 或 sidebefore(MR)中n / 2个节点的最大数量,获得所有biggest(sidebefore(ML) - MLbefore ) 或smallest(sidebefore(MR) - MRbefore)的最大比较量是和具体的态射变化不相关的,而是仅与分支的数量有关,只要分支的最大数量是n / 2,所需要的合并操作的最大数量就可以被限制为n / 2;
步骤3)评估上限,对于复杂情况,把必要的比较操作的数量放在一起,需要n / 2次操作才能将所有n个数字准备为有序对,需要n次操作才能进行初始pML和pMR评估,需要n / 2次操作来评估pMLR,从分支的保存质量来看,需要在所有n / 2操作中获得MDL两侧所有最小或最大的数字,需要n / 2次操作比较本地最小或最大以获得ML和MR,总的来说,n个数字的MS复杂度的上界是:
N / 2 + N + N/ 2 + N / 2+ N / 2=3N。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于海南大学,未经海南大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810303261.9/1.html,转载请声明来源钻瓜专利网。