![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Algorithms
文章平均质量分 69
Ginvar
这个作者很懒,什么都没留下…
展开
-
最长公共子序列
最长公共子序列,顾名思义,要求算出两个字符序列中最长的公共子序列,DP问题。这里直接给出代码:#include#include#define maxn 1001#define max(a,b) (a>b?a:b)char a[maxn],b[maxn];long lena,lenb,d[maxn][maxn];int main(){ memset(d,0原创 2013-08-19 18:25:51 · 438 阅读 · 0 评论 -
昂贵的聘礼(单源最短路问题)
题意:年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了,于是便向酋长去求亲。酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。探险家拿不出这么多金币,便请求酋长降低要求。酋长说:"嗯,如果你能够替我弄到大祭司的皮袄,我可以只要8000金币。如果你能够弄来他的水晶球,那么只要5000金币就行了。"探险家就跑到大祭司那里,向他要求皮袄或水晶球,大祭司要他用金币来换,或者替他弄来其原创 2013-08-19 18:26:24 · 495 阅读 · 0 评论 -
poj1007 DNA Sorting(求逆序数)
DescriptionOne measure of``unsortedness'' in a sequence is the number of pairs of entriesthat are out of order with respect to each other. For instance, inthe letter sequence ``DAABEC'', this meas原创 2013-08-19 18:26:09 · 934 阅读 · 0 评论 -
poj3714 Raid(分治法…
DescriptionAfter successive failures in the battlesagainst the Union, the Empire retreated to its last stronghold.Depending on its powerful defense system, the Empire repelled thesix waves of Uni原创 2013-08-19 18:25:58 · 691 阅读 · 0 评论 -
编写一个垃圾回收器
每当我倍感压力以及有很多事情要做的时候,我总是有这样一种反常的反应,那就是希望做一些其他的事情来摆脱这种状况。通常情况下,这些事情都是些我能够编写并实现的独立的小程序。一天早上,我几乎要被一堆事情给整疯了——我得写我那本《游戏编程模式》、处理一些工作上的事情、还要准备一场Strange Loop的演讲,然后这时我突然想到:“我该写一个垃圾收集器了”。是的,我知道那一刻让我看上去转载 2013-12-30 14:39:52 · 976 阅读 · 0 评论 -
哈夫曼编码
思想:得到哈夫曼树后,自顶向下按路径编号,指向左节点的边编号0,指向右节点的边编号1,从根到叶节点的所有边上的0和1连接起来,就是叶子节点中字符的哈夫曼编码。下图体现了哈夫曼编码的过程: #include stdio.h>#include stdlib.h>#include string.h>//哈转载 2014-02-13 12:36:53 · 653 阅读 · 0 评论 -
哈夫曼编解码的C++实现
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525转载 2014-02-13 14:02:11 · 839 阅读 · 0 评论 -
LZW编解码算法(C实现)
代码中加入了自己的一些注释,以便于阅读理解。程序由五个模块组成lzw.h 定义了一些基本的数据结构,常量,还有变量的初始化等。#ifndef __LZW_H__#define __LZW_H__//------------------------------------------------------------------------------转载 2014-02-17 15:02:53 · 3111 阅读 · 0 评论 -
典型Top K算法
Top K 算法详解应用场景: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。转载 2016-01-05 15:47:12 · 473 阅读 · 0 评论 -
最长回文串
题目:给定一个字符串序列,求出串中最长的回文序列。比如:abcdeffegddgeh,最长回文串就是egddge,长度为6; 代码:#include"stdio.h"#include"string.h"void main(){ char ch[100]; int max=1,ok=1; scanf("%s",ch); int n=s原创 2013-08-19 18:26:05 · 511 阅读 · 0 评论 -
Kruskal算法+并查集实现
对于稀疏图来说,用Kruskal写最小生成树效率更好,加上并查集,可对其进行优化。Kruskal算法的步骤:1.对所有边进行从小到大的排序。2.每次选一条边(最小的边),如果形成环,就不加入(u,v)中,否则加入。那么加入的(u,v)一定是最佳的。并查集:我们可以把每个连通分量看成一个集合,该集合包含了连通分量的所有点。而具体的连通方式无关紧要,好比集合中的元素没有先后顺序之分原创 2013-08-19 18:26:22 · 1047 阅读 · 0 评论 -
Bellman-Ford算法
Bellman - Ford算法是一种求单源点最短路径的算法,但是由于其时间复杂度较高,为O(V * E)(其中V为图的结点数,E为图的边数,如果图以邻接矩阵存储则时间复杂度为O(V ^ 3)),所以通常并不用这种算法来求单源点最短路径。但是由于Bellman - Ford算法适用于负权边,并且还能够判断图中是否存在负权环,所以在一些特殊的情况下会用到这种算法。 Bellman - For原创 2013-08-19 18:26:20 · 427 阅读 · 0 评论 -
Edmonds_Karp算法(图论)
有n个点,有m条有向边,有一个点很特殊,只出不进,叫做源点,通常规定为1号点。另一个点也很特殊,只进不出,叫做汇点,通常规定为n号点。每条有向边上有两个量,容量和流量,从i到j的容量通常用c[I,j]表示,流量则通常是f[I,j]。通常可以把这些边想象成道路,流量就是这条道路的车流量,容量就是道路可承受的最大的车流量。很显然的,流量把源点比作工厂的话,问题就是求从工厂最大可以发出多少货物,是不原创 2013-08-19 18:26:14 · 613 阅读 · 0 评论 -
Prim算法
void Prim(MGraph g,int v,int &sum) { int LowCost[Max],VexSet[Max],v; int i,j,k,min; //初始化LowCost,VexSet数组 for(i=0;i { LowCost[i]=g.edges[v][i];原创 2013-08-19 18:26:16 · 444 阅读 · 0 评论 -
反转链表
问题:给定一个单向链表,设计一个时间优化并且空间优化的算法,找出该链表的倒数第m个元素。实现您的算法,注意处理相关的出错情况。m定义为当m=0时,返回链表最后一个元素。 解答:这是一个难题,因为单向链表只能正向遍历,这个问题需要根据元素与链表尾的相对位置来找出该元素,但是当发现链表尾时,没有简单的办法回溯到倒数第m个元素。 我们需要的是倒数第m个元素,所以,如果我们从某个原创 2013-08-19 18:26:03 · 436 阅读 · 0 评论 -
石子合并
问题描述: 在一个圆形操场的四周摆放着n堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分。 动态规划思路:阶段i:石子的每一次合并过程,先两两合并,再三三合并,...最后N堆合并状态s:每一阶段中各个不同合并方法的石子合并总得分。决策:把当前原创 2013-08-19 18:25:53 · 1065 阅读 · 0 评论 -
0/1背包问题
题目:有n件物品和一个体积为C的背包。第i件物品的体积是V[i],价值是W[i]。求解将哪些物品装入背包可使价值总和最大。代码:#include #include int C,V[100],W[100];int main(){ int d[100][100]; int n,C,i; scanf("%d%d",&n,&C);原创 2013-08-19 18:25:55 · 419 阅读 · 0 评论 -
高精度乘法
#include #include #include #include #define MAX 10001 int bigchenfa(int *sum,int *a,int *b,int lsum,int la,int lb){ int i,j; memset(sum,0,sizeof(sum)); lsum = 0 ;原创 2013-08-19 18:26:01 · 483 阅读 · 0 评论 -
寻找前k个最小元素——用最小堆实现…
//copyright@ 泡泡鱼//July、.06.02。 //@lingyun310:先对元素数组原地建最小堆,O(n)。然后提取K次,但是每次提取时,//换到顶部的元素只需要下移顶多k次就足够了,下移次数逐次减少。此种方法的复杂度为O(n+k^2)。#include #include #define MAXLEN 123456 #define原创 2013-08-19 18:26:07 · 1018 阅读 · 0 评论 -
Dijkstra算法
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。其基本思想是,设置顶点集合S原创 2013-08-19 18:26:18 · 411 阅读 · 0 评论 -
poj 1980 Unit Fraction Partition
DescriptionAfraction whose numerator is 1 and whose denominator is a positiveinteger is called a unit fraction. A representation of a positiverational number p/q as the sum of finitely many unit f原创 2013-08-19 18:26:12 · 800 阅读 · 0 评论