1.什么是数据结构
数据结构(Data Structure)是计算机存储和组织数据的方式,是指相互之间存在的一种或多种特定关系的数据元的集合。
2.什么是算法
算法(Algorithm)就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为 输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。
3.数据结构和算法的书籍资料
学习完数据结构知识,可以去看《剑指offer》和《程序员代码面试指南》。
4.算法的效率
衡量一个算法的好坏,要从它的程序的时间复杂度和空间复杂度两方面来分析。时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。
5.时间复杂度
算法的时间复杂度是一个函数,算法中的基本操作的执行次数,为算法的时间复杂度。找到某条基本语句与问题规模N之间的数学表达式,就是算出了该算法的时间复杂度。
void
Func1
(
int
N
)
{
int
count
=
0
;
for
(
int
i
=
0
;
i
<
N
;
++
i
)
{
for
(
int
j
=
0
;
j
<
N
;
++
j
)
{
++
count
;
}
}
for
(
int
k
=
0
;
k
<
2
*
N
;
++
k
)
{
++
count
;
}
int
M
=
10
;
while
(
M
--
)
{
++
count
;
}
printf
(
"%d\n"
,
count
);
}
Func1
执行的基本操作次数 : F(N)=N`2+2*N+10
大
O
符号(
Big O notation
):是用于描述函数渐进行为的数学符号。
推导大
O
阶方法:
1
、用常数
1
取代运行时间中的所有加法常数。
2
、在修改后的运行次数函数中,只保留最高阶项。
3
、如果最高阶项存在且不是
1
,则去除与这个项目相乘的常数。得到的结果就是大
O
阶。
通过上面我们会发现大
O
的渐进表示法
去掉了那些对结果影响不大的项
,简洁明了的表示出了执行次数。O(N~2)
在实际中一般情况关注的是算法的最坏运行情况。
6.空间复杂度
空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度 。
空间复杂度算的是变量的个数,也使用大O渐进表示法。
函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因 此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。