随笔分类 -  数据结构与算法

摘要:a 阅读全文
posted @ 2020-02-15 11:28 CarreyB 阅读(160) 评论(0) 推荐(0) 编辑
摘要:Dijkstra算法 求解一系列点中任意两点间最短距离的算法 -- 图论最短距离 简介: 1. 案例:存在一系列的数据点(如9个点),我们将其编号为'A'~'I',这9个点的位置由坐标决定 在这11个顶点中,两两顶点之间或存在连线(即可通过其中一点直接达到另一点), 或不存在连线(即不可通过其中一点 阅读全文
posted @ 2020-02-13 10:27 CarreyB 阅读(341) 评论(0) 推荐(0) 编辑
摘要:图结构 1. 图也是一种常见的数据结构 2. 图是一种和树结构由些相似的数据结构 3. 图结构也图论,在数学的概念上,树是图的一种 4. 图论以图为研究对象,研究顶点和边组成的图形的数学理论和方法 图结构的使用场景 1. 人与人之间的关系网(六度空间理论) 2. 地铁路线图 3. 村庄间的路线图 图 阅读全文
posted @ 2020-02-12 18:19 CarreyB 阅读(423) 评论(0) 推荐(0) 编辑
摘要:平衡树 1. 二叉搜索树的优点 二叉搜索树作为数据存储的结构,最大的优势是可以快速找到给定关键字的项,并且可以快速的实现插入和删除数据操作 因为二叉搜索树采用了二分查找的策略 2. 二叉搜索树存在的问题 但是二叉搜索树有一个麻烦的问题:若插入的数据是一个有序数列(从小到大/从大到小),会造成二叉搜索 阅读全文
posted @ 2020-02-12 14:14 CarreyB 阅读(140) 评论(0) 推荐(0) 编辑
摘要:二叉搜索树(BST, Binary Search Tree) 1. 二叉树也是一颗二叉树, 可以为空 2. 如果不为空,则满足以下条件 1. 非空左子树的所有键值小于其根节点的键值 2. 非空右子树的所有键值大于其根节点的键值 3. 左, 右子树本身也是搜索树 3. 二叉搜索树的特点 1. 二叉搜索 阅读全文
posted @ 2020-02-05 12:13 CarreyB 阅读(155) 评论(0) 推荐(0) 编辑
摘要:树结构 1. 常用的树结构 公司组织架构 文件系统路径查找 家族系谱图 2. 树结构, 数组, 链表, 哈希表的比较 1. 数组 优点: 数组的主要优点是根据下标访问数据效率很高 缺点: 数组进行插入,删除操作时,需要大量元素的移位,效率低 2. 链表 优点: 链表在进行插入和删除操作时,效率很高 阅读全文
posted @ 2020-02-01 11:17 CarreyB 阅读(163) 评论(0) 推荐(0) 编辑
摘要:二叉树: 如果书中的每个节点最多只有两个子节点,这样的树就叫做二叉树 1. 二叉树的重要特性 二叉树第 i 层的最大节点数为: 2^(i-1), i >= 1 深度为 k 的二叉树最大节点总数为: 2^k - 1 对于任何一个非空二叉树T, 若n0表示叶节点的个数,n2为度为2的非空叶节点个数, 那 阅读全文
posted @ 2020-02-01 09:01 CarreyB 阅读(114) 评论(0) 推荐(0) 编辑
摘要:哈希表的实现 1. 这里采用链地址法实现哈希表 2. 哈希表是一个数组storage, 这个数组中的每一个index对应一个数组(链表也可以) 3.在数组中将key和value都存进去(最好是这样) 4. 最终实现的哈希表中的数据形式就是: [[k1, v1], [k2, v2], [k3, v3] 阅读全文
posted @ 2020-01-28 16:03 CarreyB 阅读(194) 评论(0) 推荐(0) 编辑
摘要:哈希表的扩容 1. 为什么要扩容 1. 扩容即是将哈希表的长度增加,通常是变为原来的两倍 2. 使用链地址法封装哈希表时, 填装因子(loaderFactor)会大于1, 理论上这种封装的哈希表时可以无限插入数据的 3. 但是但是随着数据量的增多,哈希表中的每个元素会变得越来越长, 这是效率会大大降 阅读全文
posted @ 2020-01-28 11:06 CarreyB 阅读(1429) 评论(0) 推荐(0) 编辑
摘要:哈希函数的实现 即将给定的一个字符串,转换成一个数值下标 输入:待转换的字符串 存储空间长度(链地址法) 输出:转换后的字符串 1. 首先将给定的字符串转换成一个较大的数字 实现方式:找到每个字符对应的Unicode编码,然后利用霍纳算法计算 质数选择:37(常用值,这是一个经验值) 2. 将这个较 阅读全文
posted @ 2020-01-27 15:01 CarreyB 阅读(161) 评论(0) 推荐(0) 编辑
摘要:基础理论知识 1. 哈希表的定义 1. 哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过关键码映射的位置查找存放值的位置。 2. 哈希表的结构其实就是数组,但神奇的地方是对下标值的转换,这种转换我们称之为哈希函数, 通过哈希函数可以获取到HashCode。 2. 哈希表的重要性 哈希表是一种 阅读全文
posted @ 2020-01-24 15:09 CarreyB 阅读(446) 评论(0) 推荐(0) 编辑
摘要:链表 1. 数组的缺点 1. 数组通常需要申请一段连续的内存空间来存储元素,并且内存空间的大小是固定的(这里只能说大多数是固定大小的) 所以当数组需要扩容时,需要冲洗申请一块更大的内存空间,再把之前的数据拷贝进去,然后再存储需要扩容的数据 2. 往数组头部或者中间添加元素时,成本很高,因为需要大量元 阅读全文
posted @ 2020-01-23 11:50 CarreyB 阅读(147) 评论(0) 推荐(0) 编辑
摘要:优先级队列 1. 特点: 1. 普通队列新插入的元素,默认会被放在队列的尾部 2. 优先级队列中的每一个元素都有一个优先级属性 2. 优先级队列会将新插入的元素的优先级与队列中的元素进行比较,然后根据优先级,将新元素放置在正确的位置 3. 优先级队列的其他属性和方法与普通队列无异 2. 应用场景 登 阅读全文
posted @ 2020-01-21 12:47 CarreyB 阅读(204) 评论(0) 推荐(0) 编辑
摘要:队列结构 队列结构(Queue) 一种受限的线性结构 1. 特点 1. 队列是一种受限的线性结构 2. 先进先出,后进后出 3. 在前端插入,在后端弹出 2. 队列的应用 1. 打印队列 打印机取出一个打印一个,直到所有文档被打印 2. 线程队列 多任务的并行处理时,将所有的人物放入队列,依次启动线 阅读全文
posted @ 2020-01-21 10:03 CarreyB 阅读(223) 评论(0) 推荐(0) 编辑
摘要:栈结构 1. 栈(Stack) 一种受限的线性结构 1. 特点: 1. 只有一个口 2. 先进后出,后进先出 3. 元素按照进栈顺序从栈底排到栈顶 2. 函数调用栈: 假如函数A调用函数B,函数B调用函数C 则在执行的过程中,先将A压入栈,由于A没有执行完,所以不会弹出栈, 然后A中调用了B函数,B 阅读全文
posted @ 2020-01-20 14:40 CarreyB 阅读(556) 评论(0) 推荐(0) 编辑
摘要:双向链表 1. 单向链表的特点 1. 只能从头遍历到尾,或者从尾遍历到头(一般是从头到尾),即链表数单向的 2. 实现的原理是上一个节点中存储有下一个节点的引用 2. 单向链表存在的问题 1. 从一个节点到达下一个节点很容易,但是从下一个节点回到上一个节点无法实现 2. 而实际中,我们需要从某个节点 阅读全文
posted @ 2020-01-14 08:12 CarreyB 阅读(291) 评论(0) 推荐(0) 编辑
摘要:数据结构与算法知识点 1. 重要性 1.什么是数据结构 2. 数据结构与算法的重要性 2. 线性结构 1. 数组 数组的使用(复习) 2. 栈 自定义栈 栈的应用 3. 队列 自定义队列 优先级队列 队列的应用 4. 链表 链表原理 自定义链表 双向链表 3. 哈希表 1. 哈希表理论 哈希表介绍 阅读全文
posted @ 2020-01-12 14:35 CarreyB 阅读(192) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示