#算法的乐趣

算法图解之广度优先搜索

广度优先搜索的应用场景,如下:(1)编写国际跳棋AI,计算最少走多少步就可获胜;(2)编写拼写检查器,计算最少编辑多个地方就可将错拼的单词改为正确的单词,如将READED改为READER需要编辑一个地方;(3)根据你的人际关系网络找到关系最近的医生;假设你居住在旧金山,要从双子峰前往金门大桥。你想乘公交车前往,并希望换...

算法图解之散列表

专业术语表述,”将输入映射到数字”。散列函数具有如下要求:(1)它必须是一致的。如你输入blog得到的是wordpress,那么每次输入blog,得到的都必须为wordpress。(2)它应将不同的输入映射到不同的数字。如,如果一个散列函数不管输入是什么都返回1,它就不是好的散列函数。最理想的情...
代码星球 ·2020-07-24

初学者摸索之算法学习

此文转自我个人微信公众号,时间虽然过去已经四个多月了,但是我个人认为还是能够给大家带来启发意义,所以借这个时间分享给大家,微信公众号分享比较有限,而且时效性也比较差,而博客时效性比较好,而且还能集思广益,欢迎朋友在评论区留言,俗话说,众人拾柴火焰高。原文如下:春节的假期在家待了10天。明天就要回北京了。微信公众号文章也...

算法图解之快速排序

书中举了一个例子,假设你是农场主,有一块土地,如图所示: 你要将这块地均匀分成方块,且分出的方块要尽可能大。  从图上看,显然是不符合预期结果的。那么如何将一块地均匀分成方块,并确保分出的方块是最大的呢?使用D&C策略。(1)D&C算法是递归的;(2)使用D&C解决...
代码星球 ·2020-07-24

算法图解之递归

图一:  图二:   图一和图二对比,它们的作用都是相同的。从流程上分析,图一流程相对比较复杂,而图二则简单明了,这是某位同行在stackoverflow上面说过的话:如果使用循环,程序的性能可能更高;如果使用递归,程序可能更容易死理解。如何选择要看什么对你来说跟重要。...
代码星球 ·2020-07-24

算法图解之二分查找

简单查找,如下图: 从图可知那个眼镜男从1开始猜,猜到100,大家都知道这种猜法最终都会得到答案,就是时间问题而已。100毕竟是这个列表的最大长度。但是换言之,如果是一万、百万、上千亿呢?那么这种猜法虽然能够得到答案,但是时间方面的成本将会非常大。于是二分法应需而生。二分法,如下图:从图可知这次眼镜男学聪明了...
代码星球 ·2020-07-24

算法图解之内存的工作原理

 其中fe0ffeeb是一个内存单元的地址,需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。需要存储多项数据时,有两种基本方式,一种是数组,另外一种是链表。但它们并非都适用于所有情形,因此知道它们的差别非常重要。...

算法图解之大O表示法

大O表示法是一种特殊的表示法,指出了算法的速度有多快。关于算法的运行时间以不同的速度增加,我联系到平时写代码,严谨的代码(易读,可扩展,精悍,经过多方测试等),通常运行速度与那些不严谨的代码(完全相反)的代码进行对比,你会发现前者的运行速度是大于后者,这个虽然不能说绝对,大多情况都是这样的。以我之前VsCode插件开发...
代码星球 ·2020-07-24

算法图解之数组和链表

1.数组以添加第四个待办事项为例,但后面的那个抽屉已经放了别人的东西这就像你与朋友去看电影,找到地方就坐后又来了一位朋友,但原来坐的地方没有空位置,只得再找一个方可坐下所有人的地方。在这种情况下,你需要请求计算机重新分配一块可容纳4个待办事项的内存,再将所有待办事项移到那里。如果又来了一位朋友,而当前坐的地方也没有空位...
代码星球 ·2020-07-24

算法图解之选择排序

假设你的计算机存储了很多乐趣。对于每个乐队,你都记录了其作品被播放的次数。如果你要将这个列表按播放次数从多到少的顺序排列,从而将你喜欢的乐队排序。该如何做呢?我第一眼看到这个问题时,想到的是通过sql解决这个问题假设如果这是一个数据表的话,我很容易就可以通过orderby字段名desc进行降序排序(也就是从大到小)不过...
代码星球 ·2020-07-24

LeetCode算法题详解之两个数组的交集

题目背景: 这个与我们高中时期学习的交集是一样的,顺便复习一下相关的数学知识有助于更好的理解。交集的定义: 对于两个集合A和B,定义A和B的交集为C,其中C={x|x属于A且X属于B},记作A∩B。如图所示:  解题思路一:publicint[]intersect(int...

<数据结构与算法分析>读书笔记--运行时间中的对数及其分析结果的准确性

分析算法最混乱的方面大概集中在对数上面。我们已经看到,某些分治算法将以O(NlogN)时间运行。此外,对数最常出现的规律可概括为下列一般法则:如果一个算法用常数时间(O(1))将问题的大小削减为其一部分(通常是1/2),那么该算法就是O(logN)。另一方面,如果使用常数时间只是把问题减少一个常数的数量(如将问题减少1...

<数据结构与算法分析>读书笔记--最大子序列和问题的求解

 现在我们将要叙述四个算法来求解早先提出的最大子序列和问题。第一个算法,它只是穷举式地尝试所有的可能。for循环中的循环变量反映了Java中数组从0开始而不是从1开始这样一个事实。还有,本算法并不计算实际的子序列;实际的计算还要添加一些额外的代码。publicstaticintmaxSubSum1(int[]...

<数据结构与算法分析>读书笔记--运行时间计算

有几种方法估计一个程序的运行时间。前面的表是凭经验得到的(可以参考:<数据结构与算法分析>读书笔记--要分析的问题)如果认为两个程序花费大致相同的时间,要确定哪个程序更快的最好方法很可能将它们编码并运行。一般地,存在几种算法思想,而我们总愿意尽早除去那些不好的算法思想,因此,通常需要分析算法。不仅如此,进行...

<数据结构与算法分析>读书笔记--要分析的问题

通常,要分析的最重要的资源就是运行时间。有几个因素影响着程序的运行时间。有些因素(如使用编译器和计算机)显然超出了任何理论模型的范畴,因此,虽然它们是重要的,但是我们在这里还是不能考虑它们。剩下的主要因素是所使用的算法以及对该算法的输入。典型的情形是,输入的大小是主要的考虑方面。我们定义两个函数Tavg(N)和Twor...
代码星球 ·2020-07-24
首页上一页...5354555657...下一页尾页