算法
文章平均质量分 65
搬砖小测试
认识志同道合的小伙伴 分享知识 积极向上 突破自我
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
《图解算法》阅读08—快速排序算法
快速排序比选择排序常见的多,快速排序采用分而治之的思想。原创 2018-12-04 16:24:21 · 170 阅读 · 0 评论 -
《图解算法》阅读14—贪婪算法
学会处理不可能完成的任务(NP完全问题) 学习识别NP完全问题 学习近似算法,使用它们可快速找到NP完全的近似解 学习贪婪算法——一种非常简单的问题解决策略 教室调度问题 排课的算法如下所示。 选出结束最早的课,它就是要在这间教室上的第一堂课 接下来,选择第一堂课结束后才开始的课。同样,选择结束最早的课是在这间教室上的第二堂课,重复就能这一步骤,直至教室排满课程。 这就是贪婪算法,每步都采取...原创 2018-12-18 11:04:24 · 323 阅读 · 0 评论 -
《图解算法》阅读17—接下来如何做:10种算法的简单介绍
这一章作者简单地介绍了10种算法的主要思想和用处,简单地看一下,理解一下。 树 反向索引 傅里叶变化 MapReduce 布隆过滤器 SHA算法 局部敏感的散列算法 Diffie-Hellman 密钥交换 线性规划 ...原创 2018-12-19 23:11:05 · 244 阅读 · 0 评论 -
《图解算法》阅读16—K最邻近算法
学习使用K最邻近算法创建分类系统 学习特征抽取 学习回归 学习K最邻近算法的应用案例和局限性 创建推荐系统 如果我们建立一个电影推荐系统,可以将用户放在多维坐标系中,我们认为用户在坐标系中的位置取决于其喜好,因此喜好相似的用户距离较近。如果我们想向一个用户推荐电影,只要推荐与他喜好相近的用户喜欢的电影即可。 那么如何确定两位用户的相似程度呢? 特征抽取 我们首先抽取用户的特征,然后计算两个用户...原创 2018-12-19 22:52:15 · 776 阅读 · 0 评论 -
《图解算法》阅读13—狄克斯特拉算法
使用狄克斯特拉算法 狄克斯特拉算法包含4个步骤: 找出“最便宜”的节点,即可在最短时间内到达的节点 更新该节点的邻居的开销,其含义将稍后介绍 重复这个过程,直到对图中的每个节点都这样做了 计算最终路径 术语 狄克斯特拉算法用于每条边都有关联数字的图,这些数字称为权重(weight)。带权重的图称为加权图(weighted gragph),不带权重的图称为非加权图(unweighted grap...原创 2018-12-13 22:47:37 · 428 阅读 · 0 评论 -
《图解算法》阅读12—广度优先算法
图简介 解决最短路径的算法被称为广度优先搜索。 图是什么 图模拟一组连接。图由节点(node)和边(edge)组成。一个节点可能与众多节点相连,这些节点被称为邻居。 广度优先搜索 广度优先搜索是一种用于图的查找算法,可以帮助解决两种问题。 从节点A出发,有前往节点B的路径吗 从节点A出发,前往节点B的哪条路径最短 查找最短路径 在广度优先搜索的执行过程中,搜索范围从起点开始逐渐向外延伸,即先检...原创 2018-12-06 16:50:17 · 239 阅读 · 0 评论 -
《图解算法》阅读11—散列表的冲突和性能
冲突原创 2018-12-05 14:08:03 · 347 阅读 · 1 评论 -
《图解算法》阅读08—分而治之的思想
分而治之(divide and conquer)是一种著名的递归式问题解决方法。 使用分而治之的思想解决问题的过程包括两个步骤: 找出基线条件,这种条件必须尽可能简单。 不断将问题分解(缩小规模),直到符合基线条件。 书中提出了几个具体的例子来解释分而治之的思想。如果有一个农场主,有一块地,我们如何让将这块地分成大小相同的方块,并且分出的方块要尽可能大。 首先,我们可以利用循环来解决这个问...原创 2018-12-03 10:32:35 · 602 阅读 · 0 评论 -
《图解算法》阅读03—大O表示法
大O表示法 大O表示法是表示算法运行时间的一种表示法。 算法的运行时间以不同的速度增加 以简单查找和二分为例,两个算法的运行规模不同,运行时间分别为线性时间和对数时间。二分法运行的时间短,但是简单查找法出现bug的可能性低。 举个书中的例子,当列表中的元素数分别为100和1亿时,二分法和简单查找法的运行时间如下表所示。 元素数目 简单查找 二分法 100 100毫秒 7毫秒 1...原创 2018-12-01 11:57:57 · 386 阅读 · 2 评论 -
《图解算法》阅读02—二分法
二分查找 二分查找应该是比较基础的算法了,但是自己太渣了,一切要从头开始复习。查找问题都可以使用二分查找的算法来解决。 二分查找的输入是一个有序的元素列表,如果查找的元素在列表中,二分法返回其位置,否在返回空值。 更佳的查找方法 我们直接利用简单查找法对列表进行查询是低效的。举个书中提到的例子,我们经常的聚会中玩的猜数字游戏。目标数字在1-100之间,我们简单地从1一直按照顺序往后猜是低效的,...原创 2018-11-30 22:52:31 · 819 阅读 · 0 评论 -
《图解算法》阅读10—散列函数
散列函数 散列函数将输入映射到数字,散列函数必须满足一些要求。 散列函数得到的结果必须是一致的。 散列函数将不同的输入映射到不同的数字。 散列函数准确地指出了输入变量对应的变量的存储位置,对于查找算法来说,并不需要查找。散列函数与索引的关系如下: 散列函数总是将同样的输入映射到相同的索引。 散列函数将不同的输入映射到不同的索引。 散列函数知道数组有多大。 散列表是一种包含额外逻辑的数据结构,使用...原创 2018-12-04 23:23:59 · 436 阅读 · 0 评论 -
《图解算法》阅读07—如何理解栈和调用栈
之前学习数据结构课程的时候,对栈的理解就是“先进后出,后进先出”,理解的很浅薄,期待这次阅读带给自己不一样的理解。 栈 调用栈(call stack)不仅对编程来说很重要,对递归函数也很重要。stack中文是“堆”的意思,通俗一点可以将栈理解为类似木桶的放东西的容器,只有一个口可以取东西。放东西只能放在最上面,想要拿东西时只能从最上面拿。并且只有两种操作:插入和弹出(删除并读取)。下面是维基百科的...原创 2018-12-02 23:08:15 · 359 阅读 · 0 评论 -
《图解算法》阅读06—如何理解递归算法
递归 如果使用了循环,程序的性能可能更高;如果使用递归,程序可能更容易理解。 个人认为很多时候许多递归算法是简洁的,同时也是难以理解,更难以真正自己想出来的。不知道是因为自己看得少,对递归算法不够理解,还是因为递归算法真的很难。希望自己在阅读并实现这一章节的算法后能够得出一个答案。 本书提出的一个在类似俄罗斯套娃的盒子中寻找钥匙的问题,并分别使用简单的循环和递归算法进行解决。 当使用循环算法...原创 2018-12-02 21:49:10 · 1043 阅读 · 0 评论 -
《图解算法》阅读05—选择排序
书中举了一个将音乐的播放列表按照顺序进行排序的例子。我们需要将播放列表按照播放次数进行排序,从而选出最喜欢的音乐。 第一种方法,创建一个新的列表,遍历播放列表,每次将播放量第n大的歌曲放置到新的列表中。这种简单的排序算法的时间复杂度为O(n*n)。这种算法叫做选择排序。 算法实现 下面在python3中实现选择排序,每次选择第n大的元素,从而实现排序。 关键点: 良好的编程习惯,将算法分解成寻找...原创 2018-12-02 20:46:00 · 207 阅读 · 0 评论 -
《图解算法》阅读04—数据结构:链表和数组
内存的工作原理 需要将数据存储到内存时,请求计算机提供存储空间,计算机返回一个存储地址。需要存储多项数据时,有两种基本方式——数组和链表。 数组和链表 使用数组进行存储数据时,所存储的数据在内存中都是相连的。 当向数组中添加新元素时,如果原来存储的内存没有了空间,就移到内存的其他地方,添加新元素的速度很慢。一种权变的解决措施是,为每一块数据提供多余的内存空间。但是这种预留的措施同样存在缺点:一是浪...原创 2018-12-02 19:05:50 · 259 阅读 · 0 评论 -
《图解算法》阅读09—快速排序和归并排序
快速排序的时间复杂度 关于如何分析快速排序的时间复杂度自己一直不是很清楚,在看到快速排序最好,最坏,平均复杂度分析这篇文章后,作为一个小白也很快理解了,推荐给大家阅读以下。 文章中的一个主要思想就是利用递归树来描述递归算法的执行情况。 快速排序的最好情况:树的每个节点是带排序序列的中间值,递归树是平衡的,此时的性能很好。在最优的情况下,递归树的深度为(log2 n)+1仅需要递归log2n次。 快...原创 2018-12-04 20:53:34 · 261 阅读 · 0 评论 -
《图解算法》阅读15—动态规划
学习动态规划,他将问题分成小问题,并先着手解决这些小问题;学会设计问题的动态规划解决方案。 背包问题 回顾前面一小节的背包问题,假设一个小偷,背着一个可以装4磅东西的背包,如何盗窃使得商品的价值最高? 简单算法 尝试商品组合的全排列,找出价值最高的组合。这也是本人一直以来的思维方式,简单粗暴。恰好,上周的实习生面试,给自己敲响了警钟,这种完全不考虑运行时间和内存溢出的算法,在面试的过程中会被锤的很...原创 2018-12-18 18:47:07 · 414 阅读 · 1 评论
分享