算法
文章平均质量分 67
Ididcan
这个作者很懒,什么都没留下…
展开
-
多属性TopK——NRA算法(JAVA)实现
这两天看了一下多属性的TopK,有关NRA,google之。试着用Java实现了一下,可能有错误,欢迎指出错误。写的英文注解也不好,凑合着。算法中使用几种操作:And Or 和加权。(1)Result的数据结构,这里的Result其实是上次搜索的输出(项目的一个数原创 2011-09-21 22:27:05 · 3181 阅读 · 1 评论 -
图论——拓扑排序
通过DFS来遍历图的一个具体形式。唯一区别的就是要记录其访问次序,每一次访问该节点结束之后记录其终止时间,最后对终止时间进行排序就可以了!时间越大的节点,越应该先做!仅此而已。程序没有考虑效率,还可以提高,有空在修改吧!#include #include using namespace std;void topologize(bool** graph,int lis原创 2012-09-18 23:34:41 · 699 阅读 · 0 评论 -
图论——单源最短路径算法之Dijkstra算法
简单的实现了Dijkstra,不考虑效率问题。注释:V表示图的顶点集合,S表示从源节点到集合中的顶点的最终最短路径已经确定的点的集合Dijkstra算法的精髓就是1)初始的时候源节点s到其他所有节点的距离都是无穷大。2)将源节点加入到集合S,然后又该源节点发射出去所有边中,也就是所有能达到的节点,修改源节点s到这些节点的距离(这个就是算法的核心Relax操作)。3)找出最短的距原创 2012-09-18 22:00:00 · 1032 阅读 · 0 评论 -
Prim算法
cost数组表示的是图的加权值。其中顶点到自身的权值为0,到与自身相接的顶点为它们之间的权值,不直接相连的为INT_MAX。而tree数组准确描述应该是最小生成树的边集,因为一个N个顶点的图中,其最小生成树的边集中的元素只能为N-1。否则如果如果边集大于N-1,那么一定存在回路,如果小于N-1那么一定有一个点不在该树种。near集合中存储的是还未进入最小生成树中的点集。Prim算法的过程如下:原创 2012-08-28 09:53:32 · 659 阅读 · 0 评论 -
zoj 2100 Seeding
SeedingTime Limit: 2 Seconds Memory Limit: 65536 KBIt is spring time and farmers have to plant seeds in the field. Tom has a nice field, which is a rectangle with n * m squares. There are原创 2012-08-27 17:00:44 · 791 阅读 · 0 评论 -
经典面试题(十二)——顺序输出从1到N位数
第一种使用大数加法。。。第二种使用对数字的全排列,时间是O(10^N),而空间是O(N)。要注意一点的是数字的首位不能为0,同时输出字符数组最后一位应该以'\0'为结尾。代码如下所示:#include using namespace std;void printNum(char num[], int start, int end){ if(start==end)原创 2012-08-30 11:24:05 · 1232 阅读 · 0 评论 -
经典面试题(七)
利用两个栈来实现队列的操作。代码如下所示#include #include using namespace std;templateclass QueueFromStack{private: stack s1; stack s2;public: // use reference instead of variable pass原创 2012-08-29 15:08:14 · 788 阅读 · 0 评论 -
Bellman-Ford算法:计算单源最短路径
#include #include #include using namespace std;struct FordEdge{ int u; int v; int w;};int const N = 5;vector es;int dis[N];int parents[N];int costs[N][N] = {{0 ,6 ,7原创 2012-08-28 22:48:48 · 860 阅读 · 0 评论 -
经典面试题(六)重构二叉树
给定先序遍历与后序遍历的二叉树,重构该二叉树。例如先序遍历的结果{1,2,4,7,3,5,6,8},中序遍历的结果{4,7,2,1,5,3,8,6},最后得到一个二叉树root-1 left-2 left-4 right-7 right-3原创 2012-08-29 11:56:14 · 3171 阅读 · 1 评论 -
生成排列数(回溯法)
#include using namespace std;#define n 7int s[n] = { 1,2,3,4,5,6,7};int r[6];int v[n];void print(){ for(int i = 0; i<6;i++) cout<<s[r[i]]<<" "; cout<<endl;}void com原创 2009-10-02 20:31:00 · 1174 阅读 · 2 评论 -
BitTorrent中的数据块校验方式改进:Merkle Hashing Tree
转载:http://www.cnblogs.com/neoragex2002/archive/2006/04/26/385077.htmlBitTorrent中的数据块校验方式改进:Merkle Hashing Tree大家都知道,目前BT应用的发展具有一个非常显著的趋势,那就是用来交换电影、游戏、ISO等大尺寸的数据文件。然而我们也能够观察到另一个事实,那就是:下载文件所对应转载 2011-11-24 22:39:09 · 1113 阅读 · 0 评论 -
经典面试题——n皇后问题
一个典型的回溯法!作为练习。有几个关键地方需要注意,就是判断皇后的位置是否合法。pos[i] 表示第i个皇后应该排在的位置。因此对于第k个皇后而言,需要满足 pos[i]!=pos[k] 同时 abs(i-k)!=abs(pos[i]-pos[k])#include using namespace std;bool canPlace(int pos[], int k)原创 2012-09-21 16:55:30 · 1880 阅读 · 0 评论