随笔分类 - [41]Algorithm算法
-
LeetCode:Copy List with Random Pointer
摘要:LeetCode:Copy List with Random Pointer题目地址:here题目大意:深拷贝一个链表,链表除了含有next指针外,还包含一个random指针,该指针指向字符串中的某个节点或者为空。节点定义为:struct RandomListNode {int label;RandomListNode *next, *random;RandomListNode(int x) : label(x), next(NULL), random(NULL) {}};假设原始链表如下,细线表示next指针,粗线表示random指针,没有画出的指针均指向NULL:算法1:我们在构建新链表的 阅读全文
-
ACM STUDY
摘要:ACM学习穷举算法思想: 一句话:就是从所有可能的情况,搜索出正确的答案。步骤: 1.对于一种可能的情况,计算其结果。 2.判断结果是否满足,YES计算下一个,no继续步骤1,然后判断下个可能的情况。实例: 孙子算经--鸡兔同笼:头35,脚94,几鸡几兔? #include //头文件using namespace std;int qiongju(int head, int foot , int *chicken,int *rabbit) //穷举算法{ ... 阅读全文
-
洗牌算法
摘要:洗牌算法汇总以及测试洗牌程序的正确性洗牌可以抽象为:给定一组排列,输出该排列的一个随机组合,本文代码中均以字符数组代表该排列算法1-算法3 都是在原序列的基础上进行交换,算法空间复杂度为O(1)算法1(错误):随机交换序列中的两张牌,交换n次(n为序列的长度),代码如下: 1 void Shuffle_randomSwap(char *arr, const int len) 2 { 3 for(int i = 1; i = 0; i--) 4 { 5 int a = rand()%len; 6 int temp = arr[i]; 7 ... 阅读全文
-
一种最坏情况线性运行时间的选择算法 - The missing worst-case linear-time Select algorithm in CLRS.
摘要:一种最坏情况线性运行时间的选择算法 - The missing worst-case linear-time Select algorithm in CLRS.选择算法也就是求一个无序数组中第K大(小)的元素的值的算法,同通常的Top K等算法密切相关。在CLRS中提到了一种最坏情况线性运行时间的选择算法,在书中给出了如下的文字描述(没有直接给出伪代码)。1.Divide n elements into groups of 52.Find median of each group (How? How long?)3.Use Select() recursively to find media. 阅读全文
-
算法打基础——线性时间排序
摘要:算法打基础——线性时间排序这一节主要讲线形时间排序的算法,主要的知识点是:1. 基于比较的排序的下界及分析 (两种线性排序算法)2.计数排序 3.radix排序1. 基于比较的排序的下界及分析前面介绍了很多用于排序的算法(merge sort,quicksort,insertion sort等),目前这些算法最小的时间复杂度就是Θ(nlogn).事实上,这些基于比较的排序算法最差情况下最好的时间复杂度就是O(nlogn).这点是可以通过决策树来帮助我们分析证明的。决策树这个东西,学过人工智能之类的应该就很熟悉了,就是根据元素比较的不同情况往不同分支走,然后树将所有可能的情况都包括进去。举一个. 阅读全文
-
移除链表中重复元素
摘要:[google面试CTCI] 2-1.移除链表中重复元素【链表】Q:Write code to remove duplicates from an unsorted linked list FOLLOW UP How would you solve this problem if a temporary buffer is not allowed?题目:编码实现从无序链表中移除重复项。 如果不能使用临时缓存,你怎么编码实现?解答:方法一:不使用额外的存储空间,直接在原始链表上进行操作。首先用一个指针指向链表头节点开始,然后遍历其后面的节点,将与该指针所指节点数据相同的节点删除。然后将该指针后移 阅读全文
-
哈夫曼(Huffman)编码
摘要:哈夫曼(Huffman)编码在学习二叉树时看到关于哈夫曼编码的一些描述,兴趣来潮,自己写一个算法。哈夫曼算法使用二叉树以令人惊讶的方式来压缩数据,以提高数据传输的效率和时间。只有知道哈夫曼编码而不会写代码的童鞋们才会在网上搜代码,故在这里对哈夫曼编码不做过多介绍。 实现哈弗曼(Huffman)算法的编码(Encode)与解码(Encode). 分为以下四步来完成这项编码 1.Create a Huffman tree for this message. 2.Create a code table. 3.Encode the message into binary. 4.Decode th... 阅读全文
-
最长回文
摘要:最长回文字符串回文串就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。回文子串,顾名思义,即字符串中满足回文性质的子串。比如输入字符串 "google”,由于该字符串里最长的对称子字符串是 "goog”,因此输出4。1.问题解决的基本方法分析:可能很多人都写过判断一个字符串是不是对称的函数,这个题目可以看成是该函数的加强版。要判断一个字符串是不是对称的,不是一件很难的事情。我们可以先得到字符串首尾两个字符,判断是不是相等。如果不相等,那该字符串肯定不是对称的。否则我们接着判断里面的两个字符是不是相等,以此类推。/* *作者:侯凯 *说明:求 阅读全文
-
Scrum与高效能人士
摘要:Scrum与高效能人士的执行4原则分享了高效能人士的执行4原则,发现它和Scrum非常相近,可以形成互补。Scrum框架:高效能人士的执行4原则框架:Scrum与4原则Sprint Backlog VS. 聚焦最重要目标Sprint Backlog:Sprint代办事项列表是一组为当前Sprint选出的产品代办事项列表条目,外加交付产品增量和实现Sprint目标的计划。聚焦最重要目标:要事第一,全神贯注。“如果其他各个方面都保持现有状况的话,改进哪一个方面才能给我们带来最大收益?”Product owner在plan meeting中要给出Sprint Backlog的唯一排序,整个团队按照优 阅读全文
-
优化算法-BFGS
摘要:优化算法-BFGSBGFS是一种准牛顿算法, 所谓的"准"是指牛顿算法会使用Hessian矩阵来进行优化, 但是直接计算Hessian矩阵比较麻烦, 所以很多算法会使用近似的Hessian, 这些算法就称作准牛顿算法(Quasi Newton Algorithm). 1. 牛顿算法(Newton Algorithm) 牛顿算法考虑了函数的二阶单数, 是一种二阶优化方法, 并且是所有其他二阶优化方法的鼻祖. 作为对比, 梯度下降(Gradient Descent)只考虑了函数的一阶导数, 是一阶优化方法. 推导过程: 我们考虑函数的二阶泰勒展开式:fquad(θ)=fk+gT 阅读全文
-
红黑树LLRB
摘要:LLRB——红黑树的现代实现一、本文内容以一种简明易懂的方式介绍红黑树背后的逻辑实现2-3-4树,以及红黑树的插入、删除操作,重点在2-3-4树与红黑树的对应关系上,并理清红黑树相关操作的来龙去脉。抛弃以往复杂的实现,而分析红黑树的一种简单实现LLRB。二、算法应用红黑树,给人以强烈的第一听觉冲击力——红与黑,好像很高端的感觉。事实上的确如此,红黑树是一种高级数据结构,在C++、Java的标准库里作为set、map的底层数据结构实现,以及linux中进程的公平调度。三、2-3-4树标题是红黑树,为什么讲2-3-4树?因为红黑树就是2-3-4树的一种等价形式,更准确地来说,我们用红黑树来完成2- 阅读全文
-
求比指定数大且最小的‘不重复数’问题
摘要:对Alexia(minmin)网友代码的评论及对“求比指定数大且最小的‘不重复数’问题”代码的改进 应Alexia(minmin)网友之邀,到她的博客上看了一下她的关于“求比指定数大且最小的‘不重复数’问题”的代码(百度2014研发类校园招聘笔试题解答),并在评论中粗略地发表了点意见。 由于感觉有些看法在评论中无法详细表达,也由于为了更详细地说明一下我的算法:求比指定数大且最小的“不重复数”问题的高效实现博文中没有说清楚的一些想法,并给出这个问题更加完美的代码,故制此文。欢迎Alexia(minmin)网友和其他网友指正。 Alexia(minmin)网友在其博文中对其算法思想描述得很清... 阅读全文
-
螺旋队列问题
摘要:[interview]螺旋队列问题摘要本文主要讲解三种螺旋队列的实现方式和打印输出:从中心往外端顺时针旋转,记为『外螺旋队列』从左顶点开始,绕剩下的最大圈顺时针往内旋转,记为『内螺旋队列』从左顶点开始,之字形旋转(只能同行同列地移动),记为『 』螺旋队列』从左顶点开始,之字形旋转(只能沿-45°斜线移动),记为 『/ 螺旋队列 』前三个螺旋队列图示如下:1. 外螺旋队列通过几个标记位,来确定其他值的大小,由这两个值再来确定其他值,首先,我们可以确定这个值的大致范围: maxAbs=max{ fabs(r),fabs(c)},这样这个值就在 (2maxAbs-1)2~(2maxAbs+ 阅读全文
-
杂题3道
摘要:随笔 - 275, 文章 - 0, 评论 - 1122, 引用 - 0Hibernate:有了 save,为什么还需要 persist?目录背景官方注释测试分析备注背景返回目录万物皆自然,每个 API 的设计,无论是否正确,都有其意图。因此,在学习某些框架的时候,我们需要经常思考:这个 API 的设计意图是啥?本文来探讨一下 Session 中 persist 的设计意图。官方注释返回目录save 1 /** 2 * Persist the given transient instance, first assigning a generated identifier. (O... 阅读全文
-
粒子群算法
摘要:自话粒子群算法(超简单实例)简介 上次在自话遗传算法中提到后期会写两篇关于粒子群算法和蚁群算法的博文,所以这次给大家带来的是我对粒子群的一些理解,并附带一个相当简单的实例去描述这个算法,我会尽力通俗易懂的把整个算法描述一遍,其实粒子群算法的思想也挺简单的,希望我不要反而写复杂了,下面同样引用百度百科的摘要结束简介部分。 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在 阅读全文
-
有序数组的连接问题
摘要:有序数组的连接问题1.前言 昨天碰到一道关于如何解决有序数组的连接问题,这是一个很常见的问题。但是这里要考虑到代码的效率问题,因为要连接的数组都是有序的,这是一个非常重要的前提条件。2.简单但效率不高的算法我首先想到的是使用内置的concat方法,然后再对其进行排序,这种方法完全没有考虑到数组是有序的前提条件,代码如下:?functionconcatSort(arrA,arrB){returnarrA.concat(arrB).sort();} 为了弄清楚sort排序到底使用的是什么算法,特地到看了V8引擎的算法(链接:这里),大概意思是当数组的长度较短的时候使用的是插入排序(Insert.. 阅读全文
-
分治算法的时间复杂度研究
摘要:[大整数乘法]分治算法的时间复杂度研究开篇最近研究分治算法,对大整数算法(包括加减乘数)、strassen矩阵乘法、合并排序的优化、线性时间选择和最接近点对问题学习了一下。这篇文章主要是关于大整数乘法算法复杂度的研究。本人菜鸟,本科就读北京一工科院校土建专业,现就读北京一所二流985的计算机研究生。希望在这里分享和学习,如有错误还请多多指点!正文一,引入问题在某些情况下,我们需要计算很大的整数,它无法在计算机硬件能直接表示的整数范围内进行处理,如果用浮点数则会有精度问题,这就必须用软件的方法来实现大整数的算术运算。二,大整数乘法的分治解决方案2.1原始低效算法我们将n位(为方便讨论简化问题,我 阅读全文
-
最长不重复子串
摘要:最长不重复子串题目描述: 最长不重复子串(Longest No Repeat String,LNRS)就是从一个字符串中找到一个连续子串,该子串中任何两个字符都不能相同,且该子串的长度是最大的。分析:解法一:动态规划 动态规划就是用来解决这种最优化问题,关于字符串的很多有趣的问题如最长公共自序列,最长上升子序列等都可以用动态规划来解,这道题我的第一想法也是动态规划。 动态规划的核心在于寻找最优子结构,对于一个字符,如果他与他前面的最长不重复子串都没有相同的字符,那么他也可以加入这个子串中,构成一个新的子串。即对于字符数组a[],dp[i]表示以a[i]为结尾的最长不重复子串长度,dp[... 阅读全文
-
generating permunation
摘要:generating permunation——全排列(算法汇总)#include #include #include #include #include #include #include using namespace std;#define MAX 10int used[MAX]; //用来标记数字是否已经在前面使用过int result[MAX]; //存放结果int array[MAX] = {1,2,3,4,5,6,7,8,9,10};void swap(int x, int y){ int temp = array[x]; arra... 阅读全文
-
弹出框页面中使用jquery.validate验证控件
摘要:弹出框页面中使用jquery.validate验证控件有几个问题需要解决:1,弹出框的提交事件完成后如何关闭弹出框页面?2,提交不成功如何返回当前页?3,如果知道验证事件成功?之前笔者都是JS验证控件,放着强大的jquery.validate控件不用,自己写验证,会是让追求程序完美的人心里有种淡淡的忧伤。不过还好,今天下午笔者花了点时间,已实现这种功能,虽然也不是很完美,但也基本能用了。先看下效果,一会再上代码。当验证通过后,程序后台开始提交,提交成功,当前弹出框关闭。为此代码如下。1,打开弹出框。 function AnswerDialog(id) { $... 阅读全文