1、代码规范 代码缩进:左端对齐。 变量命名:首先变量命名要符合语法,在命名符合语法规范后可以采用驼峰命名法。即第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母。例如:myFirstName,myLastName之类的。 适当的注释:尤其是自己实现的功能一定要写好注释,方便别人调用。 2、算法与程序 2.1算法的4个特征:有穷性、确定性、输入、输出。 2.2程序是算法用某种程序设计语言的具体实现,可以不满足算法的有穷性。 3.算法的复杂性 算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。一个算法的复杂性的高低体现在该算法所需要的时间资源和空间资源的多少上。 3.1空间复杂度:程序的空间复杂度指该程序运行时所需的内存空间的大小,包括指令空间、数据空间和函数调用。 3.2时间复杂度:算法的时间复杂度取决于求解问题的规模、具体的输入数据以及算法本身的设计。为了简化复杂度的分析,当问题规模n很大时,关注时间复杂度增长的阶,忽略时间复杂度中的低阶项和最高项的系数。 上界(O):设函数f(n)和g(n)是定义在非负整数集合上的正函数,如果存在两个正常数c和n0,使得当n≥n0时,有f(n)≤cg(n),则记做f(n) = O(g(n)),称为大O记号(big Oh notation) 称g(n)是f(n)的一个上界 。注:f(n)的阶不高于g(n)。 下界(Ω):设有函数f(n)和g(n)是定义在非负整数集合上的正函数,如果存在两个正常数 c和n0,使得当n≥n0时,有f(n)≥c g(n),则记做f(n) = Ω (g(n)),称为Ω记号(omega notation)。 注: f(n)的阶不低于g(n)。 渐进紧确界(θ):设有函数f(n)和g(n)是定义在非负整数集合上的正函数,如果存在正常数c1,c2和n0,使得当n≥n0时,有c1 g(n)≤f(n)≤c2 g(n),则记做f(n) = θ(g(n)),称为θ记号(Theta notation)。 注:此时f(n)和g(n)同阶。 3.3算法复杂度分类: 多项式复杂度:O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) 指数复杂度:O(2n) < O(n!) < O(nn)
4.NP完全性理论
4.1P类问题:存在多项式时间算法的问题。
4.2NP问题:能在多项式时间内验证得出一个正确解的问题。
4.3NPC类问题:存在这样一个NP问题,所有的NP问题都可以约化成它。
4.4NP-Hard问题:NP-Hard问题是这样一种问题,它满足NPC问题定义的第二条但不一定要满足第一条(就是说,NP-Hard问题要比 NPC问题的范围广,NP-Hard问题没有限定属于NP),即所有的NP问题都能约化到它,但是它不一定是一个NP问题。
标签:复杂度,Hard,第一章,问题,n0,算法,NP,设计 From: https://www.cnblogs.com/Kimchow/p/16983871.html