程序设计 = 数据结构 + 算法
数据结构
数据结构:逻辑结构(数据对象中数据元素之间相互关系)物理结构(数据的逻辑结构在计算机中的存储形式)
四大逻辑结构:集合结构、线性结构、树形结构、图形结构
物理结构:数据元素的存储结构形式(顺序存储结构和链式存储结构)
链式存储结构:1号元素存储的值是(1号)地址为2号的地址,通过地址找到2号。
算法
算法:解决特定问题求解步骤的描述;也就是你泡妞的技巧和方式(小甲鱼说的)。
一个问题可以由多种算法解决,但是一个算法也不可能解决所有问题(药不可能包治百病)。
算法五个基本特征:输入、输出、有穷性、确定性、可行性。
输入:算法具有零个和多个输入;
输出:至少有一个或多个输出;
有穷性:执行一定步骤后,自动结束而不会无限循环;
确定性:一定条件下,只有一条可执行路径,相同输入只能有唯一输出结果;
可行性:每一步必须可行,都能够通过执行有限次数完成;
算法设计要求:
正确性(先满足前三条就可以)。
1、算法程序没有语法错误;
2、对于合法输入能够产生满足要求的输出;
3、对于非法输入能够产生满足规格的说明;
4、对于故意刁难的测试输入都有满足要求的输出结果;
可读性(便于他人阅读、理解和交流)。
健壮性(输入数据不合法时,算法能做出相关处理,而不是异常和莫名其妙的结果)。
时间效率高和存储量低。
算法初体验:从1加到100的和?
#include <bits/stdc++.h>//万能头文件,博客里有转载如何添加
int main()
{
//没有算法的情况下,迭代100次
int i, sum = 0, n = 100;
for (i = 1; i <= n; i++)
{
sum = sum + i;
}
printf("无算法结果是%d\n", sum);
//用 搞死先生的算法,可以这样写,不需要迭代
int sum_gs = 0, n_gs = 100;
sum_gs = (1 + n_gs)*n_gs / 2;
printf("有算法结果是%d", sum_gs);
system("pause");
}
时间复杂度和空间复杂度
算法效率的度量方法:事后统计方法、事前分析估计方法。
事后统计方法:通过设计好的测试程序和数据,利用计算机计时器对不同算法程序运行时间进行比较。
事前分析估算方法:在计算机程序编写前,依据统计方法对算法进行估算。
程序运行消耗时间取决于下列因素:
1、算法采用的策略,方案;2、编译产生的代码质量;3、问题的输入规模;4、机器执行指令的速度。
时间复杂度
空间复杂度