算法
算法系列文章
奶糖猫Esong
这个作者很懒,什么都没留下…
展开
-
二分查找及对应的几道经典题目
二分查找(Binary Search)属于七大查找算法之一,又称折半查找,它的名字很好的体现出了它的基本思想,二分查找主要是针对的是有序存储的数据集合。假设有一个集合和一个待查找的目标值,每次都通过将目标值和处于集合中间位置的元素比较,将待查找区间收缩为之前区间的一半,比如目标值小于一次二分查找区间的中间值,则下次查找区间就为原区间的左边一半,重复此过程直至找到目标值或者区间被收缩为0.下面这幅动图就为二分查找的基本过程,也是最简单的一种二分查找。最开始我们总是维护两个指针,分别指向数组的起始位置和原创 2020-07-02 10:14:29 · 1406 阅读 · 0 评论 -
20年前的几行代码竟如此牛逼?惊了
最近在知乎上看到了一个话题:世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?其中有一个回答是雷神之锤3中的快速逆平方根算法,我本以为是电影中雷神3中出现的代码,就特别好奇点进去看了一下,结果真是对应了代码注释中的一句话“what the fuck?”。越不会越好奇,查过之后才知道这是一款游戏中的部分代码,1999年发布,2005年开源,距离现在已经有20年了,据说这部分代码出现在公共场合时,几乎震住了所有人,也就是下面这几行代码:float Q_rsqrt( float number ){原创 2020-06-08 10:04:24 · 29508 阅读 · 78 评论 -
这几道经典例题帮你轻松搞透贪心算法
贪心算法概念叙述运用贪心算法求解问题时,会将问题分为若干个子问题,可以将其想象成俄罗斯套娃,利用贪心的原则从内向外依次求出当前子问题的最优解,也就是该算法不会直接从整体考虑问题,而是想要达到局部最优。只有内部的子问题求得最优解,才能继续解决包含该子问题的下一个子问题,所以前一个子问题的最优解会是下一个子问题最优解的一部分,重复这个操作直到堆叠出该问题的最优解。贪心算法最关键的部分在于贪心策略的选择,贪心选择的意思是对于所求问题的整体最优解可以通过一系列的局部最优选择求得。而必须注意的是,贪心选择必须具备原创 2020-06-03 09:36:00 · 1358 阅读 · 0 评论 -
请查收这份“位运算”的装Bi指南
运算可谓是与编程息息相关,我们编写的每一个程序可能都带有加减乘除,当然这是最基础的运算了。在大一下的时候学了第一门编程语言C,随着也学到了取余(%)和三目运算符(? :),当时就觉得(? :)真的NiuBi,但在编程时却很少用到,因为if和else已经刻在我的脑子里。不同语言中的运算符也会有一些偏差,像Python中的整除(//)是C中没有的,C中的三目运算符在Python中也有着不同的表现形式,比如np.where和if、else组合。下面介绍个人认为比较高大上的位运算符,说它高大上很大一方面是因为位原创 2020-05-22 10:57:58 · 562 阅读 · 0 评论 -
回溯法、分支限界法两种思想帮你轻松搞定旅行售货员问题(TSP)
问题描述某售货员要到若干城市去推销商品,已知各城市之间的路线(或旅费)。要选定一条从驻地出发,经过每个城市一遍,最后回到驻地的路线,使总的路程(或总旅费)最小。本文只考虑4个城市的情况,下面这个带权图即为问题的转化。由于只有4个城市,如果规定售货员总是从城市1出发,那么依据排列组合可以得到6种不同的旅行方案,比如12341、13241等等。在这些排列组合基础上可以很容易绘制出一棵排列树,也是该问题的解空间树,排列树如下:根据解空间树可以得到一些有用的信息:该树的深度为5两个节点之间路径上的标原创 2020-05-18 09:20:39 · 6178 阅读 · 2 评论 -
别再暴力匹配字符串了,高效的KMP才是真的香!
如果你想了解KMP算法,请静下心读完这篇文章,一定不会辜负你的时间暴力匹配(BF)字符串匹配是我们在编程中常见的问题,其中从一个字符串(主串)中检测出另一个字符串(模式串)是一个非常经典的问题,当提及到这个问题时我们首先想到的算法可能就是暴力匹配,下面的动图就展示了暴力匹配的流程。上图中箭头指向的字符都为蓝色时代表二者匹配,都为黑色时代表二者不匹配,红色则代表在主串中找到模式串。这种算法大致思路就是每当模式串和主串中有字符不匹配,模式串与主串对应的位置整体向后移动一位,再次从模式串第一位开始比.原创 2020-05-11 09:51:56 · 3482 阅读 · 11 评论 -
LeetCode小白入门——简单题目八题合集,每题两解
本文共包括八个题目,来源于LeetCode简单难度,每个问题会给出两种解法,第一种偏暴力、易理解一些,第二种会更加高效一些,尽可能会避免利用Python的内置函数,便于真正理解算法原理。来源:LeetCode(力扣)链接:https://leetcode-cn.com/problemset/all/?difficulty=%E7%AE%80%E5%8D%951.两数之和题目描述:给定一...原创 2020-05-06 09:20:23 · 1881 阅读 · 0 评论