赞
踩
数据结构:是计算机存储和组织数据的方式。
比如打开一个网页,我们看到的文字就是数据,这些数据需要用一个结构来把他管理起来,我们称之为:数据结构
就是定义一系列的计算步骤,用来将输入的数据转换成输出结果。
算法编写成可执行程序后,运行时会产生时间与空间的消耗,衡量一个算法的好坏就是从时间和空间两个维度来衡量的。
如何衡量一个算法的好坏:
时间复杂度
(衡量程序的效率)
定义:在计算机科学中,时间复杂度是一个函数式T(N)。
时间复杂度不能给出一个确切的时间,因为时间复杂度受到:
这是在vs release下运行得出的时间。(clock函数包含在time.h头文件下)
来个例子,理解一下:
计算Func2的时间复杂度,
再来一个例子巩固一下:
时间复杂度存在最好的情况、最坏的情况和平均情况,大o渐进表示法在实际中一半情况关注的是时间复杂度最坏的情况。
计算下列这段代码的时间复杂度
void func5(int n)
{
int cnt = 1;
while (cnt < n)
{
cnt *= 2;
}
}
(取的都是最坏的情况)
指对互化那一步,需要注意一下,当n接近无穷大的时候,底数的大小对结果影响不大,因此,一般情况不管底数是多少,都可以省略不写。
空间复杂度 (Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度
所以,空间复杂度算的是变量的个数
空间复杂度计算规则基本跟时间复杂度类似,也使用大o渐进表示法。
注意:函数运⾏时所需要的栈空间(存储参数、局部变量、⼀些寄存器信息等)在编译期间已经确定好
了,因此,空间复杂度主要通过函数在运行时显示申请的额外空间来决定。
计算下列代码的空间复杂度:
void BubbleSort(int* a, int n) { assert(a); for (size_t end = n; end > 0; --end) { int exchange = 0; for (size_t i = 1; i < end; ++i) { if (a[i-1] > a[i]) { Swap(&a[i-1], &a[i]); exchange = 1; } } if (exchange == 0) break; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。