09 2011 档案

KMP 算法并非字符串查找的优化 [转]
摘要:算法书和数据结构书对KMP算法多有介绍,称只需对字符串扫描一遍不需回溯云云.然而,它恐怕只应该作为一种思想存在;用于实际的字符串查找并不理想.要费劲心血实现和优化它,才能在特定的字符串上略微超过(也可能略微逊过)std::search. KMP算法的基本思想,是利用需要匹配字符串的自身信息来避免回溯.(这里讨论的算法是以C/C++为编程语言,因此下标索引以0开始) 例如:字符串PAT=”abcabcde”,里面第二段的abc和PAT开头的字符是匹配的. 假如我们有个要查找的字符串TEXT=”abcabD...”,在比较到TEXT的'D'处(TEXT[5])也即到了PAT的第二个 阅读全文

posted @ 2011-09-25 23:36 龙豆 阅读(2005) 评论(0) 推荐(0) 编辑

精确字符串匹配(BM算法) [转]
摘要:Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE ... 阅读全文

posted @ 2011-09-25 23:26 龙豆 阅读(1889) 评论(0) 推荐(0) 编辑

字符串模式匹配——Shift-And和Shift-OR算法[转]
摘要:Shift-And算法思想较之KMP算法很简单,设模式字符串为P,它主要通过保存一个集合D(D中记录了P中所有与当前已读text的某个后缀相匹配的前缀),每当text有新的字符读入,算法利用位并行机制来更新这个集合D。 设P长度为m,则集合D可表示为D=dm…d1而用D[j]代表dj D[j]=1当且仅当p1…pj是t1…ti的某个后缀,当D[m]=1时,就认为P已经于text匹配。 当读入下一个字符ti+1,需要计算新的集合D′.当且仅当D[j]=1并且ti+1等于pj+1时D'[j+1]=1.这是因为D[j]=1时有p1…pj是t1…ti的一个后缀,而当ti+1等于pj+1可推出. 阅读全文

posted @ 2011-09-25 22:49 龙豆 阅读(4625) 评论(1) 推荐(0) 编辑

CEOI 2000 Day 2 Problem 3---Enlightened landscape 【转】
摘要:ProblemEnlightened landscapeConsider a landscape composed of connected line segments:Above the landscape, N light bulbs are hang at the same height Tin various horizontal positions. The purpose of these light bulbs is to light up the entire landscape. A landscape point is considered lit if it can &q 阅读全文

posted @ 2011-09-22 20:58 龙豆 阅读(807) 评论(0) 推荐(0) 编辑

将WIN8装入U盘和移动硬盘教程【转】
摘要:将WIN8装入U盘和移动硬盘教程 在前面得文章里我们向大家先容了Windows 8(以下简称Win8)各种新特性,其中一个显著的特性就是:Win8开始支持在USB设备上启动。这就意味着以后我们可以将Win8随身携带。固然Win8还没有正式发布,但我们也可以提前体验Win8这个新特性。 移动Win8原理解析 本文的方法是通过启动移动硬盘里装有Win8系统的VHD文件,从而实现移动系统的效果。首先,我们要了解从VHD启动系统的一些知识,它的启动流程以及我们需要进行DIY的步骤如图1所示。 最新XP系统下载地址:http://www.xitongzhijia.net/xp/ 最新Win7系统下载地址 阅读全文

posted @ 2011-09-15 23:13 龙豆 阅读(2243) 评论(0) 推荐(0) 编辑

并行排序算法【转】
摘要:一、谁能把这个程序的性能提升一倍?---并行排序算法http://www.cnblogs.com/onlytiancai/archive/2009/04/21/1440829.html如下,一组4元矢量的排序,如何把排序时间缩减一半?可以用并行算法。using System;using System.Collections.Generic;using System.Diagnostics;namespace Vector4Test{ public class Vector { public double W; public double X; ... 阅读全文

posted @ 2011-09-04 23:31 龙豆 阅读(724) 评论(1) 推荐(1) 编辑

poj-1459 Power Network *
摘要:/* * 最大流 Edmonds-Karp * * 加入两个节点 S 和 T * S 与 所有 power stations相连 ; 所有 consumers 与 T 相连 * */#include <iostream>#include <cstring>using namespace std;const int inf = 100000000;const int maxN = 100 + 5;int n, np, nc, m, l[maxN][maxN], s, t;int q[maxN], maxFlow, pre[maxN];void addFlow(){ int 阅读全文

posted @ 2011-09-04 15:29 龙豆 阅读(327) 评论(0) 推荐(0) 编辑

sap算法详解与模板 [转]
摘要:链接:1. Maximum Flow: Augmenting Path Algorithms Comparison http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=maxFlowRevisited2. 刘汝佳《算法艺术与信息学竞赛》 P321 ( 注: 上面的代码似乎有误,retreat()部分未回退< 详见下文or 链接1. > )---------------------------------------------关键概念与性质:距离函数(distance function),我们 阅读全文

posted @ 2011-09-04 14:55 龙豆 阅读(3168) 评论(0) 推荐(1) 编辑

poj-1087 A Plug for UNIX ***
摘要:/* * 1087.cpp * 第一道最大流题目, 看了网上的解法, * http://www.cppblog.com/NARUTOACM/archive/2010/03/01/108680.html * 见图:其实可以把图中的边的方向全部反过来,就可以这样理解:T是总电源, 单位时间内可以给A、B、C、D提供1度电(ABCD是原来就有的电源插座), 而根据每个设备的插座类型, 相应的插座能给设备提供1度电.。S看做总的消耗功率。。每个设备对总消耗功率的贡献是1.。 至于adapter, 由于每种adapter有无限个, 所以 例如 把 X 变成 B 的adapte... 阅读全文

posted @ 2011-09-03 22:30 龙豆 阅读(1276) 评论(0) 推荐(0) 编辑

poj-2049 Finding Nemo *
摘要:【转】 (看了题目,感觉用广搜, 就没做~ 直接转一个~ )搜索题,我的做法是用优先队列(保证当前所通过的门是最少的),所以遇见出口,就可以直接得到结果,搜索从Nemo的位置开始,有三种情况,遇见门,door加1,入队,遇见air,直接入队,遇见墙,continue;我的存储结构见代码,这里还要注意两点,一是Nemo的位置可能超出[1--199],所以开始时有必要进行判断(因为这,n个runtime error ,郁闷了几个小时。。)二是这个如果用C++提交的话,好像输入Nemo的位置时,必须用cin(不能用scanf,当然G++也可以通过的),这是偶然在discuss上看到的,要不,不知又. 阅读全文

posted @ 2011-09-03 17:06 龙豆 阅读(1143) 评论(0) 推荐(0) 编辑

poj-1062 昂贵的聘礼 **
摘要:/* * 最短路, Dijkstra(数组实现) * * 建图 : 若 物品u 能用物品 v 再加 钱 a 交换, 则 边权值w(v,u) = a * 初始: d[i] = 物品i的直接价格 * * 注意等级的限制, 酋长的等级不一定是最高的~ 应枚举等级的范围,起点不在范围内的边不能松弛~ * * */#include <cstdio>#include <cstring>using namespace std;const int inf = 10000000;const int maxN = 100 + 5;int m, n, r[maxN], d[maxN];boo 阅读全文

posted @ 2011-09-03 15:55 龙豆 阅读(333) 评论(0) 推荐(0) 编辑

poj-1125 Stockbroker Grapevine *
摘要:/* * 水题~ floyd算法 0ms * * 求每对顶点间的最短路, 然后选择 最大值 最小的那个顶点作为起点~ */#include <cstdio>#include <cstring>using namespace std;const int maxN = 100 + 5;const int inf = 10000000;int n, totEdgeNum, w[maxN][maxN];/*struct SEdge{ int u, v, w;};SEdge edge[maxN * maxN];*/void floyd(){ for(int k=1; k<= 阅读全文

posted @ 2011-09-03 14:18 龙豆 阅读(211) 评论(0) 推荐(0) 编辑

poj-3259 Wormholes **
摘要:/* * Bellman_Ford 判断负环 * * 注意可能有平行边,只需保留最小的权值 * * 【转】 * 此题虽然是最最基础的bellman_ford,但用来加深理解还是可以的: * 1)bellman_ford 究竟要relax多少次,当从1到n存在且存在1 -> 2, 2 -> 3 ...n-1 -> n这样的边时, * 从1开始relax,到n显然是需要n-1次的,而如果其中存在负环的话,若relax次数大于n-1,总是存在新的可以收缩的点, * 因此最科学的次数是先做n-1次,再做第n次: * 如果n-1次relax... 阅读全文

posted @ 2011-09-03 11:06 龙豆 阅读(252) 评论(0) 推荐(0) 编辑

poj-1860 Currency Exchange **
摘要:/* * 汇率问题: Bellman_Ford算法 , 判断正环 * * 有个奇怪的问题: 如果把 d[i]初始化为 -inf 则 WA, 初始化为 0 或 -100 之类的值则AC~ 奇怪 */#include <iostream>#include <cstring>using namespace std;const int maxN = 100 + 5;int n, m, s;double v, r[maxN][maxN], c[maxN][maxN], d[maxN];void ini(){ for(int i=1; i<=n; i++) d[i] = 0; 阅读全文

posted @ 2011-09-02 22:32 龙豆 阅读(315) 评论(0) 推荐(0) 编辑

poj-1837 Balance ***
摘要:/* [转] * * d[i][j]表示在挂上前i个物体的时,平衡度为j * (j>0时表示左边重,j=0时表示天平平衡,j<0时表示右边重)时挂法的数量, * 而根据题意可以确定j的取值范围为:[-7500,7500],于是可以得到状态转移方程为: * d[i][j]+=(d[i-1][j-weigh[k]*pos[i]]), * weigh[k]表示第k个挂钩的位置,pos[i]为第i个砝码的重量 * 由于j-weigh[k]*pos[i]可能为负数,因此统一加上7500, * 那么初始状态d[0][7500]=1(此时表示天平平衡),表示不用... 阅读全文

posted @ 2011-09-02 16:32 龙豆 阅读(203) 评论(0) 推荐(0) 编辑

poj-1251 Jungle Roads *
摘要:/* * 1251.cpp * 纯粹MST。。 Prim实现 * * Created on: 2011-9-2 * Author: * * 开始用scanf, WA, 后改成cin, AC了~ 不知怎么回事 总之对C的输入输出理解的还不够好~ */#include <cstdio>#include <iostream>usingnamespace std;constint maxN =27+5;constint inf =100000000;int n, w[maxN][maxN], d[maxN], ans;intbase='A'-1;int inli 阅读全文

posted @ 2011-09-02 15:26 龙豆 阅读(292) 评论(0) 推荐(0) 编辑

poj-2492 A Bug's Life **
摘要:与POJ-1703类似。。故先转一个和1703相同解法的代码:————————————————————【转】这道题和poj1182是很类似的,只不过拿那道题目有三个集合,而我们这道只有两个,岂不是更简单!具体做法要在熟悉了并查集这种数据结构的常规操作之后进行扩展。关于并查集请参考《算法导论》,这是一本非常非常出色的算法类参考书,他所讲的不相交集合就是并查集。注意两个概念:按秩合并、路径压缩。1、按秩合并由于并查集一般是用比较高效的树形结构来表示的,按秩合并的目的就是防止产生退化的树(也就是类似链表的树),用一个数组记录各个元素的高度(也有的记录各个元素的孩子的数目,具体看哪种能给解题带来方便) 阅读全文

posted @ 2011-09-02 13:37 龙豆 阅读(743) 评论(0) 推荐(0) 编辑

poj-1703 Find them, Catch them ***
摘要:【转】解析:并查集的题目,并查集的拓展。一般的思路是先初始化,各个数自成一个组,然后是两个gangs自成一个组,但由于两个给定元素有三种关系:Inthe same gang; Indifferent gangs; Notsure yet;采用此模型的缺点是判断两个元素关系还未确定这种情况比较复杂,故模型需要改进。本题的正确模型是将已经确定关系的元素组成一个集合,然后利用两个元素的father是同一个来确定这两个元素之间的关系。father[a]中存放的是a的根结点,rank中存放的是father[a]与a的关系,0表示两者不在同一个gangs中,1表示两者在同一个gangs中。具体的程序还是沿 阅读全文

posted @ 2011-09-02 13:25 龙豆 阅读(2355) 评论(0) 推荐(1) 编辑

poj-1258 Agri-Net **
摘要:/* * 纯粹的最短路 prim 用 二叉堆 实现 * * 用二叉堆实现优先级队列 比较麻烦~ 后面附上直接用数组的 * */#include <cstdio>#include <cstring>usingnamespace std;constint maxN =100+5;constint inf =100000000;int n, G[maxN][maxN], len; //len:二叉堆数组的长度int ans;bool S[maxN];int d[maxN], vertex[maxN], reverse[maxN]; //二叉堆中节点的域int inline l 阅读全文

posted @ 2011-09-02 10:26 龙豆 阅读(254) 评论(0) 推荐(0) 编辑

poj-2421 Constructing Roads *
摘要:/* * 蛮水的一道MST Kruskal, 链表实现 * * 预处理: * 根据已有的边,把相应的集合合并。。再Kruskal * * 另一种方法: * 把已有边的权值改为0 * */#include <cstdio>#include <algorithm>using namespace std;const int maxN = 100 + 5;int n, totEdgeNum, G[maxN][maxN], q, ans;struct SEdge{ int w, u, v;};SEdge edge[maxN * maxN];struct SNode{ int... 阅读全文

posted @ 2011-09-02 10:16 龙豆 阅读(267) 评论(0) 推荐(0) 编辑

poj-1789 Truck History *
摘要:/* * 很直接的最小生成树 * * 版本一: Kruskal, 链表实现 * */#include <cstdio>#include <algorithm>using namespace std;const int maxN = 2000 + 5;const int letterNum = 7;int n, totEdgeNum, ans;char code[maxN][letterNum + 2];struct SEdge{ //边 int w, u, v;};SEdge edge[maxN * maxN];struct SNode{ //... 阅读全文

posted @ 2011-09-01 14:12 龙豆 阅读(313) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示