随笔分类 - 06_算法
摘要:10、K最近邻算法 KNN用于分类和回归,需要考虑最近的邻居。 回归就是预测结果(如数字)。 特征抽取意味着将物品(如水果或用户)转换为一系列可比较的数字。 能否挑选合适的特征事关KNN算法的成败。
阅读全文
摘要:9、动态规划 动态规划先解决子问题,再逐步解决大问题。 需要在给定约束条件下优化某种指标时,动态规划很有用。 问题可分解为离散子问题时,可使用动态规划来解决。 每种动态规划解决方案都涉及网格。 单元格中的值通常就是你要优化的值。 每个单元格都是一个子问题,因此你需要考虑如何将问题分解为子问题。 没有
阅读全文
摘要:8、贪婪算法 贪婪算法很简单:每步都采取最优的做法。贪婪算法并非在任何情况下都行之有效,但它易于实现。 在有些情况下,完美是优秀的敌人。有时候,你只需找到一个能够大致解决问题的算法,此时贪婪算法正好可派上用场,因为它们实现起来很容易,得到的结果又与正确结果相当接近。 在获得精确解需要的时间太长时,咳
阅读全文
摘要:7、狄克斯特拉算法 加权图——提高或降低某些边的权重。 广度优先搜索——找出的是段数最少的路径。如果你要找出最快的路径,可使用另一种算法——狄克斯特拉算法(Dijkstra's algorithm)。 狄克斯特拉算法用于每条边都有关联数字的图,这些数字称为权重(weight)。 带权重的图称为加权图
阅读全文
摘要:6、广度优先搜索 6.1 图简介 广度优先搜索(breadth-first search,BFS) 广度优先搜索能让你能够找出两样东西之间的最短距离,不过最短距离的含义有很多。使用广度优先搜索可以: 最短路径问题(shorterst-path problem),解决最短路径问题的算法被称为广度优先搜
阅读全文
摘要:5、散列表 散列表——最有用的基本数据结构之一。 散列表的内部机制:实现、冲突和散列函数。 5.1 散列函数 散列函数是这样的函数,即无论你给它神秘数据,它都还你一个数字。(散列函数“将输入映射到数字”)。 散列函数必须满足: (1)它必须是一致的。 (2)它应将不同的输入映射到不同的数字。最理想的
阅读全文
摘要:4、快速排序 4.1 分而治之 快速排序 —— 一种使用D&C(divide and conquer)的排序算法。 使用D&C解决问题的过程包括两个步骤: (1)找出基线条件,这种条件必须尽可能简单。 (2)不断将问题分解(或者说缩小规模),直到符合基线条件。 代码清单4-1 求和 4.2 快速排序
阅读全文
摘要:3、递归 3.1 基线条件和递归条件 每个递归函数都有两部分:基线条件(base case)和递归条件(recursive case)。 递归条件指的是函数调用自己,而基线条件则指的是函数不再调用自己,从而避免形成无限循环。 代码清单3-1 递归 3.2 栈 栈是一种简单的数据结构。 代码清单3-2
阅读全文
摘要:2、选择排序 2.1 内存的工作原理 需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。 需要存储多项数据时,有两种基本方式——数组和链表。 2.2 链表 链表的元素科存储在内存的任何地方。 链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。 在链表
阅读全文
摘要:1.1 更佳的查找方式 二分查找是一种算法,其输入是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置,否则返回null。 一般而言,对于包含 n 个元素的列表,用二分查找最多需步,而简单查找最多需要 步。 仅当列表是有序的时候,二分查找才管用。 代码清单1-1 二分查找 1.2
阅读全文

浙公网安备 33010602011771号