allenxiong/
共35个网摘 [
1 2 ]
下一页 |
访问allenxiong的个人空间
allenxiong收录,使用标签:一次遍历找出“出现次数最多的子串”,时间:2008-4-29 11:09:24 | 相关网摘,我也收藏
一次遍历找出“出现次数最多的子串”
昨天,我写了一篇关于求出现次数最多的子字符串的算法及实现。网友 yy8354 对原文所述算法的效率提出置疑,这使我有了更进一步的想法。
原文,对出现次数最多的子串作出了一些归纳(详情见 原文)。然而,进一步的思考,我们会有更多的发现。
设 RS 为所有符合条件的子串的集合。则在结果集 RS 中,必然存一个子集 SS,且 SS 满足:
SS 中的所有字符串都不是 OS* 中任一字符串的子串,
OS* 中任一字符串均为 SS 中某一字符串的子串,
所有的字符在 SS 的各个字符串中总共只出现一次。
* 其中 OS 为 SS 的补集。
以此,重新设计算法:
扫描输入的每个字符,记录每个字符 C 的出现次数,以及对该字符的后续字符 NC 的关联次数。
扫描统计数据中每个字符的出现次数,找出最大值 M。
再次扫描统计数据,把出现次数满足 M 的字符 C 放入集合 RS 中。
如果 C 存在同样满足 M 的后续字符 NC,则把该 NC 作为 C 的关联数据保存至 RS 中。
至此,集合 RS 已经唯一确定了满足最大出现次数的所有字符串。
程序实现:
#pragma warning(disable : 4786)
#include
#include
#include
using std::cout;
using std::endl;
using std::string;
using std::map;
struct CHARINFO;
typedef map CUSED;
typedef map TEXTINFO;
typedef map RESUSET;
struct CHARINFO...{
int count;
CUSED cused;
CHARINFO():count(0),cused()...{}
int operator ++(int)...{return count++;}
};
int GetNextChar(const RESUSET& resuSet, char cc)...{
RESUSET::const_iterator iter;
iter = resuSet.find(cc);
if(iter != resuSet.end())...{
return iter->second;
}
return -1;
}
void main(void)...{
TEXTINFO txtInfo;
TEXTINFO::iterator iter;
char cc, pc;
pc = getc(stdin);
for(txtInfo[pc].count++; !feof(stdin); pc = cc)...{
cc = getc(stdin);
if(cc == EOF) break;
txtInfo[cc]++;
txtInfo[pc].cused[cc]++;
}
/**/// 找出最大出现次数
int maxCount;
for(maxCount = 0, iter = txtInfo.begin(); iter != txtInfo.end(); iter++)...{
if(maxCount < iter->second.count)maxCount = iter->second.count;
}
/**/// 生成结果
RESUSET resuSet;
CUSED::iterator cuseIter;
for(iter = txtInfo.begin(); iter != txtInfo.end(); iter++)...{
if(iter->second.count < maxCount)continue;
resuSet[iter->first] = -1;
for(cuseIter = txtInfo[iter->first].cused.begin();
cuseIter != txtInfo[iter->first].cused.end();
cuseIter++)
...{
if(cuseIter->second < maxCount)continue;
resuSet[iter->first] = cuseIter->first;
}
}
/**/// 输出结果
cout< cout<<"-------------------------------------" resultCount++;
cout<<'"'<- item += char(nc);
resultCount++;
cout<<'"'<- }
}
cout<<"-------------------------------------"< cout<<"Total : "<}
测试输入:
abcdefg
bcdef
hijklmnopqrstabcdefg
输出:
The result substrings :
-------------------------------------
"
"
"b"
"bc"
"bcd"
"bcde"
"bcdef"
"c"
"cd"
"cde"
"cdef"
"d"
"de"
"def"
"e"
"ef"
"f"
-------------------------------------
Total : 16
再次感谢 yy8354,尽管我不赞同对原算法时间复杂度为O(n*n)的结论。
http://blog.csdn.net/rushman/archive/2008/04/25/2328713.aspx
allenxiong收录,时间:2008-1-23 20:34:12 | 相关网摘,我也收藏
IT行业很热门,不过前提是你要有所需的技能。如果你想进入这个行业,不妨看看在不久的将来最热门的几项IT技能。
Kevin Scott是谷歌公司的高级技术经理,也是美国计算机协会专业与教育委
员会的创始成员,他说: “我在硅谷看到的一切与认为程序员行将消失、其工作外包出去的观点完全相反。从大企业到新兴公司,许多公司都在积极招聘。”
许多招聘人员认为,现在有更多的空位可供求职者挑选。据美国密尔沃基马奎特大学的IT副教授Kate Kaiser认为,IT人才市场很热门,不过前提是你要有所需的技能。
1 机器学习
Scott说,随着许多公司努力开发需要在庞大的数据集中查找数据的软件,譬如协作式过滤、垃圾邮件过滤和欺诈检测等软件,一些观察人士发现, 市场对以下这些人才的需求在迅速上升: 具有机器学习知识,或者能够设计及开发可提升计算机性能的算法和技术。不单单对谷歌而言是这样。有许多应用软件包含非常庞大的数据集,这就带来了一个根本 问题,即如何组织数据并提供给用户。
对这种应用软件的需求进一步扩大了对数据挖掘、统计建模和数据结构等其他技能的需求。其中一些问题不是轻松就能解决的——选择的数据结构或者算法之间的细微差异就会决定你得到的是不是合理的解决方案。
2 把应用软件搬到移动设备上
Sean Ebner是美国佛罗里达州的招聘公司Spherion Pacific Enterprises负责专业服务的副总裁,他说,人们竞相在移动设备上提供内容的势头就像互联网在上世纪90年代的疯狂时期。而随着黑莓和Treo等 设备成为日益重要的一种商业工具,很多公司都需要擅长把ERP、采购和费用审批等应用软件扩展到这些设备上的人才。他说: “许多公司需要有人能把应用软件推广到移动设备上。”
3 无线网络
美国计算机技术行业协会负责技能开发的副总裁Neill Hopkins说,随着Wi-Fi、WiMax和蓝牙这些事实上的无线标准迅速流行起来,对物色技术人才的雇主们而言,保护无线传输安全也就成了头等大 事。他说: “许多无线技术已经被大家所接受,因而相当多的公司关注它们如何协同工作、又存在哪些安全风险,这些风险与有线网络相比要大得多。”
Howard Schmidt 是美国信息系统安
http://blog.csdn.net/biancheng198031/archive/2007/11/03/1864610.aspx
allenxiong收录,使用标签:从ASCII编码谈起:从ASCII编码谈起:,时间:2008-1-22 19:40:07 | 相关网摘,我也收藏
从ASCII编码谈起:
我们需要了解的最早编码是ASCII码。它用7个二进制位来表示,由于那个时期生产的大多数计算机使用8位大小的字节,因此用户不仅可以存放所有可能的ASCII字符,而且有整整一位空余下来。如果你技艺高超,可以将该位用做自己离奇的目的:WordStar中那个发暗的灯泡实际上设置这个高位,以指示一个单词中的最后一个字母,同时这也宣示了WordStar只能用于英语文本。
由于字节有多达8位的空间,因此许多人在想:“呀!我们可以把128~255之间的编码用做个人的应用目的。”问题在于,同时产生这种想法的人相当多,而且在128~255之间的各个位置上应该存放什么这一问题上,真是仁者见仁智者见智。事实上,只要人们开始在美国以外的地方购买计算机,那么各种各样的不同OEM字符集都会进入规划设计行列,并且各人都会根据自己的需要使用高位的128个字符。如此一来,甚至在同语种的文档之间就不容易实现互换。ASCII可被扩展,最优秀的扩展方案是ISO 8859-1,通常称之为Latin-1。Latin-1包括了足够的附加字符集来写基本的西欧语言。
最后,这个人人参与的OEM终于以ANSI标准的形式形成文件。在ANSI标准中,每个人都认同如何使用低端的128个编码,这与ASCII相当一致。不过,根据所在国籍的不同,处理编码128以上的字符有许多不同的方式。这些不同的系统称为代码页。
同时,甚至更为令人头疼的事情正在逐步上演,亚洲国家的字符表有成千上万个字符,这样的字符表是用8位二进制无法表示的。该问题的解决通常有赖于称为DBCS(double byte character set,双字节字符集)的繁杂字符系统。
不过,仍然需要指出一点,多数人还是姑且认为一个字节就是一个字符,以及一个字符就是8个二进制位,并且只要确保不将字符串从一台计算机移植到另一台计算机,或者说一种以上的语言,那么这几乎总是可以凑合。当然,只要一进入Internet,从一台计算机向另一台计算机移植字符串就成为家常便饭了,而各种复杂状况也随之呈现出来。令人欣慰的是,Unicode随即问世了。
Unicode编码:
Unicode勇往直前地创建一种单一字符集,试图囊括地球上所有合理文字体系。每个字符在Unicode中一律以2个Byte编码。ISO颁布10646号标准叫UCS(Universal Character Set)。在UCS通用集中,每个字符用4个Byte编码。庆幸的是,Unicode策进会自欺欺人1991年以来便和UCS小组密切配合,从而使Unicode和ISO 10646保持一致辞。
仔细算来,康熙字典里的中文字就有4万多个,如果再加上里面没有的简体字,那么Unicode的6万字容量仅汉字就已用得大部分。对此,Unicode和UCS采用中、日、韩整合(CJK Unification)的解决方案,把中日韩文中笔划相近的字,尽量以一个单码来代表。经过中日韩整合的汉字,在Unicode中称Unihan(统汉字)。Unicode标准中,共有2万多个统汉字,所以它不包括日常罕见的汉字。Unihan统汉字在Unicode中主要分布在3400到9fff之间,此外f900和faff之间了有一些。其中BIG5和GB2312中的汉字和符号都在4000和9fff之间。
UCS通用字符集中,有UCS-2和UCS-4等编码方式,其中的'2'和'4'指的是字节数。就目前而言,在UCS-2码之前补上两个零字节,便可得到相对应的UCS-4码。
UTF-8编码与UTF-16编码:
UCS只是规定如何编码,并没有规定如何传输、保存这个编码。例如“汉”字的UCS编码是6C49,我可以用4个ascii数字来传输、保存这个编码;也可以用utf-8编码:3个连续的字节E6 B1 89来表示它。关键在于通信双方都要认可。UTF-8、UTF-7、UTF-16都是被广泛接受的方案。UTF-8的一个特别的好处是它与ISO-8859-1完全兼容。UTF是"UCS Transformation Format"的缩写。
用Unicode字符集写的英语文本是ASCII或Latin-1写的文本大小的两倍。UTF-8是Unicode压缩版本,对于大多数常用字符集(ASCII中0~127字符)它只使用单字节,而对其它常用字符(特别是朝鲜和汉语会意文字),它使用3字节。如果写的主要是英语,那么UTF-8可减少文件大小一半左右。反之,如果主要写汉、日、朝鲜语,那么UTF-8会把文件大小增大50%。UTF-8就是以8位为单元对UCS进行编码。
除非特别指定,XML处理器假设文本数据是UTF-8格式。
UTF-8的格式为:
http://blog.csdn.net/whoopee/archive/2006/03/06/616472.aspx
allenxiong收录,时间:2007-11-28 10:40:24 | 相关网摘,我也收藏
数vArguments 用来向对话框帧传递任何类型(包括数组类型)的参数;另外还有一个可选的参数 sFeatures 是用来定义对话框帧的显示效果,如位置、字体等等的;注意 Netscape Navigator 、Mozilla 和 Opera 浏览器是没有与之对应的方法的,也就是说除了 MSIE 之外其他几大浏览器都不支持用 showModalDialog 或showModelessDialog 显示对话框,如果你感兴趣的话这里有一篇文章能够教你如何通过其他方式来模拟一个模态对话框,详见 Simulating Modal Dialog Windows
http://blog.csdn.net/bat800/archive/2007/05/22/1621059.aspx
allenxiong收录,时间:2007-11-9 21:36:44 | 相关网摘,我也收藏
http://wz.csdn.net/storeit.aspx?t=java%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0_%e4%bd%bf%e7%94%a8%e6%b5%ae%e7%82%b9%e6%95%b0%e5%92%8c%e5%b0%8f%e6%95%b0%e4%b8%ad%e7%9a%84%e6%8a%80%e5%b7%a7%e5%92%8c%e9%99%b7%e9%98%b1+-+Just1Min%e7%9a%84%e4%b8%93%e6%a0%8f+-+CSDNBlog&u=http%3a%2f%2fblog.csdn.net%2fJust1Min%2farchive%2f2007%2f06%2f20%2f1660007.aspx
http://blog.csdn.net/Just1Min/archive/2007/06/20/1660007.aspx
allenxiong收录,使用标签:正则表达式快速入门,时间:2007-11-6 11:21:20 | 相关网摘,我也收藏
正则表达式快速入门
元字符:
/b 代表着单词的开头或结尾,也就是单词的分界处.如果要精确地查找hi这个单词的话,我们应该使用/bhi/b.
.是另一个元字符,匹配除了换行符以外的任意字符,*同样是元字符,它指定*前边的内容可以重复任意次以使整个表达式得到匹配。
.*连在一起就意味着任意数量的不包含换行的字符。
/d是一个新的元字符,匹配任意的数字,0/d/d-/d/d/d/d/d/d/d/d也就是中国的电话号码.为了避免那么多烦人的重复,我们也可以这样写这个表达式:0/d{2}-/d{8}。
/s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。/w匹配字母或数字或下划线或汉字。
/b/w{6}/b 匹配刚好6个字母/数字的单词。
字符转义:使用/来取消这些字符的特殊意义。因此,你应该使用/.和/*。当然,要查找/本身,你也得用//。
代码 说明
. 匹配除换行符以外的任意字符
/w 匹配字母或数字或下划线或汉字
/s 匹配任意的空白符
/d 匹配数字
/b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
重复:
常用的限定符
代码/语法 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
要想查找数字,字母或数字,你只需要在中括号里列出它们就行了,像[aeiou]就匹配任何一个元音字母,[.?!]匹配标点符号(.或?或!)
反义:
常用的反义代码
代码/语法 说明
/W 匹配任意不是字母,数字,下划线,汉字的字符
/S 匹配任意不是空白符的字符
/D 匹配任意非数字的字符
/B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符
替换:
正则表达式里的替换指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。
0/d{2}-/d{8}|0/d{3}-/d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。
/ (0/d{2}/)[- ]?/d{8}|0/d{2}[- ]?/d{8}这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔。你可以试试用替换|把这个表达式扩展成也支持4位区号的。
/d{5}-/d{4} |/d{5}这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字。之所以要给出这个例子是因为它能说明一个问题:使用替换时,顺序是很重要的。如果你把它改成/d{5}|/d{5}-/d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配替换时,将会从左到右地测试每个分枝条件,如果满足了某个分枝的话,就不会去管其它的替换条件了。
分组:
如果想要重复一个字符串又该怎么办?你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了。
(/d{1,3}/.){3}/d{1,3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:/d{1,3}匹配1到3位的数字,(/d{1,3}/.}{3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(/d{1,3})。不幸的是,它也将匹配256.300.888.999这种不可能存在的IP地址(IP地址中每个数字都不能大于255)。如果能使用算术比较的话,或许能简单地解决这个问题,但是正则表达式中并不提供关于数学的任何功能,所以只能使用冗长的分组,选择,字符类来描述一个正确的IP地址:((2[0-4] /d|25[0-5]|[01]?/d/d?)/.){3}(2[0-4]/d|25[0-5]|[01]?/d/d?)。
后向引用:
http://blog.csdn.net/sinton/archive/2007/04/02/1549369.aspx
allenxiong收录,使用标签:tomcat中的几点配置说明,时间:2007-11-6 11:20:27 | 相关网摘,我也收藏
tomcat中的几点配置说明
1. 如何加大tomcat连接数
在tomcat配置文件server.xml中的配置中,和连接数相关的参数有:
minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。
web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。Unix中如何设置这些参数,请参阅Unix常用监控和管理命令
tomcat4中的配置示例:
对于其他端口的侦听配置,以此类推。
2. tomcat中如何禁止列目录下的文件
在{tomcat_home}/conf/web.xml中,把listings参数设置成false即可,如下:
...
listings
false
...
3. 如何加大tomcat可以使用的内存
tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大。
Unix下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下设置:
JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'
需要把这个两个参数值调大。例如:
JAVA_OPTS='-Xms256m -Xmx512m'
表示初始化内存为256MB,可以使用的最大内存为512MB
http://blog.csdn.net/sinton/archive/2007/05/16/1611809.aspx
共35个网摘 [
1 2 ]
下一页