标签:外部 特殊 错误 执行时间 不能 假设 图片 估算 写代码
1.开场白
算法是解决特定问题求解步骤的描述, 在计算机中表现为指令的有限序列, 并且 每条指令表示一个或多个操作。也就是数据结构与算法分析的过程。
现在我要求你写一个求 1+2+3+……+100 结果的程序,大部分人这么写:
这相当于另外一种求等差数列的算法,等差数列是指从第二项起,每一项与它的前一项的差等于同一个常数的一种数列,常用A、P表示。这个常数叫做等差数列的公差,公差常用字母d表示;例如:1,3,5,7,9……2n-1。通项公式为:an=a1+(n-1)*d。首项a1=1,公差d=2。
2.算法定义
什么是算法呢?算法是描述解决问题的方法。算法 (Algo付出m) 这个单词最早出 现在被斯数学家阿勒·花刺子密在公元 825 年(相当于我们中国的唐朝时期)所写的 《印度数字算术》中。 如今普遍认可的对算洁的定义是:
算法是解决特定问噩求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
2.1 算法特性
算法具有五个基本特性: 输入、输出、 有穷性、确定性和可行性。
2.2.算法设计的要求
算法不是唯一的。也就是说,同一个问题,可以有多种解决问 题的算法,但相对好的算法还是存在的,所以有几大要求要满足 正确性,可读性,健壮性和时间效率高、存储量低。
2.3.算法效率的度量方法
1)算法采用的策略、 方法。
2)编译产生的代码质量。
3)问题的输入规模。
4)机器执行指令的速度。
我们在分析一个算法的运行时间时,重要的是把基本操作的敬量与输入规模关联起来, f!P基本操作的数量必须表示成输入规模的函数:是 f (n) =n的次方(执行次数)
3.算法评估
3.1.时间复杂度计算 T ( n ) = O(f(n))
在进行算法分析时,语句总的执行次撞 T ( n )是关于问题规模 n 的函数,进而分析 T ( n )随 n 的变化情况并确定T(n)的数量,因此算法的时间复杂度=算法的时间量度,记作: T ( n ) = O(f(n))。 它表示随问题规模 n 的增大,算法执行时间的增长率和 f(n)的增长率相同,都作算法的渐近时间复杂度,简称为时间复杂度。 其中 f ( n) 是问题规模 n 的某个函数。这样用大写 O()来体现算法时间复杂度的记法,我们称之为大 0 记法。 一般情况下,随着 n 的增大, T(n)增长最慢的算法为最优算法。大写 O()来体现算法时间复杂度的记法,我们称之为大 0 记法。 一般情况下,随着 n 的增大, T(n)增长最慢的算法为最优算法。
我们现在来判断一下,两个算法 A 和 B 哪个更好。 假设两个算法的输入规模都是 n,算法 A 要做 2n + 3 次操作,你可以理解为先有一个 n 次的循环,执行完成后,再有一于n 次循环,最后三次赋值或运算,共 2n + 3 次操作。 算法 B 要做 3n + 1 次 操作。 你觉得它们谁更快呢?
函数的渐近增长:给定两个画鼓 f (川和 g( n ), 如果存在-个整鼓 N, 使得对于所有的 n > N, f ( n )总是比 g( n )大,那么, 我们说 f ( n ,) 的增长渐近快子 g ( n )。某个算法,随着 n 的增大,宫会越来越优于另一算法,或 者越来越羞于另一算法。
常见时间复杂度表(复杂度按升序排列)
0(1) < O(logn) < O(n) < O(nlogn) < 0(n2 ) < 0(n3 ) < 0(2") < O(n!) < O(n")
3.2.算法空间复杂度 S(o)= O(f(o))
算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公 式记作: S(o)= O(f(o)),其中, 0 为问题的规模, f(n)为语句关于 n 所占存储空间的函数。
3.3.最坏情况与平均情况
最坏情况运行时间是一种保证,那就是运行时间将不会再坏了。 在应用中,这是一种最重要的需求, 通常,除非特别指定, 我们提到的运行时间都是最坏情况的运行时间。平均运行时闯是所有情况中最有意义的,因为它是期望的运行时间
平均运行时间也就是从概率的角度看 , 这个数字在每一个位置的可能性是相同 的,所以平均的查找时间为 n/2 次后发现这个目标元素。
4.总结
算法的定义:算法是解决特定问题求解步骤的描述,在计算机中为指令的有限序 列,并且每条指令表示一个或多个操作。
对算法的分析:
推导大 0 阶:
? 用常数 1 取代运行时间中的所有加法常数。
? 在修改后的运行次数函数中,只保留最高阶项。
? 如果最高阶项存在且不是 1 ,则去除与这个项相乘的常数。
得到的结果就是大 0 阶。通过这个步骤,我们可以在得到算法的运行次数表达式后,很快得到宫的时间复 杂度,即大 0 阶。同时我也提醒了大家,其实推导大 0 阶很容易,但如何得到运行次 数的表达式却是需要数学功底的。
标签:外部 特殊 错误 执行时间 不能 假设 图片 估算 写代码
原文地址:https://www.cnblogs.com/rango0550/p/12059504.html