随笔分类 -  算法

摘要:二叉树的遍历,分为深度优先遍历,以及广度优先遍历。 在深度优先遍历中,具体分为如下三种: 先序遍历:先访问根节点,再遍历左子树,再遍历右子树; 中序遍历:先遍历左子树,再访问根节点,再遍历右子树; 后序遍历:先遍历左子树,再遍历右子树,再访问根节点; 针对上图二叉树,三种遍历结果为: 先序遍历:50 阅读全文
posted @ 2019-02-18 18:42 LiliP 阅读(788) 评论(0) 推荐(0)
摘要:二叉搜索树 定义:如果一颗二叉树的每个节点对应一个关键码值,且关键码值的组织是有顺序的,例如左子节点值小于父节点值,父节点值小于右子节点值,则这棵二叉树是一棵二叉搜索树。 类(TreeNode):定义二叉搜索树各个节点 在该类中,分别存放节点本身的值,以及其左子节点,右子节点,父节点的值。 类(BS 阅读全文
posted @ 2018-11-10 21:53 LiliP 阅读(5842) 评论(0) 推荐(0)
摘要:链表基础(Linked list) 定义 链表:是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer) 链表的基本元素: 节点:每个节点有两个部分,左边部分称为值域,用来存放用户数据;右边部分称为指针域,用来存放指向下一个元素的指针。 head:hea 阅读全文
posted @ 2018-10-11 18:22 LiliP 阅读(305) 评论(0) 推荐(0)
摘要:扩展算法 树 二叉查找树(binary search tree) 对于其中的每个节点,左子节点的值都比它小,而右子节点的值都比它大 O(log n) 数组与二叉查找树运行时间对比 数组 二叉查找树 查找 O(log n) O(log n) 插入 O(n) O(log n) 删除 O(n) O(log 阅读全文
posted @ 2018-08-31 11:49 LiliP 阅读(826) 评论(0) 推荐(0)
摘要:K最近邻算法(k-nearest neighbours,KNN) 算法 使用 使用KNN来做两项基本工作——分类和回归: 分类就是编组; 回归就是预测结果(如一个数字)。 特征抽取 用于确定两个元素相似程度 方法 使用毕达哥拉斯公式 回归(regression) 回归可以预测结果 方法 挑选合适的特 阅读全文
posted @ 2018-08-31 11:45 LiliP 阅读(447) 评论(0) 推荐(0)
摘要:动态规划 原理 动态规划先解决子问题,再逐步解决大问题。但仅当每个子问题都是离散的,即不依赖于其他子问题时,动态规划才管用 比较方法 可以使用表格法逐个罗列分析,每个表格中填写子问题最优解 示例 包容量为4磅,商品有三件,吉他($1500),音响($3000),电脑($2000),尽可能装下总和最贵 阅读全文
posted @ 2018-08-30 12:08 LiliP 阅读(334) 评论(0) 推荐(0)
摘要:贪婪算法 每步都采取最优的做法,即每步都选择局部最优解,最终得到的就是全局最优解。 在有些情况下,贪婪策略显然不能获得最优解,但非常接近。完美是优秀的敌人,有时候,只需找到一个能够大致解决问题的算法,此时贪婪算法正好可派上用场,因为它们实现起来很容易,得到的结果又与正确结果相当接近。 近似算法(ap 阅读全文
posted @ 2018-08-29 11:34 LiliP 阅读(578) 评论(0) 推荐(0)
摘要:狄克斯特拉算法(Dijkstra’s algorithm) 找出最快的路径使用算法——狄克斯特拉算法(Dijkstra’s algorithm)。 使用狄克斯特拉算法 步骤 (1) 找出最便宜的节点,即可在最短时间内前往的节点。 (2) 对于该节点的邻居,检查是否有前往它们的更短路径,如果有,就更新 阅读全文
posted @ 2018-08-28 12:07 LiliP 阅读(5475) 评论(0) 推荐(0)
摘要:广度优先搜索(breadth first search) 图 最短路径问题(shorterst-path problem) 解决最短路径问题的算法被称为广度优先搜索。 最短路径问题解决步骤 (1) 使用图来建立问题模型。 (2) 使用广度优先搜索解决问题。 图的定义 图模拟一组连接。 图由节点(no 阅读全文
posted @ 2018-08-27 11:47 LiliP 阅读(443) 评论(0) 推荐(0)
摘要:散列表 散列函数 定义 散列函数“将输入映射到数字”。即无论你给它什么数据,它都还你一个数字。 散列函数必须满足一些要求 l 它必须是一致的。例如,假设你输入apple时得到的是4,那么每次输入apple时,得到的都必须为4。 l 它应将不同的输入映射到不同的数字。 例如, 如果一个散列函数不管输入 阅读全文
posted @ 2018-08-24 11:35 LiliP 阅读(485) 评论(0) 推荐(0)
摘要:递归 实例:在盒子中寻找钥匙 方法1:使用while循环 (1) 创建一个要查找的盒子堆。 (2) 从盒子堆取出一个盒子,在里面找。 (3) 如果找到的是盒子,就将其加入盒子堆中,以便以后再查找。 (4) 如果找到钥匙,则大功告成! (5) 回到第二步。 方法2:使用递归 (1) 检查盒子中的每样东 阅读全文
posted @ 2018-08-21 23:37 LiliP 阅读(461) 评论(0) 推荐(0)
摘要:内存的工作原理 需要将数据存储到内存时,请求计算机提供存储空间,计算机返回一个存储地址。需要存储多项数据时,有两种基本方式——数组和链表。 数组和链表 数组 使用数组意味着所有内容在内存中都是相连的(紧靠在一起的)。 在数组中添加新元素,如果没有了空间,就得移到内存的其他地方,因此添加新元素的速度会 阅读全文
posted @ 2018-08-20 15:22 LiliP 阅读(197) 评论(0) 推荐(0)
摘要:二分查找 基本概念 二分查找是一种算法,其输入是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回null。 使用二分查找时,每次都排除一半的数字 对于包含n个元素的列表,用二分查找最多需要log2n步,而简单查找最多需要n步。 示例: 如果列表包含8个数字,你最多需要检 阅读全文
posted @ 2018-08-15 15:23 LiliP 阅读(802) 评论(0) 推荐(0)