什么是数据结构
数据结构是计算机存储和组织数据的方法,大致分为以下几种
线性结构
数组、链表、堆栈、队列、哈希表
树结构
AVL树、红黑色树、b树、堆、三、哈夫曼树、以及核对集
图形结构
邻接矩阵,邻接表
什么是算法
基本概念
算法是解决特定问题的一系列执行步骤。 要解决同一问题,可能有多种算法。 必须选择最容易阅读、执行效率最高的代码。
下面的代码示例都是算法。
计算两个数之和:
公共int plus (inta,int b ) {
返回a b;
}
复制代码并计算1到n之间的和:
公共防毒(Intn ) {
int sum=0;
for(intI=0; i=n; I ) {
sum =i;
}
返回和;
}
复制代码
不同算法的优劣
典型斐波那契数列问题:
01123581321 .第一个数第二个数=第三个数
第n个个数是多少?
复制代码
有递归和循环两种思路。
想法1 :递归
staticpublicintfib1(intn ) {
if(n=1) { return n; }
返回fib1(n-1 ) fib1) n-2;
}
复制代码
想法2 :循环
staticpublicintfib2(intn ) {
if(n=1) { return n; }
int first=0;
int second=1;
int temp=0;
for(intI=0; i n - 1; I ) {
temp=第一个第二个;
first=second;
第二阶段=时间;
}
返回时间;
}
复制代码
增大参数n的值,可以明显地感觉到循环比递归快得多。
2 .如何评价算法的好坏
事后统计法:比较两种算法的执行时间。
一般来说,从以下维度来评价算法的优劣。
正确程度
容易阅读
顽强性
时间复杂度:估计程序指令的执行次数、执行时间
空间复杂性:估计运行程序所需的空间
大o符号
复杂度一般用大o表示,表示与数据规模n相对应的复杂度。 大o表示法只是一个粗略的分析模型,估算可以在短时间内知道一个算法的执行效率。
忽略常数、系数、低阶
o () (1) ) )。
2n3o(n ) )。
n2n6o(n ) ) )。
4n33n222n100o(n^3) () ) ) ) ) ) 0
log2n、log9n统称为logn (忽略底数)。
按照复杂度从小到大的顺序,o(1) o ) logn ) n (o ) o (n ^3) o (2^ n ) o ) n! (o(n^n ) )。
回顾前面的斐波那契数列,分析一下两种算法的时间复杂性。
因此,如果传递的参数n非常大,则两种算法所示的差异也非常大。 由此可见高效算法的重要性。