首页 > 编程语言 >Floyd良序集法证明程序终止性

Floyd良序集法证明程序终止性

时间:2023-12-12 23:33:06浏览次数:34  
标签:良序 函数 断言 证良 证明 Floyd 循环 集法

1.设断点并建断言

  (1)开始处A:

  (2)循环主干处B,C等:

2.取良序集并定义函数

  (1)良序集:一般为<N,<>(与证良函数有关)

  (2)函数:为存在循环的断点定义函数f(x)(注意:f(x)需要随着循环递减)

    • 找随循环递减的f(x)的技巧:
      • 看变化量和跳出循环的判断条件中的变量
      • 尝试单个变量
      • 尝试简单相加减
      • 尝试给变量乘以循环中变化系数的反函数

3.证良断言(与归纳断言法的证明方法一致)

  (1)回顾:

    

4.证良函数

  (1)证明fB(X,Y)是良函数,只需证

      

5.证明终止条件成立

  (1)只需证明以下成立

    例:

6.例题

  以下例题是证明完全正确性,即证明部分正确性+终止性,需要使用归纳断言法和良序集法一起证明

   

 

  解题过程:

 

 

 

  

 

  

  

 

标签:良序,函数,断言,证良,证明,Floyd,循环,集法
From: https://www.cnblogs.com/lavendery/p/17898090.html

相关文章

  • Floyd归纳断言法验证程序部分正确性
    1.设断点一般我们会在如下位置设置断点:(1)程序开始处(2)程序结束处(3)循环主干处2.建断言(1)开始处A:一般为题干的要求,写为 (2)结束处C:一般为输出结果z,写为 (3)循环主干处:(写为)此处断言最为难建立,一般......
  • 第 132 场周赛——质数小结论,并查集配Floyd
    https://www.acwing.com/activity/content/competition/problem_list/3648/B题收获:1.利用题目告诉的结论:1e9范围质数之差小于3002.一个数不被2-a的任何数整除等价于他的最小质因子需要大于ac题:初步宏观思路:不难想到用并查集维护类别,只需将每一个类缩成一个点,由于最多只有500......
  • floyd算法
    FLOYD复杂度Floyd-Warshall算法的时间复杂度为O(|V|^{3})[4],空间复杂度为O(|V|^{2}),其中V是点集。原理动态规划适用范围Floyd-Warshall算法适用于解决带权有向图或带权无向图的全源最短路径问题,即计算任意两个顶点之间的最短路径长度。Floyd-Warshall算法的适用范围包......
  • spfa算法(求最短路和判断是否存在负环)floyd求最短路(11/1)
    #include<iostream>#include<cstring>#include<algorithm>#include<queue>usingnamespacestd;constintN=100010;intn,m;inth[N];intne[N];inte[N],w[N],idx=0;intdist[N];boolst[N];voidadd(inta,intb,intc){ne[idx]=......
  • Floyd算法
    Floyd算法 正如我们所知道的,Floyd算法用于求最短路径。Floyd算法可以说是Warshall算法的扩展,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3)。Floyd算法的基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B。所以,我......
  • CF350E Wrong Floyd
    什么一眼构造题首先要卡Floyd的关键就是存在某两个点\(x,y\),满足这两个点之间的所有最短路经过的点中(除\(x,y\)本身)至少有一个非关键点因此很容易想到如下构造法,先随便找一个关键点\(K\),然后把所有非关键点和\(K\)连边(当然如果所有点都是关键点就显然无解)接下来先随便连边保证......
  • 搜索与图论2.2-Floyd算法
    一、简述\(Floyd\)算法是一种可以快速求解图上所有顶点之间最短路径的算法。\(Bellman-Ford\)和\(Dijkstra\)算法求解的都是从一个起始点开始的最短路。如果想要求解图中所有顶点之间的最短路,就需要枚举每个点做为起点,这样十分低效。\(Floyd\)算法(也称\(Floyd-Warshall\)......
  • Floyd 警示后人
    遍历的中转点一定要在最外层遍历!!!不然就会错误的代码↓ for(inti=1;i<=n;++i){ for(intj=1;j<=n;++j){ if(i==j)continue; for(intk=1;k<=n;++k){ if(i==k||j==k)continue; if(mp[i][k]+mp[k][j]<mp[i][j]) mp[i][j]=mp[i][k]+mp[k][j]; } } }......
  • 弗洛伊德(Floyd's)算法—解决最短路径经典算法
    弗洛伊德算法(Floyd'salgorithm)是一种用于解决图中最短路径问题的经典算法。由美国计算机科学家罗伯特·弗洛伊德于1962年提出,该算法通过动态规划的思想,在图中寻找任意两个节点之间的最短路径,具有广泛的应用。本文将详细介绍弗洛伊德算法的原理、实现细节以及应用案例。四、复杂度......
  • 最短路之Floyd(医院设置)
    题意题目链接:https://www.luogu.com.cn/problem/P1364给一个二叉树,每个结点有一个值,这个值代表这个结点(即城市)有多少人,然后需要在这些结点中选出一个结点作为医院,问选哪个结点得到的距离和最小。距离和为人数乘以路径长度。思路用最短路,就是先求出每两个点之间的最短......