![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【算法】图解算法
文章平均质量分 81
大花裤
这个作者很懒,什么都没留下…
展开
-
《算法图解》学习笔记—第10章 K最近邻算法
前言KNN用于分类和回归,需要考虑最近的邻居。分类就是编组。回归就是预测结果(如数字)。特征抽取意味着将物品(如水果或用户)转换为一系列可比较的数字。能否挑选合适的特征事关KNN算法的成败。使用K最近邻(k-nearest neighbours,KNN)算法对水果进行分类。创建推荐系统假设要为用户创建一个电影推荐系统。可以将所有用户都放入一个图表中,这些用户在图表中的位置取决于其喜好,因此喜好相似的用户距离较近。假设你要向Priyanka推荐电影,可以找出五位与他最接近的用户。原创 2021-06-29 11:13:28 · 145 阅读 · 0 评论 -
《算法图解》学习笔记—第9章 动态规划
前言 需要在给定约束条件下优化某种指标时,动态规划很有用。 问题可分解为离散子问题时,可使用动态规划来解决。 每种动态规划解决方案都涉及网格。 单元格中的值通常就是你要优化的值。 每个单元格都是一个子问题,因此你需要考虑如何将问题分解为子问题。背包问题小偷背着一个可装4磅东西的背包,可盗窃的商品有如下3件。为了让盗窃的商品价值最高,该选择哪些商品?近似解方法找到的可能不是最优解。那么如何找到最优解呢?每个动态规划算法都从一个网格开始,背包问题的网格如下。第一行是吉他行,意原创 2021-06-29 10:57:33 · 177 阅读 · 0 评论 -
《算法图解》学习笔记—第8章 贪婪算法
前言贪婪算法:每步都采取最优的做法。每步都选择局部最优解,最终得到的就是全局最优解原创 2021-06-29 09:44:49 · 116 阅读 · 0 评论 -
《算法图解》学习笔记—第11章 10种算法简介
前言罗列了一些以后可能会用到的算法,并简单介绍了一下,以后具体用到的时候再详细学习。1. 树二叉查找树(binary search tree),一种数据结构。对于其中的每个节点,左子节点的值都比它小,而右子节点的值都比它大。假设你要查找Maggie。为此,你首先检查根节点。Maggie排在David的后面,因此你往右边找。查找过程跟二分查找一样。在二叉查找树中查找节点时,平均运行时间为O(lognlog nlogn),但在最糟的情况下所需时间为O(nnn);而在有序数组中查找时,即便是原创 2021-06-28 20:09:08 · 115 阅读 · 0 评论 -
《算法图解》学习笔记—第7章 狄克斯特拉算法
前言加权图(weighted graph)——带权重的图狄克斯特拉算法,让你能够找出加权图中前往X的最短路径。狄克斯特拉算法只适用于有向无环图(directed acyclic graph,DAG)。狄克斯特拉算法假设:对于处理过的海报节点,没有前往该节点的更短路径。这种假设仅在没有负权边时才成立。因此,不能将狄克斯特拉算法用于包含负权边的图。在包含负权边的图中,要找出最短路径,可使用另一种算法——贝尔曼-福德算法(Bellman-Fordalgorithm)。狄克斯特拉算法算法步骤原创 2021-06-28 16:03:38 · 141 阅读 · 0 评论 -
《算法图解》学习笔记—第6章 广度优先搜索
前言广度优先搜索(breadth-first search,BFS)是一种图算法。广度优先搜索可以找出两样东西之间的最短距离,使用广度优先搜索可以:编写国际跳棋AI,计算最少走多少步就可获胜;编写拼写检查器,计算最少编辑多少个地方就可将错拼的单词改成正确的单词,如将READED改为READER需要编辑一个地方;根据你的人际关系网络找到关系最近的医生。最短路径问题(shorterst-path problem)。你经常要找出最短路径,这可能是前往朋友家的最短路径,也可能是国际象棋中把对方将死的原创 2021-06-28 13:39:24 · 129 阅读 · 0 评论 -
《算法图解》学习笔记—第5章 散列表
学习散列表——最有用的基本数据结构之一。散列表用途广泛,本章将介绍其常见的用途。学习散列表的内部机制:实现、冲突和散列函数。这将帮助你理解如何分析散列表的性能。实例:作为收银员,在本子中查找价格是件很痛苦的事情,哪怕本子的内容是有序的。需要一名能够记住所有商品价格的雇员Maggie,这样你就不用查找了:问她就能马上知道答案。你希望查找商品价格的时间为O(1),这是散列函数的用武之地。5.1 散列函数散列函数是这样的函数,即无论你给它什么数据,它都还你一个数字。即将输入映射到数字。散列函数必.原创 2021-06-28 09:25:43 · 115 阅读 · 0 评论 -
《算法图解》学习笔记—第4章 快速排序
4.1 分而治之分而治之(divide and conquer,D&C)——一种著名的递归式问题解决方法。D&C并非可用于解决问题的算法,而是一种解决问题的思路。D&C的工作原理:(1) 找出简单的基线条件;(2) 确定如何缩小问题的规模,使其符合基线条件。示例:给定一个数字数组,需要将这些数字相加,并返回结果。使用循环很容易完成这种任务。def sum(arr): total = 0 for x in arr: total += x原创 2021-06-27 16:44:55 · 115 阅读 · 0 评论 -
《算法图解》学习笔记—第3章 递归
3.1 递归介绍盒子中找钥匙解决方案一:while 循环def look_for_key(main_box): pile = main_box.make_a_pile_to_look_through() while pile is not empty: box = pile.grab_a_box() for item in box: if item.is_a_box(): pile.append(原创 2021-06-27 16:43:33 · 193 阅读 · 0 评论 -
《算法图解》学习笔记—第2章 选择排序
第2章 选择排序2.1内存的工作原理fe0ffeeb是一个内存单元的地址。需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。需要存储多项数据时,有两种基本方式——数组和链表。2.2 数组和链表有时候,需要在内存中存储一系列元素。假设你要编写一个管理待办事项的应用程序,为此需要将这些待办事项存储在内存中。使用数组意味着所有待办事项在内存中都是相连的(紧靠在一起的)。再添加代办事项时,需要请求计算机重新分配一块可容纳4个待办事项的内存,再将所有待办事项都移到那里。链表原创 2021-06-27 16:40:40 · 88 阅读 · 0 评论 -
《算法图解》学习笔记—第1章 算法简介
《算法图解》学习笔记—第1章第1章 算法简介1.1 二分查找1.2 大O表示法一些常见的大O运行时间第1章 算法简介算法是一组完成任务的指令,任何代码片段都可视为算法。1.1 二分查找二分查找是一种算法,其输入是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回null。应用实例:在电话簿中找一个名字以K打头的人;登录Facebook时,Facebook必须核实你是否有其网站的账户,须在其数据库中查找你的用户名;以最少的次数猜到一个1~100之间的数字。对于包含n个原创 2021-06-27 16:37:43 · 74 阅读 · 0 评论 -
《算法图解》学习笔记—第1-4章
《算法图解》学习笔记—第1-4章第1章 算法简介1.1 二分查找1.2 大O表示法一些常见的大O运行时间第2章 选择排序2.1内存的工作原理2.2 数组和链表中间插入删除运行时间2.3 选择排序第3章 递归3.1 递归介绍3.2 基线条件和递归条件3.3 栈调用栈递归调用栈第4章 快速排序4.1 分而治之练习4.2 快速排序第1章 算法简介算法是一组完成任务的指令,任何代码片段都可视为算法。1.1 二分查找二分查找是一种算法,其输入是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位原创 2021-06-27 16:28:12 · 175 阅读 · 0 评论