在谈论算法之前,让我先讲几个概念:
什么是算法
算法是解决特定问题时给出的步骤描述,在计算机中表现为指令的有限序列,每个指令代表一个或多个步骤c语言的语法简单,强调数据结构,非常适合算法和数据结构的说明。 此外,笔者还将使用cygwin64安装gcc-g酷睿、gcc-g和make。 具体的安装方法请读者自行百度安装。
例如,如下所示,笔者使用C/C语言进行代码制作,
# #包括stdio.h
//*
累计到给定自然数n
* @param [int] n自然数n
* @return返回从1到n的自然数的和
*/
添加到编号(整数)
{
int和=0;
int i=0;
for(I=1; i=n; I ) )
{
求和=I;
}
返回和;
}
int main。
{
int n=100;
int和=0;
sum=添加到编号(n;
printf (1to % dis % d ),n,和);
返回0;
}以上简单的函数的功能是给出自然数n,返回1到n的和。 这就是算法,函数体中清楚地描述了步骤,计算机根据这些指令进行运算直到返回一个和。
编译执行:
$ gcc-oexamples /简单. c-oexamples /简单
执行结果
算法特性
输入和输出有1个输入或0个输入,但需要输出。 这个输出可以是简单的打印例如:
//*
* *简单的调试打印方法
*/
声音调试(字符*毫秒) )。
{
# # ifdef调试
打印机(% s % s )、文件、线、毫秒;
# # endif
{1}有穷性是指在采取有限的步骤后,会有一个结果。 这个有限的步骤可能需要毫秒或几天后,但不能无限循环。 例如,平时启动web服务,启动后接收客户端的调用。
确定的价值步骤必须是确定的,必须朝着正确的方向执行,编程都要朝着自己能控制的方向进行,不能控制程序的正确性,说明还需要练习。
可行性算法的所有步骤都必须是可行的。 算法最应该憎恨的是数据类型的转换。 一不小心,Java抛出空异常,c抛出Segment fault,尽管Python很少报告这个异常,但也会出现包含Attr和List的异常。
我们写算法的时候,必须先设计数据结构。 我必须明确我使用的是什么数据类型,进行什么样的转换,最后变成什么数据类型。 要想完全了解它,c是基本的语言,所以用c写代码和说明。
检验算法的标准
准确性是指输入规定的参数,输出准确、无歧义的数据。 对于输入的参数,可以测试以下内容:正常工作、无异常正确输入、正确输出、错误信息的特殊值(严格筛选的数据)输入、无异常输出可读性的算法要求具有很高的可读性。 我们在项目工程中需要更高的可读性,在日常代码维护中很重要,需要根据需要进行评论。 为了不让当时只有我和神能理解,过一会儿变成只有神能理解的状况(想安静) ) 652
//这个算法的意义是什么
c;
c 1; 鲁棒性必须考虑在编写代码之前可能发生的异常。 也就是说,在风险管理上,必须有风险列表。 对于遇到哪些风险触发应对的风险管理,未知的风险还需要通过测试进一步改善。 代码的鲁棒性正在逐步改善。
速度快的话记忆就低,这里表示时间复杂度大的o的表示法,用o(f(n ) )表示。 其中,f ) n )是循环变量n的函数,导出大小o的方法很简单:
将执行时间中的所有加法常数替换为常数1。 修改后的执行次数函数只保留最上面的项目。 如果存在最高项且不是1,则去除与该项相乘的常数。 举栗子:
一个算法的时间函数是f(n )=1/2 * n^3 n 10000
f(n )=1/2*n^3n1f(n )=1/2*n^31f ) n )=n ^ 3一个最终的算法在时间上的复杂度是o(n^3)。 1这个常量级的复杂度与n^3相比,健壮的绿茶很少,所以可以省略。
平方步长
英特尔,j;
for(I=0; i n; I ) )
{
for(j=0; j-n; j )日本
{
.
}
)时间会回来
杂度为O(n^2),一般的幂次方函数的表现形式为嵌套多层循环,每次循环都是从1到n。对数阶
int i = 1; while(i < n) { i = i * 2; }每次循环i 都乘以2,直到x次,到达n,2^x = n,求x就成为log2n,以2为低n的对数。
指数阶
/** * 斐波那契数列第n项 * @param [int] n 第n项 * @return 返回第n的数 */ int fab(int n) { if (n == 0 || n == 1) { return n } return fab(n-1, n-2) }每一项都是由它的后两项确定的,直到递推到n=1或者n=0的时候,才会返回,一分为2,2再分为4,...,也就是2^n。
讨论算法,应该考虑最好情况,最坏情况和平均情况,这是非常重要的。
下面给出时间复杂度对比图,比较直观:
在我们编写算法的过程中,是一个辩证的过程,像哲学中的否定之否定规律,不断的否定我们写过的算法,诞生的新算法更加的符合我们的预期。
算法用到了数学的一些知识,只是达到了应用的层面,后面的算法还会用到矩阵、极限、微积分等,大家不必惊慌,我会举例说明,大家不是考研,不需要研究很深入,但了解背后的数学知识很有必要。
下节会联合数据结构将算法,希望大家支持哦[谢谢][谢谢][谢谢]。
参考《大话数据结构》