算法
文章平均质量分 65
realmagician
http://www.43h5.com/
展开
-
编程之美4.2 瓷砖覆盖
参考:http://blog.csdn.net/hopeztm/article/details/7841917用1*2的瓷砖覆盖N*M的地面。这是一道状态变换的动态规划。考察地面的i行,如果j列上有瓷砖就设(i,j)为1,如果没有瓷砖就设为0。设为0就表示要在(i,j)和(i+1,j)铺竖瓷砖。则最后一行必须全是1。因此可以设一个数组dp[N][2^M-1]记录每一行每种状原创 2013-04-17 22:12:19 · 924 阅读 · 0 评论 -
一分钟了解pagerank最基本原理
这里介绍下pagerank算法的最最最最最基本的原理pagerank是搜索引擎中对网页进行排序的一种算法,更准确的说是给网页分配权重用的。该算法由google的两大boss佩奇和布林发明。每个网页中会有很多超链接,之类的。当然随着js技术的发展,网页中的链接不会全是在中给出。提取网页中的链接也是网络爬虫的最重要组成部分之一,可以用机器学习的方式等。一个网页的权重由指向该网页原创 2013-12-22 14:14:16 · 1270 阅读 · 0 评论 -
微软面试题:求两升序排序数组两两数字之和中,最小的k个值
题目:有两个升序数组a[n]、b[n],求a[i]+b[i]中和最小的k个。解答:对于数组a[n],b[n],和最小的必然是a[0]+b[0],那么第二小的必然是a[1]+b[0]和a[0]+b[1]中较小的。若较小值是a[1]+b[0],则第三小的必然是a[0]+b[1]、a[1]+b[1]、a[2]+b[0]中最小的。将a[0]+b[1]、a[1]+b[1]、a[2]+b[0]和对原创 2013-11-23 16:57:26 · 1388 阅读 · 0 评论 -
拼图游戏可解性判断,自动生成可解拼图
拼图游戏都玩过,对于一个n*m的拼图游戏,我们将按照从左到右,从上到下的顺序给每个分格标注,可得一个二维矩阵。以3*3为例,标注结果如:0 1 23 4 56 7 8我们假设最大值为空白。即游戏时的样子是这样的:0 1 23 4 56 7 但是不是所有的拼图都是有解的。可解:6 2 14 7 50 3 8无解:4 2 18 3 65原创 2013-12-18 15:02:56 · 10413 阅读 · 2 评论 -
面试题:元素为32位整数的数组中只有一个数字出现2次,其余都是出现3次,求这个数
http://blog.renren.com/blog/944770783/727850263?bfrom=01020340100以上是原文地址,我加了点注释而已。。def special(lst): ones = 0 twos = 0 for x in lst: twos |= ones & x #等于转载 2013-11-22 15:18:03 · 1561 阅读 · 0 评论 -
最大流问题
对最大流问题比较感性的认识,要看证明还是要看算法导论的相关章节。最大流问题:给定一个有向图,一般情况下边的值为整数,定义不直接相连的节点间的边值为0,如果有节点i和j直接由多条边,则将这些边合并为一条,值取和。则若i到j有边,则j到i的边为0,这些边称为反向边。定义其中的两个点位源点和汇点,则这个有向图可以视为流网络。网络中的有向边的值表示可以通过该边的最大流量,最大流问题就是求从源点出发,流进汇点的最大流量。为了求最大流,必须了解残余网络,增广路径,反向弧等概念。原创 2013-09-11 15:42:45 · 1432 阅读 · 0 评论 -
树的非递归便利,中序和后序
把递归转成非递归的基本思想是用栈保留临时状态。对于先序遍历很简单,对于中序和后序遍历要稍微麻烦点。分析中序的过程:对于当前节点,如果有左子树,说明不是当前应该访问的节点,应该入栈然后考察其左子树,否则就在出栈的过程中访问该节点。如果访问了当前节点后,其有右子树,则应该访问其右子树后,再访问其父节点,因此要优先考察右节点。分析后序的过程:对于当前节点,如果有左子树,同中序。如果出栈后没有右子原创 2013-09-03 16:54:49 · 849 阅读 · 0 评论 -
10月20日,baidu广州站笔试算法题(其中之一):
假设一个大小为100亿个数据的数组,该数组是从小到大排好序的,现在该数组分成若干段,每个段的数据长度小于20「也就是说:题目并没有说每段数据的size 相同,只是说每个段的 size 」,然后将每段的数据进行乱序(即:段内数据乱序),形成一个新数组。请写一个算法,将所有数据从小到大进行排序,并说明时间复杂度。http://blog.csdn.net/v_july_v/article/detai原创 2013-08-27 10:59:10 · 878 阅读 · 0 评论 -
大数加法和大数乘法
想法极其简单。。。。没什么trickvoid reverseVector(vector &vec){ for(int i=0,j=vec.size()-1;i<j;++i,--j){ int t = vec.at(i); vec.at(i) = vec.at(j); vec.at(j) = t; }}vector addtwo(vector &num1,vecto原创 2013-08-22 15:59:14 · 705 阅读 · 0 评论 -
非递归的归并排序
const int LEN = 20;void MergeSort(){ int data[LEN]; int data2[LEN]; for(int i=0;i<LEN;++i){ data[i] = rand()%100; } for(int i=0;i<LEN;++i) cout<<data[i]<<" "; cout<<endl; int step = 1; fo原创 2013-08-21 16:19:55 · 581 阅读 · 0 评论 -
(半转载)Sunday算法(字符串完全匹配)
http://www.cnblogs.com/lbsong/archive/2012/05/25/2518188.html比KMP更容易理解的sunday算法,O(m+n),不用计算next数组,比KMP更快。A = "LESSONS TEARNED IN SOFTWARE TE";B = "SOFTWARE";先从左到右逐个字符比较,以我们的字符串为例:开始的时候转载 2013-05-04 16:17:18 · 728 阅读 · 0 评论 -
自动解决智能拼图,A*算法
接上一篇博客生成可解的智能拼图后(具体方法参见: http://blog.csdn.net/realmagician/article/details/17395035)就要想办法找到自动解决的办法。对于3*3的拼图游戏,有9!种排列方式,其中有一半是可解的。首先可以暴力搜索,采用dfs的策略,每次大概需要10W次移动,这是不可接受的。。再就是用A原创 2013-12-21 11:15:38 · 13296 阅读 · 4 评论