算法基础系列
对半独白
笔记是积淀的一种途径。
展开
-
算法基础篇(1)------概览
算法是计算机领域重要的基石。很多时候,算法用的巧往往可以缩减不少代码量,还能大幅缩减程序的时空复杂度。那么,基本算法有哪些?其具体实现思想又是如何?原创 2017-02-05 21:08:50 · 465 阅读 · 1 评论 -
算法基础篇(11)------平衡树
能够表达一定元素顺序的二叉树叫二叉搜索树。二叉搜索树通常能在O(logN)的时间复杂度下查找某些节点的元素值,但是其容易退化成一条链导致时间复杂度变成O(N)。为解决这个问题,平衡树就诞生了。那么平衡树是如何解决这个问题的?其具体实现逻辑又是如何?原创 2017-04-16 16:43:15 · 877 阅读 · 1 评论 -
算法基础篇(10)------匈牙利算法
匈牙利算法是匈牙利数学家Edmonds在1965年提出的,用于求解二分图的最大匹配问题。那么,什么是二分图最大匹配?匈牙利算法又是如何实现的?原创 2017-04-09 12:47:41 · 780 阅读 · 1 评论 -
算法基础篇(8)------最小生成树
最小生成树顾名思义,首先是一棵树,而“最小”的含义是指其边长之和最小,其常用算法有prim(普里姆)算法和kruskal(克鲁斯卡尔)算法两种。那么,最小生成树能解决什么问题?这两种算法分别是如何实现的?原创 2017-03-26 16:38:22 · 663 阅读 · 1 评论 -
算法基础篇(9)------并查集
并查集虽然算一个偏冷门的算法,但效率还是很高的。那么,并查集的应用场景如何?算法又是如何实现的?原创 2017-04-02 18:04:32 · 1034 阅读 · 1 评论 -
算法基础篇(6)------线段树
线段树顾名思义,节点由线段(通常指数组中的一段子数组,点可以看成线段的特殊形式)组成,主要用于高效解决连续区间的动态查询问题,比如求序列任意区间内的最大最小值。那么,线段树到底有何优势?又是如何实现的?原创 2017-03-12 19:41:12 · 713 阅读 · 1 评论 -
算法基础篇(7)------树状数组
树状数组顾名思义,是一个具有树结构的数组,思路十分巧妙。树状数组能解决的问题集合基本上是线段树的子集,之所以后讲,是因为与线段树相比,树状数组的时空效率更高,代码实现也更简单且容易理解。那么,树状数组为什么具有这些优势?其算法又是如何实现的?原创 2017-03-19 18:19:31 · 544 阅读 · 1 评论 -
算法基础篇(5)------最短路
最短路问题是生活中比较常见的问题了,比如交通运输规划、出行线路规划等,都需要用到最短路算法。那么常用的最短路算法有哪些?它们分别如何是实现的?原创 2017-03-05 19:52:07 · 1160 阅读 · 1 评论 -
算法基础篇(4)------贪心与动归
无后效性的贪婪,称为贪心算法;而全局贪婪,则称为动态规划。那么,贪心和动归的具体思想是什么?分别又是如何实现的?原创 2017-02-26 16:06:39 · 3023 阅读 · 1 评论 -
算法基础篇(2)------排序
基本算法中最最常用的算法,非排序莫属了。显现实生活中存在不少排序的例子:按高矮站队需要排序,考试分数需要排序,整理卷子编号需要排序,等等。那么常用的排序算法有哪一些?它们分别如何实现呢?原创 2017-02-12 21:07:45 · 895 阅读 · 1 评论 -
算法基础篇(3)------递归与分治
一段递归代码,通常是简洁抽象的。如果说循环是一种横向的顺序遍历,递归就是一种纵向的来回遍历。而分治则吸取了递归的精华,是一种高效的递归法。那么,递归和分治的具体思想分别是什么?原创 2017-02-19 17:17:07 · 1465 阅读 · 1 评论 -
算法基础篇(12)------理性
算法基础系列的讲解转眼间便迎来了尾声,话说这十二期似乎变成了一次OI培训。一些用户朋友不禁会问,在平时的工作之中,研发工程师接触工程较多,数据工程师接触大算法较多;而无论是研发还是数据,基本上鲜有用到这些基础算法的时候。既然如此,我们为什么需要去了解它们,尤其是在面试的时候还把它们当做考查的重点方面呢?抱着这个疑问,本文将从理性的角度出发,给基础算法正本清源,帮助大家理一理它的重要性。原创 2017-04-23 18:05:17 · 635 阅读 · 2 评论