算法研究
在日常的需求设计中,遍历组合是一个常见的问题。 例如:现在有N个不同的数。要求在其中找到M个数,使得M个数之和为指定的S,求所有满足条件的组合。 这是一个很明显的遍历组合的问题。一般采用递推算法,求出满足条件的解。
在“文本比较算法Ⅰ——LD算法”、“文本比较算法Ⅱ——Needleman/Wunsch算法”中介绍的LD算法和LCS算法都是基于动态规划的。它们的时间复杂度O(MN)、空间复杂度O(MN)(在基于计算匹配字符串情况下,是不可优化的。
在“文本比较算法Ⅰ——LD算法”中,介绍了编辑距离的计算。 在“文本比较算法Ⅱ——Needleman/Wunsch算法”中,介绍了最长公共子串的计算。 在给定的字符串A和字符串B,LD(A,B)表示编辑距离,LCS(A,B)表示最长公共子串的长度。
在“文本比较算法Ⅰ——LD算法”中介绍了基于编辑距离的文本比较算法——LD算法。 本文介绍基于最长公共子串的文本比较算法——Needleman/Wunsch算法。 还是以实例说明:字符串A=kitten,字符串B=sitting 那他们的最长公共子串为ittn(注:最长公共子串不需要连续出现,但一定是出现的顺序一致),最长公共子串长度为4。
在日常应用中,文本比较是一个比较常见的问题。文本比较算法也是一个老生常谈的话题。 文本比较的核心就是比较两个给定的文本(可以是字节流等)之间的差异。目前,主流的比较文本之间的差异主要有两大类。
目前,国内主流的搜索引擎无外乎GOOGLE、BAIDU、BING等。 这些搜索引擎都有一个共同点,就是都是基于文本搜索。例如:搜索“SHGetFileInfo”。搜索引擎会返回网页中包含“SHGetFileInfo”的网页。
昨日,看了一篇文章“在举国哀悼之日,我仅技术角度分析开心网暂停游戏后恢复存在的问题”。 文章里讨论了游戏暂停,但是游戏里的时间没有暂停的问题。导致在游戏重开的时候,原本应该收获的“菜”已经腐烂一片了。
在上文“GDI+绘制自定义行距的文本的三种方法。”中,介绍了绘制自定义行间距的多行文本的方法。 在第三种的方法中,启用了GdipDrawDriverString这个函数。这个函数可以定义每个字符的位置,这是它的优点。
在.NET中,绘制图形和文本用的是GDI+。 在实际的应用中,绘制多行文本是比较常见的,而且有时还要求在绘制多行文本时能指定文本的行间距。如下图: 注:由于图太大,只截了左边部分的图,右边有一小部分没有截图。
了解C#的人对typeof这个关键字再熟悉不过了。它是获得对象的类别,返回值是type。 在VB2005中和typeof对位的是GetType。可是,GetType的使用却充满着魅惑性。先看看下面的代码。
前几日,发布了博客“群发“站内信”的实现”,得到广大网友呼应,在此表示感谢。 看了网友的留言。发现大家对文中的前两种情况没有什么异议,对第三种方案争议颇多。我在此再把我的第三种情况详细的阐述一下,和大家交流。
在WinForm的开发中,有时有些特殊的要求。例如:在某个Form上彻底屏蔽中文输入法,使之不能切换到中文输入,不能进行中文输入。 这个问题看上去简单,实现起来并没有想象中的简单。下面,把我做的几个实验依次列举,就会发现,其实实现起来还是有一定难度的。
在实际的编程中,数组是运用很多的对象。象Array,List等都是对数组的一种封装。 我们看看下面两种的定义方法,能看出他们的区别吗? Dim tB1() As Byte Dim tB2() As Byte = {} 这两种都是定义一个字节数组,且数组里都没有元素。
在上文“在winform中运用FusionCharts图表(一)”中,介绍了Line2D的FusionCharts图表的XML基本属性。 本文将介绍如何在WinForm中显示图表,并且通过按钮点击显示不同的图表。
首先,先介绍GB2312-80编码。参看文章“GB2312编码”。以下内容来自那篇文章。 GB2312或GB2312-80是一个简体中文字符集的中国国家标准,全称为《信息交换用汉字编码字符集--基本集》,由中国国家标准总局发布,1981年5月1日实施。
目前,在一些网站上,运用了动画的FLASH的图表,给网页增色不少。下面两张图就是“中国站长联盟”网站给注册用户统计网站访问量的图表的截图。 这种带有动画效果的图表,立马使得网页亲切起来。
前两日,写了一篇“利用XML序列化实现程序配置文件”。利用XML序列化和反序列化对象来实现程序配置文件。本文将简述Xml.Serialization是如何序列化一个对象的。 先简单描述XML文件的结构如何。
近两日,用了DreamWeaver CS3中的SPRY组件。发现,它能自动的对一些输入进行前台认证。还算比较方便,它内置了一些验证的内容,例如:数字验证、字符串验证、邮政编码验证、日期验证等等。 不过,美中不足的是,它内置的一些验证,在中国的实际应用中并不是很大,因为它提供的一些验证都是以美国的标准来的,和中国的标准还有些差距。
前两日,偶见博客“创建类似于输入法窗口的非激活窗口”,觉得内容不错,决定试了试,发现有瑕疵,现将自己的测试过程赋予其后(本文测试用的是VB2005),和各位网友交流。 按照那篇的博文的第一种方法,新建了Form1,改写了Form1的CreateParams属性,将FormBorderStyle设置为System.Windows.Forms.FormBorderStyle.None。
有些应用程序在退出的时候,会将一些设置值写入到文件里,以便下次程序启动时调用,这个文件统称为配置文件。例如:Windows的扫雷程序,在每次启动的时候,都会出现在上次关闭的位置,就是因为扫雷程序在退出的时候将当前位置写入到配置文件里。
在很多网站系统(如CMS系统,SNS系统等),都有“站内信”的功能。 “站内信”不同于电子邮件,电子邮件通过专门的邮件服务器发送、保存。而“站内信”是系统内的消息,说白了,“站内信”的实现,就是通过数据库插入记录来实现的。
“一道算法题,看看大家的思路”,看了众多的回复,本人愚钝,没有看明白其中的奥妙。在细细研究《编程之美》中的文章后,终于理解了这个算法的思路。现将这个算法的演算过程以及代码实现(VB2005)赋予其后,和各位交流。
题目描述:有31,-41,59,26,-53,58,97,-93,-23,84十个数。SUM(N,M)表示从第N个数到到第M个数的和。例如:SUM(2,3)=-41+59=18。问:最大的和是多少?对应的N和M是多少? 这个题目并不难,实现的方法多种多样。
今日,碰到一个问题:如何在网页中高亮显示不区分大小写的关键字 例如:文本abcaBcabCaBCabcaBCa,关键字bc,在不区分大小写的情况,一共有6个匹配项。 则在网页中显示的是abcaBcabCaBCabcaBCa。
前文“还贷的那些事IV——等增额还贷的计算”,介绍了等增额还款。 实际中,在增额贷款中还应该有本文介绍的等增幅贷款。 等增幅贷款,顾名思义,就是每一期的还款额较上期有一个固定幅度的增加。
上文简单介绍了IQCar游戏。接下来将描述用计算机如何求出它的解法。 学过数据结构的,第一感觉就是用“深度优先搜索”或者是“广度优先算法”。就是不停的尝试每一种可能,直到到达解。然后将尝试的过程输出即可。
近日,给儿子买了一套IQCar的益智玩具,他玩的不亦乐乎。 我也在闲暇之时玩了一会,发现颇有意思,有两关还是有一定的难度的。于是,在想能不能用计算机来实现IQCar的解法。在时停时续的状态下,完成了主要的编程过程,现在将实现的过程发在网上,与各位网友交流一下。
前文介绍了还贷的基本知识,以及“等本还贷的计算”和“等额还贷的计算”。这两种贷款是目前银行推出的贷款方式,虽然有部分银行推出了“周周贷”等贷款,这也是这两种贷款的衍生。 纵观这两种的贷款,都有一个明显的特点,就是每月的还款额是不增长的(等本还贷是每月递减的;等额还贷是每月不变的)。
颜色C1到颜色C2的偏转值定义为,颜色C1沿顺时针方向偏转到颜色C2时所转过的角度。 偏转值和两颜色C1与C2的夹角类似,但不完全一样。两颜色的夹角表示为两颜色的色相值的夹角,取值范围为[0,180],C1和C2的夹角与C2和C1的夹角是一样的。
上文介绍了“等本还贷的计算”,作为目前银行提供的两大还贷方式,本文介绍另一种还贷方式:等额还贷 等额还贷:顾名思义,就是每月的还款额是一成不变的,其中,每月所还的本金在逐渐增加,每月所还的利息在逐渐减少。
上文介绍了还贷的基本概念,从本文开始介绍各种还贷方式。 目前,银行提供两种基本的还贷方式:等本还贷、等额还贷。 等本还贷:顾名思义,就是每月还款中,本金保持不变,利息在逐渐减少。这种方式,刚开始的时候还的比较多,随着时间的推移,每月的利息在逐渐减少,还款额也在减少,比较适合刚开始工作几年的年轻人,由于此时家庭负担较小,可以每月多支出还款额,后期由于组建家庭以及子女的教育费用等,开支较大,那么每月就可以少支出还款额。
这几日,看了一些博客。发现在一些博客的底部添加了一些版权信息,很新颖。如下图: 写信给博客园的客服,问如何做出来的。回复是添加自己的“签名”。无语了,只能自己研究了。 在分析了别人的页面后,终于摸索出制作方法。
现今这个社会,提前消费已经不是一个新鲜词了。随之而来的就是还贷。 可是,你能说清楚还贷是怎么回事吗?还贷的方式有哪些?每月还贷额是怎么计算的?每月还贷额中本金和利息是怎么计算的?我该如何选择还贷方式?金融机构还能开出哪些还贷方式来?这个系列的文章就是讨论“还贷”这个主题的。
写了一段有关颜色的文章,回顾过去几篇文章,做一个阶段性总结。利用前几篇文章的心得,推导出快速转换RGB模式与HSV模式的公式。 RGB模式:用R、G、B三个颜色的分量来表示颜色,分量的取值范围为[0,255],整数型 HSV模式:用H、S、V三个分量来表示颜色。
在“计算机中的颜色VII——快速计算纯色的偏转”中介绍了纯色的偏转。 本文对上文的公式进行扩展,扩展到任意的颜色。 颜色(R,G,B)偏转ω后,如何计算偏转颜色(R’,G’,B’) 具体的推导过程不详述了,和前文类似。
在颜色的实际使用中,通过更改颜色的色相值改变图片的颜色是常用的方法。 通过更改纯色的色相值称为纯色的偏转,例如:纯色(255,0,0)顺时针偏转60就得到纯色(255,255,0),逆时针偏转60得到纯色(255,0,255)。
日前在网上看到一道面试题。颇有意思,也细细的研究一番。现将该题发布于此,和各位交流一下。 某幢大楼有100层。你手里有两颗一模一样的玻璃珠。当你拿着玻璃珠在某一层往下扔的时候,一定会有两个结果,玻璃珠碎了或者没碎。
本人阅读了《编程之美》,参阅了其中的——计算字符串的相似度——一节。感觉颇为实用。现将这一文章贴于此处,并将代码赋予其后。 许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程度。
近两日,学习了ASP的EVAL函数。感觉上很实用,如果使用得当,能减轻很多代码的编写量,也使得代码更加简洁明了。 EVAL函数的原型: EVAL(expression) 其中expression是字符串参数,可以是表达式,可以是变量,甚至可以是语句。
在编程的一些算法中,交换函数虽然不起眼,但也是一个不可或缺的组成部分。少了它,很多算法就难以为继。交换函数定义就是交换两个变量的值。有一点编程基础的人都能很快速的写出代码来。 Public Shared Sub SwapNumber(ByRef N1 As Integer, ByRef N2 As Integer) Dim I As Integer I=N1 N1=N2 N2=I End Sub 这一段代码只写了Integer型的函数,其它类型的类似。
在上一文中,介绍了“如何快速计算颜色的色相值”,本文介绍从色相值到纯色的计算过程。之前已经介绍,色相值和纯色有着一一对应的关系。先看看传统的计算方法: 从图中计算的过程来看,还是比较繁琐的,再看看之前的纯色色相分布图。
在之前的文章中,给定一个颜色,它的色相值计算如下: 由公式可知,计算色相时要分为六种情况,计算略显复杂。有没有简单的计算方法呢?来看看下面这个图 上面这个图,表示纯色的色相分布,把纯色分为六个部分。
前一篇文章介绍了颜色的HSV表示方法,其中H表示色相,亦即表示在色相环上的位置。S表示颜色的纯度,当S=1时,表示颜色最纯,当S=0时,表示颜色没有纯度,此时表示为灰度色。V表示颜色的亮度,当V=1,颜色最亮,当V=0时,亮度最低,此时表示颜色为黑色。
在计算机中的实际应用中,除了RGB表示方法外,还有一种用的比较多的表示方法就是HSV(又称HSB)表示方法。它把颜色分为三个参量,一个是色相Hue,具体表示在色相环上的一种纯色,一个是饱和Saturation,具体表示纯色在颜色中的百分比,当S=1时,表示颜色最纯,当S=0时,表示灰度值。
在VB2005中,用来表示颜色的是Color结构,注意是结构,也就是不能继承的。下面把Color结构中的重要属性方法等介绍一下。大部分的资料来源于微软的MSDN。 重要的属性: 颜色的三分量 R:红色的分量,取值范围为0—255 G:绿色的分量,取值范围为0—25...
无论是设计网页还是编写程序,一个美观的界面是必不可少的。仔细分析界面的构成,无外乎两个因素:一是颜色、一个是形状。这个又被称为UI设计。美术功底好的人,是能设计出让人赏心悦目的界面来,欠缺美术功底的人,有时费尽心思也没辙。
前两日,写了一篇“遍历组合的实现——VB2005”。在数学分支里,排列与组合是不分家的。于是,动手写下本文。在上一文中,采用了递归调用,虽然便于理解,但是算法的效率上打个折扣。本文一并重写,改为循环调用。
本人由于工作关系,需要一段代码,将给定的字符串中的非汉字去除,只保留汉字部分。 这个一般用正则表达式比较简单,网上有一些匹配汉字的正则表达式,拿来经过改造就能实现我前面的要求。 注释一下,正则表达式[\u4e00-\u9fa5]表示匹配中文,则正则表达式[^\u4e00-\u9fa5]匹配非中文。
在VB2005中,读取文本文件中的文本可以采用的方法是System.IO.File.ReadAllText,这个函数有两个参数,一个是文件的文件名(包含路径);一个是文本的编码,如果省略,采用系统默认的编码。
早两日,在网上看到一张非常有意思的图片。把ASP常用的语法放在一张A4左右的纸上,打印出来,就放在电脑旁。一旦记不住某些语句的时候,就可以瞄上一眼。这个叫做Cheat Sheet。我把地址贴给大家,有兴趣的可以看一下 ASP/VBScript Cheat Sheet 感觉上,我经常用的上面没有,于是,自己做了一个,现在贴上来,让大家见笑了。