重学数据结构笔记

大学上数据结构课都逃了,后来发现其重要,期间又自己抱起书学了一遍,因为当时懒,自学的成果也不大,如今工作有一年了,也写过几个项目越来越感觉数据结构对个人思想的重要,如今趁裸辞的空窗期,好好恶补下,顺便写个笔记总结下。仅为个人笔记用所以不排版写到哪算哪。

1,数据结构,是相互之间存在一种或多种关系的数据元素的集合
从不同角度讨论,有不同的分类
物理结构:顺序存储结构,链式存储结构
逻辑结构:线性结构,集合结构,树形结构,图形结构
2.数据类型,是指一组性质相同的值得类型的集合以及在此集合上的一些操作
抽象数据类型:是只一个数学模型及定义在该模型上的一组操作(像java的类?)

3.算法,是解决特定问题求解步骤的描述,在计算机中表先为指令的有限序列。并且每条指令表示一个或多个操作
五个特性:输入输出、有穷性、确定性、可行性
好的算法设计应该具有,正确定,可读性,健壮性(例:当输入不合法时,不报莫名奇妙的错误),高效率,低存储量(用最短的是时间办最大的事)
算法效率统计方法:
事后统计法(笨法,外部因素太多,舍弃)
事前分析估算方法:例如:分析执行次数、执行时间

A算法:2n+3 ;B算法:3n+1 哪个快?答:不一定 n的值不同 情况不同
由上引出 函数的渐近增长:给定两个函数F(n)和G(n),如果存在一个整数N,使得对于所有的n>N,F(n)总是比G(n)大,那么我们说F(n)的增长渐近快于G
+1 +3并不影响算法最终变化,忽略常数,最高次项的常数也同理并不重要
最高次项指数大的增长的越快,判断一个算法的效率时,其他项可以忽略,只要关心最高阶项的阶数
基本可以分析出:某个算法随着n越来越大,可能会越来越优于另一算法,这其实就是通过时间复杂度估算算法时间效率
时间复杂度:T(n) = O(f(n)) 随着n的增大T(n)增长越慢的算法为最优算法
简单推到时间复杂度方法:1.用常数1取代所有加法常数。2,在1的基础上保留最高阶数。3,除去最高阶数的乘数 例:常数阶O(1)(只能是1不能是其他数字) 线性阶O(N) 平方阶O(N2) 对数阶 立方阶,指数阶还有其他....
常用的时间复杂度所耗费的时间顺序:O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
最坏时间复杂度(默认),平均时间复杂度
空间复杂度:S(n) = O(f(n)) f(n)为语句关于n所占存储空间的函数

3.线性表,零个或多个元素的有限序列

时间: 2024-10-06 22:41:11

重学数据结构笔记的相关文章

重学数据结构笔记(2)

4.栈和队列栈(stack),是仅限定在表尾进行插入和删除操作的线性表 (一种特殊的线性表,有前驱后继关系)我们把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何元素的称为空栈,栈又称为先进后出的线性表简称LIFO结构先进后出,后进先出,最先进栈的元素不一定最后出,因为栈对元素的删除和增加位置有了限制,可时间没限制例子:1,2,3依次放入栈中,可能是 1进 1出 2进 2出 3进,3出 所以进栈顺序是123出栈顺序也是123,其他情况相似.但是一定不会有312出栈顺序(自己想为什么,很重要

重学数据结构笔记(3)

5.串,由零个或多个字符组成的序列,又叫字符串串的比较是通过组成字符串的字符之间的编码来进行的,而字符串编码指的是字符在对应字符集中的符号.串的存储结构与线性表相同分两种串的顺序存储结构串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列的.按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区域,一般使用定长数组来定义串的顺序存储方式其实是有问题的,因为串的插入和替换都会引起长度超过数组长度.串的链式存储结构,与线性表链式存储结构相似,不过每个节点存一个字符,太浪费空间,可以一

重学数据结构系列之——平衡树之SB Tree(Size Blanced Tree)

平衡树 1.定义 对于每个结点,左右两个子树的高度差的绝对值不超过1,或者叫深度差不超过1 为什么会出现这样一种树呢? 假如我们按照1-n的顺序插入到二叉排序树中,那么二叉排序树就退化成了一个有序链表,效率大大降低. 2.有关概念 所有平衡树基本由以下三个特征组成: 1.自平衡条件 2.旋转操作 3.旋转的触发 平衡树通过设置合理的自平衡条件,使得二叉排序树的查找.插入等操作的性能不至于退化到 O(n)O(n),并且在进行二叉排序树的查找.插入等操作时进行判断,如果满足其中某个旋转的触发条件,则

重学数据结构 --- 分类+稀疏数组

一.数据结构的分类 1. 数据结构两大类 线性结构和非线性结构 1) 线性结构 线性结构是最常见的数据结构,特点是元素间存在一对一的线性关系. 线性结构又分两种,一种是顺序存储(称为顺序表),另外一种是链式存储(称为链表).顺序表中的存储元素的连续的.链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息. 常见的线性结构有:数组.队列.链表和栈(这里只是讲个大概,具体内容后面的文章会展开阐述). 2) 非线性结构 非线性结构就是结点元素可能存在多个直接前趋和多个直接后续(

C#&amp;java重学笔记(函数)

C#部分  1.写在函数定义的()中的关键字: a.params关键字:用来满足函数的参数为数组时,而数组的长度不固定的情况.且该关键字只能用来修饰数组型参数.这样一修饰,就达成了类似JavaScript函数书写参数的特点. b.ref关键字:让参数按引用传递,类似于C中的传指针参数.比如经典的数值交换函数,你传形参和传指针的结果应该知道,加了ref关键字就相当于传指针.注意:ref只接收变量做参数,你字面量怎么弄指针?而且该变量必须初始化!     c.out关键字:功能和ref一样,区别在于

C#&amp;java重学笔记(面向对象)

C#部分 1.C#有一个internal关键字,指字段可以同一个程序集中访问,出了程序集不行.还有一个protected internal(没有先后之分)修饰词,指只能在同一个程序集中的子类访问 2.abstract和virtual修饰词: abstract用来修饰类和方法,表 抽象.抽象类中的方法可以不抽象,但是抽象方法所在的类必抽象.且抽象方法不得被实现,即不能用{}表示函数体.而且抽象类只有被继承才能体现它的作用,同时子类必须override父类的抽象方法!      virtual用来修

C#&amp;java重学笔记(泛型)

C#部分: 1.泛型的出现主要用于解决类.接口.委托.方法的通用性,通过定义泛型类.接口.委托.方法,可以让不同类型的数据使用相同运算规则处理数据,方便了开发. 2.利用System.Nullable<T>泛型可以生成可空的值类型变量,值类型的可空泛型可以简写为关键字加问号,如:int? val=new int?(); 3.关于布尔类型的泛型可空& |操作,我们可以知道,如果关心不关心操作数是否为空就能得出结果,那么空值就是无所谓的. 4.可空的泛型值类型的HashValue属性值为t

48. 蛤蟆的数据结构笔记之四十八的有向无环图的应用关键路径

48. 蛤蟆的数据结构笔记之四十八的有向无环图的应用关键路径 本篇名言:"富贵不淫贫贱乐 ,男儿到此是豪雄.-- 程颢" 这次来看下有向无环图的另一个应用关键路径. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47135061 1.  关键路径 与AOV-网相对应的是AOE-网(Activity On Edge)即边表示活动的网.AOE-网是一个带权的有向无环图,其中,顶点表示事件(Event),弧表示活动,权表

重学线代——声明篇

为啥重学线代呢? 1.当初学得模棱两可,时间长了啥也没剩下 2.越来越发现线代很流弊,很有用(不只是线代,各门数学都有此感触) 3.比较巧合地在网络上发现了个很好的线代教学资源 4.假期浪费了太可惜了 你这堆博客要写点啥呢? 课程笔记.个人领悟.无知吐槽.等等等等 你还想说点啥么? 没了 哦 恩