当前位置:首页 > 天道酬勤 > 正文内容

都有什么算法(算法的定义)

张世龙2021年12月21日 17:57天道酬勤470

在谈论算法之前,让我先讲几个概念:

什么是算法

算法是解决特定问题时给出的步骤描述,在计算机中表现为指令的有限序列,每个指令代表一个或多个步骤

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。

讨论算法,应该考虑最好情况,最坏情况和平均情况,这是非常重要的。

下面给出时间复杂度对比图,比较直观:

在我们编写算法的过程中,是一个辩证的过程,像哲学中的否定之否定规律,不断的否定我们写过的算法,诞生的新算法更加的符合我们的预期。

算法用到了数学的一些知识,只是达到了应用的层面,后面的算法还会用到矩阵、极限、微积分等,大家不必惊慌,我会举例说明,大家不是考研,不需要研究很深入,但了解背后的数学知识很有必要。

下节会联合数据结构将算法,希望大家支持哦[谢谢][谢谢][谢谢]。

参考《大话数据结构》

扫描二维码推送至手机访问。

版权声明:本文由花开半夏のブログ发布,如需转载请注明出处。

本文链接:https://www.zhangshilong.cn/work/26478.html

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。