Algorithm
文章平均质量分 83
iteye_14216
这个作者很懒,什么都没留下…
展开
-
二分查找之变型题目
二分查找算法在各个公司的笔试面试题大量出现,通常不是简单一眼就可以看出来的二分查找。我见过的一些变型,一种是有序的环形队列,不知道队头,另一种是有序数组循环移动得到的数组,这种变型无非是多绕了一个弯,多一次查找,首先二分查找到队头,最小元素/最大元素,然后再二分查找指定的元素。[code="cpp"]#include #include /* * Author: fuli...原创 2010-10-24 12:40:34 · 145 阅读 · 0 评论 -
金币问题
今年某公司的笔试题:一个矩阵地图,每一个元素值代表金币数,玩家从左上角一直走到右下角,每次只能向下移动一格或是向右移动无数格后向下移动一格。当元素值为-1时,玩家无法移动到此格。玩家每移动到一格就可以获取这一格的金币数,求获得最大金币数。很容易的一道动态规划题,动态转移方程m[i][j] = max{m[i-1][j] + a[i][j], m[i-1][k] + a[i-1][j] ...2009-11-09 08:41:13 · 773 阅读 · 0 评论 -
楼梯问题
hl给我的几道某公司的算法题: 1、有个 100 级的楼梯,你可以每次跨 1级或2级,问跨到100级总共有多少种跨法。 这个题目很容易写出递推式f(n) = f(n-1) + f(n-2),这个其实就是标准的斐波那契数列使用自底向上的递推的动态规划算法来避免重复计算:int fib(int n){ int f0 = 1,f1 = 1; int i;...2009-11-09 08:19:42 · 123 阅读 · 0 评论 -
一道考察模拟乘法的题目
今天hl和我讨论一道题目:写道整形数组如a={1,4,5}代表二进制数字1出现的位置(下标从右边开 始,0为第一个),即110010,也即十进制 x=2^1+2^4+2^5=50. 求 3*x=150的二进制表示里边,1的个数。如本题输出4.输入为整形数组如 a。注意算法性能的优化。 我感觉这道题目考察的就是模拟乘法,相对于acm常做的大数乘法的模拟算法要简单一些:int thre...2009-11-07 22:37:47 · 126 阅读 · 0 评论 -
链表归并
以前gx同学问的某某公司的笔试题,写一下练练(纯手写,没编译过),我也要找工作,准备一下笔试了:typedef struct Node { int data; struct Node *next;}Node;Node * merge(Node *pa,Node *pb){ Node *header; Node *p1; Node *p2; Node *p =...2009-11-07 21:40:05 · 66 阅读 · 0 评论 -
找出出现次数超过一半的数字
hl同学问我一道这个题,想了一种方法,感觉还是不错的,只扫描一次,贴一下伪代码:int more_than_half(int a[],int n){ stack<int> st; for(int i = 1; i < n; i++){ if(st.empty()){ st.push(a[i]); }else{ ...2009-11-07 21:23:31 · 104 阅读 · 0 评论 -
大数/高精度加减乘除取模[收藏]
[code="cpp"]#include #include using namespace std;inline int compare(string str1, string str2){ if(str1.size() > str2.size()) //长度长的整数大于长度小的整数 return 1; else if(...2009-04-16 19:38:20 · 385 阅读 · 2 评论 -
带重复数字的全排列
上次gx同学问我一道又重复数字的全排列的问题,我当时用set保存,然后直接回溯。这这种做法,效率比较低,没有去剪枝,从而像1,1,1,1,1这样的序列都需要回溯很多次。今天写了一个剪枝的。[code="java"]public class Permutation{ private int[] a; public Permutation(int[] a...2009-04-16 18:58:44 · 508 阅读 · 0 评论 -
差分约束系统
(本文假设读者已经有以下知识:最短路径的基本性质、Bellman-Ford算法。) 比如有这样一组不等式: X1 - X2原创 2009-04-15 16:00:58 · 303 阅读 · 0 评论 -
最大流Ford-Fulkerson算法
算法导论对最大流算法有很详细的介绍,今天实现了最大流Ford-Fulkerson的算法,包括BFS和DFS来搜索增广路径。[code="java"]import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;public class MaxFlow{ private...2009-04-22 17:33:04 · 260 阅读 · 0 评论 -
一个对字符串很好的Hash函数ELFHHash
#include<stdio.h>#define M 10000int ELFHash(char *key){ unsigned long h = 0; unsigned long g; while(*key){ h = (h<<4) + *key++; g= h & 0xf0000000L; if(g) h ^= g &g...2009-05-03 21:41:10 · 105 阅读 · 0 评论 -
一道笔试题(创新工厂)解法
一个帖子http://www.iteye.com/topic/790362的一个题目。 有两个长度分别为m,n的非递减 整型数组,其中n>m*m, 求这两个数组的交集,要求复杂度尽可能低 。 如数组a:-1,4,5数组b:-15,1,3,4,5,7,8,9,10,15结果应该是:4,5 这道题要充分利用n > m * m的条件,而无论是归并的方式,还是h...原创 2010-10-21 17:44:59 · 131 阅读 · 0 评论 -
Trie and suffix array
字典数Trie和后缀数组suffix array是处理字符串操作的有力工具。下面是ruby的实现: class Trie attr_accessor :value def initialize @children = Hash.new {|h,k| h[k] = Trie.new } end def []=(key,value) insert(ke...2010-04-13 20:54:34 · 88 阅读 · 0 评论 -
[zz]大数据量,海量数据 处理方法总结
大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯 这样的一些涉及到海量数据的公司经常会问到。 下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。下面的一些问题基本直接来源于公司的面试笔试题目,方法不一定最优,如果你有更好的处理方法,欢迎与我讨论。 1...原创 2010-08-27 22:24:58 · 79 阅读 · 0 评论 -
一个用DP求解的问题的分析
问题:Consider an arbitrary sequence of integers. One can place + or - operators between integers in the sequence, thus deriving different arithmetical expressions that evaluate to different values. Let ...2007-11-24 00:34:33 · 179 阅读 · 0 评论 -
有道难题以超低分晋级
有道难题比赛居然晋级了,可以领到一个t-shirt。2009-06-10 11:36:56 · 96 阅读 · 0 评论 -
逆序数/逆序数对
逆序数是个常遇到的问题,主要有两种解法:O(n^2)的方法:[code="cpp"]int reverse(int a[],int n){ int count = 0;//逆序数 for(int i = 0; i < n; i++){ for(int j = i + 1; j < n; j++){ if(a[i] > a[j]) count++; ...2009-06-09 23:17:43 · 155 阅读 · 0 评论 -
有道难题topcoder
今天做了有道topcoder的题目,也是第一次在topcoder做题,弄了半天才知道怎么回事,比赛已经结束,可以说一下题目了,开始准备在linux下用c++写,结果开始做题发现题目在linux下有乱码,就又换到windows下做,由于windows下没有很好的编译器,就打开eclipse用java开编,题目很简单,我基本过了样例就提了。250分的题[quote]给定一个正整数n. 你可...2009-05-31 23:55:25 · 126 阅读 · 0 评论 -
百度之星第一场题目
由于不符合参赛条件,未能参加百度之星,看了题目还挺有意思,把题目放着有空做做。百度之星2009程序设计大赛 初赛第一场试题2009年5月30日19:00-22:30(由于第二题出错,比赛时间延长半小时),2008百度之星大赛在线资格赛(初赛)展开。百度爱好者(Baiduer.com.cn)在第一时间给大家带了初赛题目。第一场初赛共四题,分别是火柴游戏(250分)、电子商务平...2009-05-31 00:03:08 · 190 阅读 · 0 评论 -
二分图匹配
二分图最大匹配的匈牙利算法二分图是这样一个图,它的顶点可以分类两个集合X和Y,所有的边关联在两个顶点中,恰好一个属于集合X,另一个属于集合Y。最大匹配: 图中包含边数最多的匹配称为图的最大匹配。完美匹配: 如果所有点都在匹配边上,称这个最大匹配是完美匹配。最小覆盖: 最小覆盖要求用最少的点(X集合或Y集合的都行)让每条边都至少和其中一个点关联。可以证明:最少的点(即覆盖数)=最大匹...原创 2009-04-15 15:40:32 · 139 阅读 · 0 评论 -
线段树
把问题简化一下:在自然数,且所有的数不大于30000的范围内讨论一个问题:现在已知n条线段,把端点依次输入告诉你,然后有m个询问,每个询问输入一个点,要求这个点在多少条线段上出现过;最基本的解法当然就是读一个点,就把所有线段比一下,看看在不在线段中;每次询问都要把n条线段查一次,那么m次询问,就要运算m*n次,复杂度就是O(m*n)这道题m和n都是30000,那么计算量达到了1...原创 2009-03-24 10:58:43 · 88 阅读 · 0 评论 -
树状数组
树状数组是一种非常优雅的数据结构. 当要频繁的对数组元素进行修改,同时又要频繁的查询数组内任一区间元素之和的时候,可以考虑使用树状数组. 最直接的算法可以在O(1)时间内完成一次修改,但是需要O(n)时间来进行一次查询.而树状数组的修改和查询均可在O(log(n))的时间内完成. 假设a[1...N]为原数组,定义c[1...N]为对应...原创 2009-03-24 10:39:41 · 126 阅读 · 0 评论 -
算法分析之分治法总结(二)
3)分类和合并同时进行典型事例 快速排序:(以整数类型为例)快速排序的思想是,对于输入,按照以下二个步骤进行排序对于数组a[p:r]1)分解(其实包括合并过程):以a[p]为基准将数组分成三段a[p:q-1]、a[q]、a[q+1:r]使得a[p:q-1]中的任意元素都小于等于a[q],a[q+1:r]中的任意元素都大于等于a[q].2)递归求解:通过递归调用快速排序,分别完成...2007-04-09 17:10:46 · 203 阅读 · 0 评论 -
算法分析之分治法学习总结(一)
算法分析之分治法学习总结(一)一)解决问题的类型:当我们要解决一个输入规模(n)很大的问题时,直接处理往往比较困难或者根本无法求解,我们希望把输入规模缩小,即分成很多份,分别解决了,并且这些小问题容易合起来从而解决整个问题。二)解题关键:1)如何分:我们往往先把输入分成两个与原来相同的子问题,如果规模还太大,我们对这些子问题再做上述处理,直到这些子问题容易解决为止.2)...2007-04-09 16:55:56 · 1040 阅读 · 0 评论 -
回溯法之三--0-1背包问题
0-1背包问题:给定n种物品和一背包.物品i的重量是wi, 其价值为ui,背包的容量为C.问如何选择装入背包的物品,使得装入背包中物品的总价值最大?分析:0-1背包是子集合选取问题,一般情况下0-1背包是个NP问题.第一步 确定解空间:装入哪几种物品第二步 确定易于搜索的解空间结构:可以用数组p,w分别表示各个物品价值和重量。用数组x记录,是否选种物品第三步 以深度...2008-02-26 23:57:51 · 258 阅读 · 0 评论 -
回溯法之一---算法框架及基础
回溯法其实也是一种搜索算法,它可以方便的搜索解空间。 回溯法解题通常可以从以下三步入手: 1、针对问题,定义解空间 2、确定易于搜索的解空间结构 3、以深度优先的方式搜索解空间,并在搜索的过程中进行剪枝 回溯法通常在解空间树上进行搜索,而解空间树通常有子集树和排列树。 针对这两个问题,算法的框架基本如下: 用回溯法搜索子集合树的一般框架:void backtrack(int t){ if(t...2008-02-25 10:50:43 · 345 阅读 · 0 评论 -
动态规划 小结
动态规划其实质上是通过开辟记录表,记录已求解过的结果,当再次需要求解的时候,可以直接到那个记录表中去查找,从而避免重复计算子问题来达到降低时间复杂度的效果。实际上是一个空间换时间的算法。动态规划,通常可以把指数级的复杂度降低到多项式级别。一般算法书都会讲能不能用动态规划来求解问题,通常是判断有没有最有解结构,通常是通过“剪切技术”来判断:即证明问题的一个最优解中,使用的子问...2007-12-27 19:38:35 · 85 阅读 · 0 评论 -
使用动态规划解花店问题 两种思考方法分析
问题描述:LITTLE SHOP OF FLOWERS DescriptionYou want to arrange the window of your flower shop in a most pleasant way. You have F bunches of flowers, each being of a different kind, and at least as many...2007-12-26 21:38:36 · 129 阅读 · 0 评论 -
用动态规划解--滑雪题 算法分析
问题描述:Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 ...2007-12-23 23:09:29 · 973 阅读 · 0 评论 -
Function Run Fun一个简单的DP问题分析
问题:We all love recursion! Don't we?Consider a three-parameter recursive function w(a, b, c):if a <= 0 or b <= 0 or c <= 0, then w(a, b, c) returns:1if a > 20 or b > 20 or c >...2007-12-17 20:39:08 · 138 阅读 · 0 评论 -
JOJ ACM 1149
Given a positive integer n, nd the positions of all 1's in its binary representation. The position of the least significant bit is 0.ExampleThe positions of 1's in the binary representation of 13 ...2007-04-09 17:56:45 · 122 阅读 · 0 评论 -
单源最短路径---贪心法实现(Dijkstra算法)
//贪心法解决单源最短路经问题//定点v表示源,a为图的邻接矩阵,dist[i]表示源到顶点i的最短路经长度//prev[i]表示最短路经中i顶点的前驱顶点[code]#define MAX_DISTANCE 100000void Shortest_Path(int v,float **a,float dist[],int prev[],int n){ if(...2007-04-09 18:27:09 · 683 阅读 · 0 评论 -
RMQ and LCA
IntroductionThe problem of finding the Lowest Common Ancestor (LCA) of a pair of nodes in a rooted tree has been studied more carefully in the second part of the 20th century and now is fairly...原创 2009-03-16 17:44:05 · 163 阅读 · 0 评论 -
可供快速查找的数据结构和算法总结之一并查集
最近学习了并查集、线段树、树状数组以及RMQ(Range Minimum Query)这几种关于快速查找的数据结构和算法,并做了一些ACM的题目巩固了一下。准备写一下总结。本次总结一下并查集:并查集对解决不相交集合的合并查找操作非常有效,主要提供了一下几个方法:make_set(x) 把每一个元素初始化为一个集合find_set(x) 查找一个元素所在的集合union_se...2009-03-13 22:51:04 · 567 阅读 · 0 评论 -
JOJ ACM 1149
Given a positive integer n, nd the positions of all 1's in its binary representation. The position of the least significant bit is 0. ExampleThe positions of 1's in the binary representation...2007-04-09 23:10:12 · 95 阅读 · 0 评论 -
JOJ ACM 1107
The most important part of a GSM network is so called Base Transceiver Station (BTS). These transceivers form the areas called cells (this term gave the name to the cellular phone) and every phone con...2007-04-09 23:08:56 · 126 阅读 · 0 评论 -
JOJ ACM 1146
For each list of words, output a line with each word reversed without changing the order of the words.This problem contains multiple test cases!The first line of a multiple input is an integer N...2007-04-09 23:07:30 · 87 阅读 · 0 评论 -
JOJ ACM 1148
A prime number is a counting number (1, 2, 3, ...) that is evenly divisible only by 1 and itself. In this problem you are to write a program that will cut some number of prime numbers from the list of...2007-04-09 23:06:13 · 78 阅读 · 0 评论 -
JOJ ACM 2155
Mr. Jojer has written an article, but now he wants to make a copy of it and check out how many characters he has used. Input and OutputYou will be given an article, you should output this articl...2007-04-09 23:04:21 · 102 阅读 · 0 评论 -
JOJ ACM 1237
1237A character string is said to have period k if it can be formed by concatenating one or more repetitions of another string of length k. For example, the string "abcabcabcabc" has period 3, sin...2007-04-09 23:02:17 · 143 阅读 · 0 评论