最近开始回归理论知识,好好复习之前学的内容,总结成文章,之后不定期的复习。加油啦!
##1。数据结构的基础知识:
###数据结构的基本概念:
研究数据元素之间的关系(数组/链表/树/图)。
数据:程序的操作对象,用于描述客观事物。
数据元素:组成数据的基本单位。
数据对象:性质相同的数据元素的集合。
举例:int a ,int b..... a b表示数据 ;int array[10],数据对象; array[0] array[1] ...是数据元素(一个一个节点),
###数据结构的逻辑关系:
四种关系:
集合:数据元素之间没有关系
线性结构:数据元素之间是一对一的关系 如链表,队列
树形结构:数据元素是一对多的关系 如树
图状结构:数据元素之间是多对多的关系 如图
###数据的物理结构:
物理结构也称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像),依赖与计算机。
存储结构可分为四大类:顺序,链表, 索引,散列(md5,sha1,sha256,sha512,SM系列),
###数据的运算:
插入,删除,修改,查找,排序。
##2.算法:
###算法的概念:
算法重要的是思想,算法是问题求解的步骤。
###算法与数据结构区别:
数据结构只是静态的描述了数据元素的关系。程序 = 算法 + 数据结构
###算法的特性:
输入,输出,有穷性,确定性,可行性。
###算法效率的度量:
事前分析结算,依据统计的方法对算法效率进行估算。
影响算法效率的主要因素:
算法采用的策略和方法,问题的输入规模,编译器所产生的代码,计算机的执行速度。
根据程序执行步骤的多少,判断算法的复杂度。-------> 大O表示法
最坏的情况下的时间复杂度和空间复杂度。
####时间复杂度
作用:时间复杂度是度量算法执行时间的长短;(时间复杂度简单的理解就是执行语句的条数。如果有循环和递归,则忽略简单语句,直接算循环和递归的语句执行次数)
时间复杂度用大O渐进表示法表示
时间复杂度的计算:
1,找出执行语句的条数。 如果有循环和递归,则忽略简单语句,直接算循环和递归的语句执行次数;如果算法中有包含嵌套的循环,则执行次数通常是将两个循环次数相乘 ,如果算法中包含并列的循环,则将并且的相加;
2, 将语句执行次数的数量级放入大Ο记号中;
用常数1取代运行时间中的加法常数;
在修改后的运行次数函数中,只保留最高阶项;
如果最高项系数存在且不是1,则去除与这个项相乘的常数;
####空间复杂度
作用:空间复杂度是度量算法所需存储空间的大小(算法的空间复杂度并不是计算实际占用的空间,而是计算整个算法的辅助空间单元的个数)记做S(n)=O(f(n))。
简单理解就是算法执行时创建的变量(包括临时变量)个数
①忽略常数,用O(1)表示
②递归算法的空间复杂度=递归深度N*每次递归所要的辅助空间
③对于单线程来说,递归有运行时堆栈,求的是递归最深的那一次压栈所耗费的空间的个数,因为递归最深的那一次所耗费的空间足以容纳它所有递归过程。递归是要返回上一层的,所以它所需要的空间不是一直累加起来的 .