算法的计算复杂性
计算复杂度
计算复杂度由算法决定,一个数学问题通常可同时有多个解决算法,而计算复杂度可表述算法的复杂程度,在密码设计和密码分析中具有重要作用。计算复杂性理论不仅反映密码破译的固有困难性,评测密码算法对抗密码破译的实际能力,还能为不同密码算法实现难度的分析与比较提供了方法。
算法复杂度一般由执行算法所需要的计算时间T(时间复杂度)和计算空间S(空间复杂度)来度量,它们通常可以表示成输入规模$\lambda $的函数。在分析算法的复杂度时,通常用${\rm O},\tilde {\rm O},o,\Theta $四种方式表示它们之间的渐近程度。
算法的复杂度通常指时间复杂度,通常分为以下 3类:多项式时间算法复杂度,亚指数时间算法复杂度和指数时间算法复杂度,三个算法时间复杂度是递增的。若存在常数$a,{n_0}$,当$a > {n_0}$时,满足,则称算法的时间复杂度为$T(n) < af(\lambda )$。
多项式时间算法
假设$\lambda $是输入规模,k 为常数,如果执行此算法的时间复杂度为${\rm O}({\lambda ^k})$,则称该算法是一个多项式时间算法
计算复杂度理论中,多项式时间算法被认为是简单的算法。对于一个问题,如果存在多项式时间的解决算法,那么该问题不是一个计算困难问题。
指数时间算法
如果执行此算法的时间复杂度为${\rm O}({t^{f(\lambda )}})$,其中 t 为大于1的常数,此时,若 ${f(\lambda )}$是关于$\lambda $的一个多项式函数,则称该算法为指数时间算法。
若解决该问题的算法均是指数时间的算法,那么该问题是计算困难问题。
亚指数时间算法
若${f(\lambda )}$是一个大于常数小于$\lambda $的线性多项式的函数,则称该算法为亚指数时间算法。
介于多项式时间算法和指数时间算法之间的是亚指数时间算法,本文所涉及到的近似最大公因子问题和错误学习问题,目前还不存在相应的亚指数时间算法用于求解上述两类问题。
可忽略函数
可忽略函数是一个极小量,在计算复杂度理论和全同态加密的安全性定义中应用广泛。