1. 首页
  2. IT资讯

经典的C语言/C++算法基本概念

经典的C语言/C++算法基本概念

经典的C语言/C++算法基本概念
1. 算法是什么
算法:顾名思义,一种计算的方法,在程序设计上,就表现为一组指令序列。
为了使得算法有意义,还规定算法必须是有限的和确定的,也就是说算法的执行时间有限、执行的过程是确定的。
比如我们写了代码
int a = 10; //a,b为输入数据
int b = 20;
int c = a+b; //c为输出数据,算法为加法运算

经典的C语言/C++算法基本概念

C语言是面向过程的,而C++是面向对象的
C和C++的区别:
C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。
C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。
C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

经典的C语言/C++算法基本概念

这其实就是一个算法的具体实现(程序就是算法的具体实现,但不是所有程序都能认为是算法的实现,比如while(1) 死循环程序,因为不满足算法的有限性)。
总结:
算法具有4个性质:输入、输出、确定性、有限性
算法是方法,程序是方法的具体实现
当一个算法对每组输入数据,都能得到正确的输出数据,则称算法是正确的,否则称之为错误的。
2. 如何评价算法
为了实现同样一个需求,可以设计出各种不同的算法。
典型的,对一组数据排序,可以有直接插入法、冒泡排序法、堆排序等等;
简单的,实现从1累加到100,可以计算1+2+…+100,也可以计算50*(1+100);
3. 如何评价一个算法的优劣?
对于程序设计而言,无非就是两个方面:
算法有多快?(时间效率);
内存耗得多不多?(空间效率)
我们称之为算法的复杂度分析,包括上述两个方面,各自称为时间复杂度分析和空间复杂度分析。通常我们更关注的是算法的时间复杂度。
4. 时间复杂度分析
设问题规模为n,即输入数据的大小,时间复杂度记为T(n)
比如n个输入数据,需要做2n个基本运算,那么T(n) = 2n
下面的程序中,对一个n数据遍历了两次,其T(n) = 2*n
#include
#define n 5
int main()
{
int i;
int data[n] = ;
for(i=0;i
{
data[i] += 1;
}
for(i=0;i
{
printf("%d",data[i]);
}
return 0;
}

经典的C语言/C++算法基本概念

再如嵌套两次循环,每次循环都是1至n,则其T(n) = n2
这里提的基本运算,可以是一条语句,也可以是一组语句,更具实际情况而定。
渐进时间复杂度
通常,我们分析算法的复杂度不需要考虑的这么具体,精确到2n,3n2+1等等,只需要考虑它的数量级就可以了,这就是渐进时间复杂度O(n),也即是nà∞时,T(n) -> O(n)
备注:准确的说,O(n) 是渐进上界,相对的也就有渐进下界。但在实际分析时,通常直接说某某算法的时间复杂度为O(n)
O(n) 其实就是T(n)省略了低阶项和常数项
比如:
T(n) = 2*n 则O(n)=n, 实际中就称算法时间复杂度为n
T(n)= 3*n2 则O(n)=n2, 实际中就称算法时间复杂度为n2
T(n) =3* log(n)则O(n)=log(n), 实际中就称算法时间复杂度为log(n)
空间复杂度分析
分析算法运行过程中所占用存储空间大小,其分析和时间复杂度类似。
如果使用1个基本空间单位,则空间复杂度为O(1)
如果使用n个基本空间单位,则空间复杂度为O(n)
这里说的空间复杂度实际中也是渐进空间复杂度。
以上就是结合实际使用,给出的算法的基本概念。一般来说,知道这些就够了。
如果有兴趣了解更多,可以自己查找更专业的资料来补充。

如果你想要学好C++最好加入一个组织,这样大家学习的话就比较方便,还能够共同交流和分享资料,给你推荐一个学习的组织:大牛小白C++组织 可以点击编程二字,可以直达

经典的C语言/C++算法基本概念

这些是C/C++能做的
服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等

原文始发于:经典的C语言/C++算法基本概念

主题测试文章,只做测试使用。发布者:~那﹑男人是我的命﹪,转转请注明出处:http://www.cxybcw.com/20423.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code