数据结构系列博客涉及内容:
一、初识数据结构和算法:
1.数据结构:
线性结构作为最常用的数据结构,其特点数据元素之间满足唯一的线性关系,每个数据元素(除第一个和最后一个外)只有一个直接前趋和一个直接后继;
线性结构拥有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是
连续的,链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息;
线性结构中存在两种操作受限的使用场景,即队列和栈。栈的操作只能在线性表的一端进行,就是我们常说的先进后出(FILO),
队列的插入操作在线性表的一端进行而其他操作在线性表的另一端进行,先进先出(FIFO),由于线性结构存在两种存储结构,
因此队列和栈各存在两个实现方式;
一维数组、链表、队列、栈
1.2 非线性结构:
二维数组、多维数组、广义表、树、图
1.3 度量算法的执行时间:
度量一个算法执行时间有两种方法:
统计某个算法的时间复杂度
来度量方法的优越
时间复杂度统计法属于事前估算法
1.4 时间频度T(n)(代码执行行数):
一个算法中的语句执行次数称为语句频度或时间频度
,记为T(n),n称为问题的规模。
1.5 时间复杂度O(f(n)) :
某个函数f(n),使得当n趋近与无穷大时,T(n)/f(n)的极限值为不等于0的常数,这称f(n)是T(n)的同数量级函数
(废话)。记作T(n)= O(f(n))
称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度
1.6 最坏时间复杂度:
最坏的情况
1.7 平均时间复杂度:
指所有可能的输入实例均以等概率情况下,该算法的运行时间。
1.8 空间复杂度(不太重要):
算法消耗的存储空间的大小,从用户的体验上,更加注重程序执行速度,一些缓存产品(redis,memcache)和算法(计数排序)本质上就是用空间换时间。
1.9 时间复杂度的计算:
举例:
忽略常量
忽略低次项
忽略最高阶项的系数
线性对数阶O(nlogn):
将对数阶O(logn)循环N遍的话,那么它的时间复杂度就是n*O(logn),也就是O(nlogn);如下:
数据结构与算法更多相关内容【持续更新中】: