
算法那些事
文章平均质量分 87
1-programmer
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用Vue开发1个24点小应用
非前端人员尝试使用vue编写简单小应用。原创 2022-04-05 22:11:19 · 1883 阅读 · 0 评论 -
非递归的堆排序
0x01 背景多年之前写了一篇博客,实现非递归方式的堆排序,多年之后才发现写的有问题。连忙撤了下来,重新复习了《算法导论》,用Go实现了正确的非递归排序。算是填上了当年的坑。基本上是复原了书上的实现,加上自己的理解。0x02 堆与堆排序堆是一种完全二叉树。它具有如下特点:每个节点都比其他子节点的值大或者小。都大的叫大根堆,都小的叫小根堆。反过来表达,除根节点外,其他节点都比父节点小或者大。堆可以和一个数组对应起来。下标为i的元素的两个子节点分别为2i+1和2i+2。堆排序就是利用堆的构建过原创 2022-03-27 15:17:59 · 1056 阅读 · 0 评论 -
PPTV面试算法思考-最长对称子字符串
题目最近在微信公众号里看看到了一个PPTV的面试算法题,感觉难度适中,想试下。题目的内容为求一个字符串的最长对称子字符串。如: 输入 输出 abba 4 abad 3 acccbaa 3我的算法1自己反复思索了许多时间。一开始是觉得可以利用对称字符串的一个特点,就是反转前后两者是一样的。所以有如下的算法: 最长子串长度为max_sub_len原创 2017-03-02 23:19:05 · 856 阅读 · 0 评论 -
轻松理解CRC差错检测算法(A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS)七
9 一个表驱动的实现 上面说的“SIMPLE”算法是一个很好的开始,因为它与目前描述的理论直接对应,因为它是如此简单。然而,因为它在位级别进行操作,所以编码实现起来很尴尬(即使是用C语言),执行起来效率也不高(每一位它都要循环一次)。为了让它快起来,我们需要找到一个可以使算法以比位更大的单元来处理信息的方法。可以选的单元有4位,字节(8位),字(16位),和长字(32位),和任何我们所能达到的更大翻译 2016-12-17 21:55:55 · 1455 阅读 · 2 评论 -
轻松理解CRC差错检测算法七 -注解
原文第9部分的补充原因不得不承认把这个系列的翻译继续下去是很有挑战的。最近加班多,工作之余的精力就比较少了。坚持下去的想法还是有的,但回顾渐忘的初心,做这件事情的意义是在于帮助那些想把CRC算法学明白,而英文又差那么一点的人们,帮助他们从最根本的原理上来理解这个算法系列。我在之前自己看的过程中就发现作者的思路时有跳跃性。我自己在看的时候思路经常出现断续,作者说的标题“轻松理解”其实是有点夸大了。不符原创 2016-12-22 22:47:56 · 1689 阅读 · 1 评论 -
轻松理解CRC差错检测算法(A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS)四
6 一个完整运算示例(作者版权声明见本系列第一篇) 已经定义了CRC运算,我们可以通过一个简单的除法来构建CRC运算的框架。因为,这就是CRC运算的全部。这部分会填补上细节,给出一个完整示例。 要实现一个CRC运算,我们要选出一个除数。在数学王国里,一个除数被叫作“生成多项式”,或者,简单地说“多项式”,它是任何CRC运算中的关键参数。或者叫除数的另外某个名称更易懂一些,但是多翻译 2016-12-12 21:35:40 · 854 阅读 · 0 评论 -
轻松理解CRC差错检测算法(A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS)六
8 一个直接的CRC实现这里是理论部分的尾声。现在我们转向实现。一开始,着手一个绝对的从中间开始的枯燥的低速实现,它没有使用任何的提速技术。我们会逐步改善它,直到我们得到一个紧凑的表驱动实现的程序,这样的程序是我们都知道,都热爱的,而且我们中有些人想弄明白它。 为了实现CRC算法,我们要做的就是实现CRC除法。有2个原因来解释为什么我们不能简单地使用机器上的除法指令来做。首先是,我们做的是CRC除翻译 2016-12-14 21:20:42 · 863 阅读 · 0 评论 -
轻松理解CRC差错检测算法(A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS)一
说下翻译的目的吧,一方面是自己对CRC差错检测算法比较感兴趣,想把它弄明白。另一方面,在网上看过许多介绍这篇文章,却没有找到有中文的翻译。自己英文水平还可以,本着开源分享的精神,就试着把它翻译过来放在博客里,方便英文蹩脚的同学学习。有翻译不当的地方,请大家指正。原文在网上随处可见,我就不再列出了。虽然说个别的地方说的不是很清楚(让读者去看参考文献),整体上对理解CRC算法还是有帮助的。翻译 2016-12-08 21:19:54 · 2513 阅读 · 2 评论 -
轻松理解CRC差错检测算法(A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS)二
3、 CRC算法背后的基本原理 那么我们该去哪里找寻一个比求和更加复杂求的计算公式呢?各种方法开始浮现脑海。我们可以使用圆角率的各位数字构建出一个表,或者将输入的各个字节散列。我们可以保有一个大型的在线电话簿,用参与运算的各个字节与寄存器中的各个字节索引出一个新的电话号码,这个号码,将会是下个寄存器中的值。无限可能。 然而,我们无需想那么多。下一个的运算步骤就足够了。加法明显不翻译 2016-12-10 11:44:11 · 1281 阅读 · 0 评论 -
轻松理解CRC差错检测算法(A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS)三
5 无进位2进制运算(作者版权声明见本系列第1篇) 已经展开讨论了多项式,我们现在聚焦于真正的运算问题上,这是CRC运算中进行的全部运算,即2进制无进位运算。通常,这也被称作是多项式运算,但正如我已经宣称的,此文后面的部分中都不会有“多项式的”这样的名称,相反我们必须叫它CRC运算。因为,这个运算是CRC计算中的关键所在,我们最好去适应它。现在开始: 除了没有进位外,CRC中2翻译 2016-12-11 15:40:25 · 957 阅读 · 0 评论