Algorithm
文章平均质量分 61
likun_tech
这个作者很懒,什么都没留下…
展开
-
一个简单的HashMap C语言实现
http://blog.csdn.net/cheungmine/article/details/1894219一个简单的HashMap C语言实现cheungmine 用C语言实现一个简单实用的hashmap,具有一定的实际意义。尤其我们不想使用STL里面的map类的时候。我实现的这个hashmap,用来做key---value的映射,key必须是有效的字符串,valu转载 2012-02-18 21:13:36 · 617 阅读 · 0 评论 -
Catalan数
http://acm.hdu.edu.cn/showproblem.php?pid=1134题意:2N个人依序站成一圈,两两组成一队,不能交叉,组合的组数http://acm.hdu.edu.cn/showproblem.php?pid=1130题意:给定N个节点,能构成多少种不同的二叉树。代码一样,如下:[cpp] view pla转载 2012-03-07 23:21:04 · 359 阅读 · 0 评论 -
最长递增(减)子序列
http://skynewborn.blog.sohu.com/66594610.html(比较详细)http://hi.baidu.com/dufangst/blog/item/483ef917ceb756dff6039e13.htmlhttp://blog.sina.com.cn/s/blog_4d3c631901000b8d.html最长单调序列的动态规划优化转载 2012-03-08 14:53:15 · 685 阅读 · 0 评论 -
Dijkstra 算法
#include using namespace std;#define MAX 1000000int c[100][100];void dijkstra(int n,int v,int d[],int pre[]){ bool s[100]; //记录该节点是否被访问过 for(int i=1;i<=n;i++) //执行一些初始化的工作 {原创 2012-03-08 12:45:01 · 425 阅读 · 0 评论 -
扩展欧几里得算法
#includeusing namespace std;typedef struct node{ int x; int y; int q;}node;node t;node extend_euclid(int a,int b){ if(b==0) { t.x=1; t.y=0; t.q=a; return t; } else{ extend_eu原创 2012-03-08 14:06:00 · 425 阅读 · 0 评论 -
hdoj 1016 (dfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1016这个题是简单的深搜,判断好终止条件即可(注意:终止条件有两个:1.cur==n;2,首尾相加满足素数)#include #include #include #include using namespace std;int re[25], n; //re存储最后结果序列boo转载 2012-03-09 21:18:32 · 455 阅读 · 0 评论 -
SkipList 跳表
为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。 用跳表吧,跳表是一种随机化的数据结构,目前转载 2012-03-14 19:31:00 · 3467 阅读 · 0 评论 -
C/C++面试题系列之3:输出1-N个数字
题目:用C/C++计算1+2+3+……N条件:1.不使用任何循环语句。(for,while,goto等等)2.不使用任何条件语句。(if,?:等等)3.不使用*/等运算,只使用+-运算 4:更不能写1000个printf或是cout。 一看到这个题,人们会想到递归,但是递归需要结束条件,题目要去不要任何判断条件,所以不行。例一:变相的用1000个p转载 2012-03-15 13:46:51 · 953 阅读 · 0 评论 -
hash表理论
最近我在做一个项目,其中要用到一个数据结构——Hash Table(哈希表),以前只有理论知识,现在实却发现很不简单,所以写下来和大家共分享。我们知道,哈希表是一个固定大小的数组,数组的每个元素是一个链表(单向或双向)的头指针。如果Key一样,则在一起,如果Key不一样,则不在一起。哈希表的查询是飞快的。因为它不需要从头搜索,它利用Key的“哈希算法”直接定位,查找非常快,各种数据库中的数转载 2012-03-16 15:39:15 · 476 阅读 · 0 评论 -
用C写有面向对象特点的程序
比如在一个项目中,有大量的数据结构,他们都是双向链表,但又想共用一套对链表的操作算法,这怎么做到呢,C中又没有C++中的继承,不然我可以继承一父(类中只有两个指针,一个向前一个向后),而其算法可以写在你类中的虚函数中,供子类使用。如:class Links{public: Links* back; Links* forword; virtual A转载 2012-03-16 16:46:49 · 364 阅读 · 0 评论 -
NYOJ-138 找球号2【Hash】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=138解题思路:hash的简单入门题。不懂的可以参考这篇文章,很好很强大。http://blog.csdn.net/v_JULY_v/article/details/6256463通过这道题,学到了hash的简单应用。hash的优势就在于能快速的查找海转载 2012-05-10 17:57:03 · 1291 阅读 · 0 评论 -
整数的分解
整数的分解:求解分解数目和分解的形式#include#includeusing namespace std;int a[105];int len;void print(int m){ for(int i=0;i<m-1;i++) { cout<<a[i]<<"+"; } cout<<a[m-1]<<endl; len++;转载 2012-06-02 20:28:45 · 422 阅读 · 0 评论 -
数据结构_Hash通过liner的方法解决冲突
题目链接:http://acm.fzu.edu.cn/problem.php?pid=1353 题目大意:给定100万个木头名称,相同的为一个种类,种类不超过1万,问每个种类出现的概率 解题思路:这题不复杂,简单排序同类的就扎堆了,然后直接判断也能卡时间卡过。正解是用Hash求解,由于每个名称最长是30,所以直接用个数组记录出现次数也不合适,会MLE.那就随机用转载 2012-06-07 19:50:48 · 583 阅读 · 0 评论 -
递归做1元钱换零钱
给定足够的 5角,2角,1角,5分,2分,1分这六种零钱,将1元(100)换成零钱,一共有多少种换法?int kind[5] = {50,25,10,5,1};int f(int n,int k){ if(n==0){ //printf("ok\t"); return 1; } if(n原创 2012-08-14 15:48:33 · 2594 阅读 · 0 评论 -
约瑟夫环问题。。。。。
Josephus(约瑟夫)问题的数学方法:无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。我们注意到原问题仅仅是要求出最后的胜利者的序号,而不是要读者模拟整个过程。因此如果要追求效率,就要打破常规,实施一点数学策略。为了讨论转载 2012-03-07 23:03:38 · 334 阅读 · 0 评论 -
并查集--学习详解
#include#includeusing namespace std;int m,n;int i,j,maxnum;int father[30005],num[30005];void makeset(int n){ for(i=0;i<n;i++) { father[i] = i; num[i] = 1; }}int findset(int x){ i转载 2012-03-07 10:50:57 · 362 阅读 · 0 评论 -
树状数组
其实我找了一个树状数组的PPT来看,看的云里雾里的,根本不懂是怎么一回事,咋就经过位运算的迭代下去,就能求出一个区间的权值和的。然后看了TC里面关于BIT(==树状数组)的介绍,恍然大悟的明白了树状数组的原理,觉得那个结构确实巧妙,虽然还是不能彻悟树状数组,起码了解了原理对于掌握有很大的好处的。http://www.topcoder.com/tc?module=Static&d1=tuto转载 2012-03-07 10:26:19 · 497 阅读 · 0 评论 -
二叉查找树
http://www.cnblogs.com/tanky_woo/archive/2011/05/03/2035160.htmlhttp://zh.wikipedia.org/zh-cn/%E4%BA%8C%E5%8F%89%E6%9F%A5%E6%89%BE%E6%A0%91http://my.opera.com/IloveLunamaria/blog/pingheng转载 2012-03-03 09:49:22 · 356 阅读 · 0 评论 -
树状数组
已知数组a[],元素个数为n,现在更改a中的元素,要求得新的a数组中i到j区间内的和(1思考:对于这个问题,我们可以暴力地来解决,从a[i]一直累加到a[j],最坏的情况下复杂度为O(n),对于m次change&querry,合起来的复杂度为O(m*n),在n或m很大的情况下,这样的复杂度是让人无法忍受的.另外,如果没有元素的变更,我们完全可以存储sum[1,k](k=1,2,……),然后转载 2012-03-02 20:36:59 · 345 阅读 · 0 评论 -
HyperDex: A Searchable Distributed Key-Value Store
HyperDex strategically places objects on servers so that both search and key-based operations contact a small subset of all servers in the system. Whereas typical key-value stores map objects to nodes原创 2012-03-02 20:55:56 · 793 阅读 · 0 评论 -
归并排序求逆序数
题目:给你N个数组成的序列,求这个序列的逆序数一共有多少个。这个序列个数不超过100000.解题思路:很经典的一个问题,解决方法有两种:第一种方法是归并排序,第二种方法是树状数组。如果我们要枚举的话,复杂度为o(n*n),铁定TLE,所以要考虑更高效的算法。归并操作中,当取到右边集合的第i个元素时,左边集合中元素的个数就是这个元素的逆序数,以此类推,把右边集合全部的逆序数求出来,求原创 2012-03-03 20:07:09 · 992 阅读 · 0 评论 -
PKU 1026
题意: 给你长度n的一组序列a[i] 然后k操作次数 再给你一组字符串 字符串长度不足n的后面补零 操作:把字符在i位置的放到a[i]上 如此操作k次方法: 直接模拟肯定TLE 求字符串整体周期T k=k%T k还是很大 超时 求每个字符串的周期 T[i] 然后 k=k%T[i]#inc转载 2012-03-04 17:48:59 · 704 阅读 · 0 评论 -
快速排序
#include#include#includeusing namespace std;#define N 15void print(int a[],int n){ int i=1; while(i<=N) { cout<<a[i]<<" "; i++; } cout<<endl;}void s_swap(int &a,int &b){ int t=a原创 2012-03-05 16:02:03 · 339 阅读 · 0 评论 -
字典树
#include#include#includeusing namespace std;const int kind=26;struct Treenode{ int count; Treenode *next[kind]; Treenode() { count=1;转载 2012-03-04 18:03:38 · 420 阅读 · 0 评论 -
各种排序算法的性能比较
http://en.wikipedia.org/wiki/Sorting_algorithm#Comparison_of_algorithmsIn computer science, a sorting algorithm is an algorithm that puts elements of a list in a certain order. The most-used o转载 2012-03-04 23:04:25 · 3368 阅读 · 1 评论 -
heap实现的最大优先队列
#include#include#includeusing namespace std;#define LEFT(i) 2*(i)#define RIGHT(i) 2*(i)+1#define PARENT(i) (i)/2int size = 15;void h_swap(int &a,int &b){ int t=a; a=b; b=t;}void max_原创 2012-03-05 15:18:54 · 616 阅读 · 0 评论 -
算法复杂度的计算
注释:sandwiched:夹于两者之间的图片二说明:1、f(n)在两个函数之间。2、f(n)的一个上限3、f(n)的一个上限转载 2012-03-04 10:19:43 · 685 阅读 · 0 评论 -
heap排序
#include#include#includeusing namespace std;#define LEFT(i) 2*(i)#define RIGHT(i) 2*(i)+1void h_swap(int &a,int &b){ int t=a; a=b; b=t;}void max_heapfy(int a[],int i,int size){ int ma原创 2012-03-05 14:52:53 · 577 阅读 · 0 评论 -
归并排序
#include #include #include #include #include using namespace std; #define N 15 #define NIL 0x0ffffffe int sum=0; void merge(int a[],int l,int m,int r) { int k=0,b原创 2012-03-04 10:17:10 · 359 阅读 · 0 评论 -
影响算法世界的十位大师
伟大的智者——DonE.Knuth,中文名:高德纳(1938-)算法和程序设计技术的先驱者。Oh,God!一些国外网站这样评价他。一般说来,不知道此人的程序员是不可原谅的。其经典著作《计算机程序设计艺术》更是被誉为算法中“真正”的圣经,像KMP和LR(K)这样令人不可思议的算法,在此书比比皆是。难怪连Bill Gates都说:“如果能做对书里所有的习题,就直接来微软上班吧!” 对于DonE转载 2012-03-06 20:46:35 · 831 阅读 · 0 评论 -
贪心算法
#include#includeusing namespace std;typedef struct node{ int s; int f;}node;node arr[100];node tmp[100];int n;bool cmp(node &a,node &b){ return (a.f < b.f);}int main(){ cout<<"inpu转载 2012-03-07 13:33:09 · 335 阅读 · 0 评论 -
动态规划 求解 Minimum Edit Distance
自然语言处理(NLP)中,有一个基本问题就是求两个字符串的minimal Edit Distance, 也称Levenshtein distance。受到一篇Edit Distance介绍文章的启发,本文用动态规划求取了两个字符串之间的minimal Edit Distance. 动态规划方程将在下文进行讲解。 1. what is minimal edit distanc转载 2012-08-18 16:33:13 · 651 阅读 · 0 评论