
算法
frank909
爱阅读的程序员,专注于技术思考和分享。关注架构设计、Android 开发、AI、数学、自动驾驶领域,个人公号:Frankcall
展开
-
程序员的数学--用贝叶斯定理来推断一个案子
贝叶斯讲什么呢?先抛出一个问题:我有一个同事年不群,请问他是正人君子的可能性有多大?因为可能性是个主观感受,没有办法量化,所以在数学中一般会问年不群是正人君子的概率有多高?初看无从下手,但其实也有套路可循。先给一个假设然后观察验证和修改得到相对靠谱的结果比如,我们具体可以先这样做:假设他是正人君子的概率是 0.5寻求证据,证明他是正人君子或者否修正之前的假设概率得到最终概率你看看,这实际和我们的日常生活也差不多,贝叶斯定理正好可以解决如此问题,不过它是数学工具。什么是贝原创 2020-08-17 10:38:00 · 10729 阅读 · 2 评论 -
作为技术面试官,我在面试时考虑什么?
最近一段时间,公司大量进行校招,团队也需要很多社招的岗位,作为某个领域的技术负责人,我也因此经常电话面试和现场面试。求职者每次可能会事后反思,我这次到底表现如何,下次怎么样才能改进。作为一个面试官,我们也需要这样,我也会经常总结和反思自己的面试技巧,现分享如下,希望求职者能有反向的思维,下次面试成绩能更好。机会是留给有针对性准备的人的我觉得是这是最重要的一点,很多人可能觉得同伴和同学跟你差...原创 2019-10-21 10:46:36 · 21290 阅读 · 56 评论 -
【小算法】二分图匹配之匈牙利算法详解(图例说明,代码亲测可用)
在软件开发领域,任务指派和数据关联是一种常见业务需求,比如买卖订单的匹配,共享出行的人车匹配,及自动驾驶领域中目标追踪。这都牵扯到一种技术,那就是数据关联,而匈牙利算法就是解决此类问题最典型的算法,也是今天本文的主题。我们感性的认为目标之间的匹配好像一目了然的样子,但是计算机可不这样认为。计算机是理性的,如果要处理问题,一般我们会用数据结构来表示数据,栈、队列、树、图都很常用。上面的形式,...原创 2019-10-10 11:22:15 · 4591 阅读 · 2 评论 -
【小算法】图的遍历之广度优先(BFS)
谈到算法,图的操作是避免不了。而我们一般谈到图时,又必定会谈到图的遍历。图的遍历通常有 2 种,深度优先(DFS) 和广度优先(BFS)。深度优先可以阅读我这篇博文:【小算法】图的遍历之深度优先(DFS)本篇博文讲解广度优先(BFS)。图的表示图有两种表示方式1. 临接矩阵其实就是一个权重矩阵,用 1 代表两个结点有连接,0 表示没有连接,这样的表示方式通俗易懂,特别适合稠密图...原创 2019-09-29 00:12:02 · 2625 阅读 · 0 评论 -
【小算法】图的遍历之深度优先(DFS)
谈到算法,图的操作是避免不了。而我们一般谈到图时,又必定会谈到图的遍历。图的遍历通常有 2 种,深度优先(DFS) 和广度优先(BFS)。本篇博文讲解深度优先(DFS)。图的表示图有两种表示方式1. 临接矩阵其实就是一个权重矩阵,用 1 代表两个结点有连接,0 表示没有连接,这样的表示方式通俗易懂,特别适合稠密图,也就是大多数结点是亮亮连接的情况。2. 临接表用一个数组储存...原创 2019-09-27 18:19:43 · 3465 阅读 · 0 评论 -
【小算法】二分查找
谈论算法,典型的问题除了排序,还有查找。查找就是,从一个数据集合中查找某个数,如果找到了就返回该数据在数据集中的索引,否则返回 -1。最简单的方法就是从头到尾依次查找。但这有个问题,顺序查找时间复杂度是O(n)O(n)O(n),如果要从 1 亿个数据中查找某个数,最坏的情况要查找 1 亿次。那么有没有更快速的算法呢?答案是有的,这篇文章讲的二分查找就是这样一种,它的时间复杂度是O(log...原创 2019-09-04 16:08:46 · 1531 阅读 · 0 评论 -
【小算法】插入排序
插入排序也是一种非常容易理解的算法,核心思想就是每次将新的元素往原本有序的数组中插入。算法思路假设有下面一组数据,需要从小到大升序排列。插入排序的算法是1. 进行多轮迭代。2. 每一次迭代的前提是将当前的数值插入到前面已经排序好的子数组当中。也许描述有写抽象,但用显示当中玩扑克牌的经验可以很好地类比插入排序。比如你手里已经有一堆牌。5、6、J、K如果你再抓到一张 9,那...原创 2019-08-29 16:34:36 · 1892 阅读 · 0 评论 -
【小算法】冒泡排序
冒泡排序是大多学人学到的第一个排序,教科书上在众多的排序算法中选择它作为示例,我想还是因为它够简单,易于理解吧。假设有下面一组数据,需要从小到大升序排列。冒泡排序的算法是1. 从左到右,依次比较相邻两个位置的数据,如果左边的数值较大,就交换它们,这样在单轮操作中,最大的数会交换到最右边。2. 重复多轮操作,重复的次数和数组的长度相同。3. 排序完成。冒泡排序的过核心思想就是 交换。...原创 2019-08-26 20:32:32 · 1428 阅读 · 0 评论 -
【小算法】快速排序
快速排序是一种运用非常广的算法,但不是那么好理解。假设有下面一组数据,需要从小到大升序排列。快速排序的算法是1. 确定不用排序的条件2. 确定每次排序时,选择排序的基准值(pivot)3. 排序依据,将当前数组中,所有比 pivot 大的数值存放到新的数组 right 挪到右边,所有比 pivot 小的数值存放到一个新的数组 left 挪到左边,然后一起拼接起来。4. 利用递归思想,调...原创 2019-08-15 15:21:34 · 1903 阅读 · 2 评论 -
【小算法】选择排序
选择排序是一种非常容易理解的算法。算法思路假设有下面一组数据,需要从小到大升序排列。选择排序的算法是1. 创建一个列表或者数组2. 第一次遍历数组,找出最小的一个数存放在新的数组中。3. 第二次遍历数组,找出次小的数存放在新的数组。4. 重复类似操作,直到所有的数据排列完成图例示意:Python 代码演示:def sort(srcArr): dstArr = ...原创 2019-08-06 11:49:48 · 1523 阅读 · 3 评论