![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法精选
文章平均质量分 84
rebornyp
人生如狗翁之马
展开
-
编程之美-翻烙饼问题
翻烙饼问题前言 翻烙饼问题是非常经典的问题,星期五的晚上,一帮同事在希格玛大厦附近的“硬盘酒吧”多喝了几杯。程序员多喝了几杯之后谈什么呢?自然是算法问题。有个同事说: “我以前在餐馆打工,顾客经常点非常多的烙饼。店里的饼大小不一,我习惯在到达顾客饭桌前,把一摞饼按照大小次序摆好——小的在上面,大的在下面。由于我一只手托着盘子,只好用另一只手,一次抓住最上面的几块饼,把它们上下颠倒个个儿,反原创 2017-12-23 14:41:08 · 1749 阅读 · 0 评论 -
算法时空-超过一半的众数问题
文章目录1. 超过一半的众数问题2. 超过1/3的两个数?1. 超过一半的众数问题将一个集合里出现超过一半的次数的数叫众数,那么如果集合里一定存在众数的情况下,如何得出该数字呢?思路分析:利用众数出现次数过半,必然能和非众数一一抵消后依然留在所谓的“蓄水池”,所以,最后留在蓄水池的必然是众数;int main() { int a[10] = {2,4,2,-7,5,2,2,...原创 2019-01-08 11:20:31 · 419 阅读 · 0 评论 -
算法时空-最大子数组问题
最大子数组问题给定数组,求算其中的最大子数组,要求返回最后的最大子数组的左下标 l 和右下标 r ,以及最大和 s ;思路1:暴力解决,O(n^2)复杂度,这里具体就不用代码实现;思路2:使用分治法,通过假定最大子数组处于左边,中间和右边,来最终得出准确的结果;思路3:使用动态规划算法,最常用的高效算法;代码实现1. 分治法int main() { int a...原创 2019-01-07 17:40:58 · 374 阅读 · 0 评论 -
算法时空-乐高积木问题
原创 2019-01-05 12:57:59 · 1399 阅读 · 0 评论 -
平面凸多边形和空间凸包络体算法整理
最近毕设项目中用到了最大包络体求算算法,在这里进行简单的整理,为了以后更好的理解。准备知识关于点的定义//空间上任何一个点信息struct Point { double x, y, z; Point(){} Point(double xx,double yy,double zz):x(xx),y(yy),z(zz){} //两向量之差 Point operat...原创 2018-12-10 17:06:16 · 3256 阅读 · 0 评论 -
二叉树的非递归遍历算法
看了一篇博客上对二叉树的非递归遍历的总结,非常不错,记录一下; /** 非递归实现前序遍历 */ protected static void iterativePreorder(Node p) { Stack<Node> stack = new Stack<Node>(); if (p != null) { ...转载 2018-08-15 10:49:12 · 277 阅读 · 0 评论 -
面试算法准备
算法准备排序小结插入排序 插入排序从前往后遍历,默认前面都是已经排好序了,找到没排好序的那位数字往前查找,如果找到一个比它大的就往后挪一位,直到某一位不符合条件了,就把这一位后面的那个数的值置为该数。代码实现://插入排序 void insert(vector&amp;amp;amp;amp;lt;int&amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;v) { int len原创 2018-08-06 15:18:58 · 1159 阅读 · 0 评论 -
背包问题
01背包问题 0-1背包,最简单的背包问题 包裹里能装N件物品,每一件价值Wi,耗费Ci,总耗空间不超过V,求W的最大值; 状态转移方程:F[i, v] = max{F[i-1, v], F[i-1, v-Ci] + Wi}; 如何理解状态转移方程?F[i, v]表示面对前i件物品,容量为v的背包中可获得的最大价值; private static void ...原创 2018-03-06 21:45:36 · 188 阅读 · 1 评论 -
《算法》-4.4-最短路径
最短路径所谓的最短路径算法,当然得是图中的一个顶点s到另一个顶点w的最短路径,这个w可以是图中的任意的顶点,当然可能并不是所有点都满足存在最短路径,最短路径的存在是需要条件的,其实这个最短即为最优解,所有的最优解问题如果解有限,那么都可以通过枚举来找到最优的那个解,如果解无限而且不能剪枝呢?在无限的解里还存在更优解?那么最短路径问题就是无解的,具体来看,我想大家很容易想到,那就是如果图中存在环原创 2018-01-12 12:08:59 · 390 阅读 · 0 评论 -
二叉搜索树常用算法(创建,遍历,插入,删除)
二叉搜索树 定义:二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值; (3)左、右子树也分别为二叉排序树; 代码实现二叉搜索树的创建查找算法节点插入最大值查找最小值查找节点删除package useful;im原创 2017-08-08 09:09:02 · 600 阅读 · 0 评论 -
动态规划解N个矩阵链乘问题
矩阵链乘两个矩阵A(p, q),B(q, r)相乘,p,q分为A矩阵的行列数,q,r分为B矩阵的行列数。伪代码实现如下let C be a new Matrix(p, r) for i = 1 to p for j = 1 to r C[i][j] = 0; for k = 1 to q C原创 2017-08-12 23:25:47 · 1043 阅读 · 0 评论 -
动态规划-斐波那契数列求算
最近在看《算法导论》视频,就顺手实现了下斐波那契数列求算:先上基本解法,几乎是小白闭着眼都能写出的代码:为了不产生指数级别的时间复杂度,只需要将中间过程中计算的斐波那契数列数值都记录下就可,改进代码如下:/** * 斐波那契数列的实现类 * @author Gastby * */public class FormatTest { /** * 哈希表用来存放中间生成的的原创 2017-08-11 21:51:12 · 729 阅读 · 0 评论 -
归并排序算法
归并排序(Merge Sort)算法实现 java实现归并排序算法,非常基础的一个算法,先明白分治法的主要思想,分而治之,然后再统一起来完成剩下的操作,最后完成排序,内部需要用到额外的存储空间,时间复杂度是O(nlg(n)); 归并排序分为两种,一种是自顶向下的,另一种是自底向上的;两种排序方法虽然都是归并排序,但是实现方式却大不一样;自顶而下的归并排序代码实现...原创 2017-03-22 22:52:01 · 484 阅读 · 0 评论 -
《算法导论》-快速排序
快速排序最近和朋友聊天,聊到企业面试时考了一道链表的快排,这道题在leetcode上也刷到过,而且对于数组的快排,真是从大学到研究生一直都要求必须掌握的重点知识,然而自己不断的思考,却发现所谓的快排,比我以前想象的要复杂的多,因为快排的思想非常干练,但是形式,或者说具体实现千变万化,为了达到万变不离其宗,笔者决定好好探究下它的各种实现,以下是笔者反复测试的过程。首先翻开《算法导论》,里原创 2017-11-12 19:54:50 · 480 阅读 · 0 评论 -
《算法》-1.5-并查集算法
并查集(union-find)算法并查集算法真的是简单却又非常实用的一种算法,要想理解这个算法可以用一个非常生动的例子说明,叫解密犯罪团伙,这是从《啊哈算法》看到的,讲解的非常生动形象。在一堆数量为n的犯人里,如果n1和n2是团伙,n2又和n3是一伙,诸如此类的线索还有很多,问你,这n个人里有多少个犯罪团伙?其实还有个例子可以非常清楚到位的概括这个模型,那就是平面上有n个点,给定一条边既可以将原创 2018-01-13 21:23:39 · 1400 阅读 · 0 评论 -
《算法》-4.3-最小生成树
最小生成树定义 定义:图的生成树,是它的一颗含有其所有顶点的无环连通子图,一幅加权无项图的的最小生成树(MST)是它的一颗权值(树中所有边的权值之和)最小的生成树。事实上,通过对于最小生成树的理解,我们可以很容易得出以下结论:最小生成树求解过程中要求图中必然只含有一个连通分量;图的边的权值可以为0或者是负值;最小生成树必然是无环的类树结构对于含n个顶点的图而言,最原创 2018-01-11 17:33:57 · 375 阅读 · 0 评论 -
《算法》-2.4-优先队列以及堆排序
优先队列 很多数据,我们并不需要保证他们全部有序,或是一次就把他们全部排序完成。我们可能很多时候仅仅是需要知道这些数据中最大的那一个,或者是最大的或者最小的前k个数据,对于这样的要求,如果我们还只是一味的全部对所有数据排序处理势必将浪费大量的时间,为了提高效率,优先队列这样的数据结构就诞生了。优先队列我们可以使用基于链表存储的形式进行构造,也可以采用数组进行存储的形式构造,在这里...原创 2018-01-11 16:00:05 · 286 阅读 · 0 评论 -
算法时空-随机化分析算法
文章目录概率分析与随机化算法1. 指示随机变量2. 雇佣问题3. 随机化算法3.1 随机排布数组3.2 洗牌算法4. 生日悖论概率分析与随机化算法1. 指示随机变量记某件事为A,定义Xa = I{A}为事件A的指示变量,并且其取值只能为0或者是1;0表示A事件未发生,1表示A发生;样本空间 N = {n1, n2, n3…};记为所有的样本情况;可得出引理:E[Xa] = P{A} ...原创 2019-01-08 16:15:35 · 397 阅读 · 0 评论