软件分析——数据流分析2

本文深入探讨了数据流分析的理论基础,包括迭代算法、偏序关系及其在数据流分析中的应用。文章阐述了迭代算法的理论、偏序集合的性质,以及上界和下界的概念,同时介绍了如何通过格子理论构建数据流分析框架。此外,还讨论了单调性、不动点理论和它们在确保算法终止和找到最优解中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据流分析的理论部分(foundation)

这一部分李越老师用了两课时(第五课
第六课
),讲的很仔细,将一些比较抽象的概念也解释的很清楚,收获很多,顺便做了笔记和一点从自己角度的理解,将比窘上传,方便之后需要时再看,也欢迎大家阅读以及批评指正。

1. 迭代算法(iterative algorithm)

主要由上节课的三个算法引出迭代算法,从另一个角度来分析算法,从而更深刻的理解该算法

常见的迭代算法会产生一个数据流分析的解(eg:可达定义的最后一次迭代的结果,就是数据流分析的一个解)

  1. 从另一个角度去看迭代算法

    • 理论方面

      理论1:给定一个CFG有k个点(个人理解为有k个程序点,或者就是BB),迭代算法会在每次迭代的时候,更新每个程序点的OUT[n]

      理论2:设数据流分析中解的值域为V,那么可以定义一个k-元组 ( O U T [ n 1 ] , O U T [ n 2 ] , . . . O U T [ n k ] ) (OUT[n_1],OUT[n_2],...OUT[n_k]) (OUT[n1],OUT[n2],...OUT[nk])

      它们是集合 ( V 1 × V 2 × . . . × V k ) (V_1 \times V_2 \times... \times V_k) (V1×V2×...×Vk)中的一个元素(该集合其实就是幂集),可以写为 V k V^k Vk,代表每次迭代后,整体的值

      理论3:每一次迭代都可以看成一个 V k V^k Vk映射到一个新的 V k V^k Vk,通过转换函数和控制流来实现映射,可以将其抽象为一个函数: F : V k → V k F:V^k \to V^k F:VkVk

      理论4:算法不断迭代,直到相邻两次迭代的k-元组的值一样,算法就结束了

    • 举例
      C:\Users\surface\AppData\Roaming\Typora\typora-user-images\image-20200424123657490.png
      这边可以引出:不动点的概念 x i = f ( x i ) x_i = f(x_i) xi=f(xi),就是不动点

  2. 根据上面的角度,我们提出问题:

    • 算法是否能保证一定停止或者就是抵达一个不动点(到不动点,根据算法限制的条件,就是停止的了),或者算法总是能得出一个解?
    • 如果算法可终止,是否只有一个解/一个不动点?如果有多个的话,我们的解是最优的吗?
    • 什么时候算法能到达一个不动点,或者什么时候我们能得到一个解?

2. 偏序(partial order)

是数学概念

定义:给定一个偏序集poset,是一组 ( P , ⊑ ) (P,\sqsubseteq) (P,),其中 ⊑ \sqsubseteq 是一个定义在P上的二元关系,它必须要满足如下性质才能算是偏序关系:

  • ∀ x ∈ P , x ⊑ x \forall x \in P,x \sqsubseteq x xP,xx:满足自反性,自己和自己是满足偏序关系的
  • ∀ x , y ∈ P , x ⊑ y ∧ y ⊑ x ⇒ x = y \forall x,y \in P, x\sqsubseteq y\land y\sqsubseteq x \Rightarrow x = y x,yP,xyyxx=y:对称性,x是y的偏序,y是x的偏序,则x = y
  • ∀ x , y ∈ P , x ⊑ y ∧ y ⊑ z ⇒ x ⊑ z \forall x,y\in P,x\sqsubseteq y \land y\sqsubseteq z\Rightarrow x\sqsubseteq z x,yP,xyyzxz:传递性

举例:举例
三个条件依次判断:

(1)自反: 1 ≤ 1 , 2 ≤ 2 1\le 1,2\le 2 11,22,满足

(2)反对称: x ≤ y , y ≤ x x \le y,y \le x xy,yx,在整数中,很显然满足

(3)传递: 1 ≤ 2 , 2 ≤ 3 ⇒ 1 ≤ 3 1 \le 2,2\le 3 \Rightarrow 1\le 3 12,2313,满足

所以该关系满足偏序

如果条件改为 ⊑ 代 表 < \sqsubseteq 代表 < <,那么显然不满足

举例2:
举例3
三个条件依次判断

(1)自反:自己就是自己的子集,满足

(2)反对称:满足

(3)传递:in - sing,sing-singing => in - singing

该关系满足偏序

可以发现一个结论:偏序意味着集合中的两个元素可以不相互比较,即集合中不是任意两个元素都必须满足偏序关系的

举例3:也是满足偏序的
举例4

3. 上界和下界(upper and lower bounds)

给定一个偏序集 ( P , ⊑ ) (P,\sqsubseteq) (P,),并且子集S满足 S ⊆ P S \subseteq P SP

上界:如果 ∀ x ∈ S , x ⊑ u , 其 中 u ∈ P \forall x \in S, x\sqsubseteq u, 其中u\in P xS,xu,uP,那么u就是子集P的上界(就是子集S中的所有元素均满足 x ⊑ u x \sqsubseteq u xu

下界:如果 ∀ x ∈ S , l ⊑ x , 其 中 l ∈ P \forall x \in S, l\sqsubseteq x, 其中l\in P xS,lx,lP,那么l就是子集P的下界(就是子集S中的所有元素均满足 l ⊑ x l\sqsubseteq x lx

举例:对于如下的子集S,{a, b, c}就是S的上界;{ }就是S的下界
图例
最小上界:least upper bound(lub 或者称为join),用 ⊔ S \sqcup S S表示

定义为:对于子集S的任何一个上界u,均有 ⊔ S ⊑ u \sqcup S \sqsubseteq u Su

最大下界:greatest lower bound(glb 或者称为meet),用 ⊓ S \sqcap S S

定义为:对于子集S的任何一个下界l,均有 l ⊑ ⊓ S l \sqsubseteq \sqcap S lS

举例:
举例
通常:如果S只包含两个元素a、b(S = {a, b})那么上界可以表示为 a ⊔ b a

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值