by:ccimage 2012-01-16
36次浏览
0条评论
by:ccimage 2011-11-15
163次浏览
0条评论
后来在这里看到了matrix67同学的文章,原文在这里。这才像是一篇希望别人让人看懂的文章。看完后本人也粗浅的总结一下,希望不需要借助任何代码,把算法以自然语言描述清楚,将晦涩的抽象逻辑实例化:
开始描述之前先定义被匹配的字符串为主串Source(m), 关键字为子串Key(n),大多数情况m>n。一般情况下的搜索的话,至少要将Key的每一个字符和Source做比较,KMP算法的精髓呢就是避免重复的比较:
首先将一种特殊的字符串匹配做例子,就是假设Key里面没有连续的重复子串,意思就是没有aa或者abab这样的情况。
这个例子之所以在KMP算法中是特殊的,是因为KMP算法搜索开始遍历Source,Key也同步遍历,这时会比较Source(i)和Key(j)(i==j), 假如遇到不等,j就回退,因为Key中没有重复的子串,j就退回0。
继续i++和j++,此后i和j已经不相等,没关系,还是比较Source(i)和Key(j),遇到不等,j=0,相等j++。
发现了吧,Source上始终是往前搜索的,那么何时停止呢?
1. j = n(严格程序上说是j=n-1,能明白就行),也就是到key的最后,那就表示Source中找到了Key,匹配成功。
2. i=m, 但j<n也就是匹配失败
==============看到这里,你基本应该懂了============
开始描述之前先定义被匹配的字符串为主串Source(m), 关键字为子串Key(n),大多数情况m>n。一般情况下的搜索的话,至少要将Key的每一个字符和Source做比较,KMP算法的精髓呢就是避免重复的比较:
首先将一种特殊的字符串匹配做例子,就是假设Key里面没有连续的重复子串,意思就是没有aa或者abab这样的情况。
这个例子之所以在KMP算法中是特殊的,是因为KMP算法搜索开始遍历Source,Key也同步遍历,这时会比较Source(i)和Key(j)(i==j), 假如遇到不等,j就回退,因为Key中没有重复的子串,j就退回0。
继续i++和j++,此后i和j已经不相等,没关系,还是比较Source(i)和Key(j),遇到不等,j=0,相等j++。
发现了吧,Source上始终是往前搜索的,那么何时停止呢?
1. j = n(严格程序上说是j=n-1,能明白就行),也就是到key的最后,那就表示Source中找到了Key,匹配成功。
2. i=m, 但j<n也就是匹配失败
==============看到这里,你基本应该懂了============
by:ccimage 2011-11-02
172次浏览
0条评论
这两天发现手机的电量下降的特别快,一开始还怀疑是什么软件造成的,把最近安装的几个软件都删除后发现问题并没有解决。后来看了一下设置,使用时间和待机时间居然是一样的。但是已经关闭了所有的程序包括后台任务了,也尝试关闭通知、位置、mobile me等等。还是在耗电。感觉上网搜了一下,还是网络的力量大,果然有很多人有同样的问题。看解决有个共同点,就是打开GPRS(就是3g或者EDGE,会显示E的)后就好了,其中有很多人说是彩信。我也照着打开GPRS果然问题得到解决,但是原因不是很理解。稍微分析一下,情况是这样的,因为上个月底我的包月流量快用完了,到现在就一直没开过数据服务。
感觉仅仅关闭GPRS是不会有这个问题的,因为我以前也经常关闭的。还有一个原因应该是重启之后重来没开过GPRS,我觉得这是关键。网上有些人说打开后收到彩信,这应该只是巧合,包括我在内很多人都没收到彩信,问题也解决了。
不知道这个问题是不是只会出现在越狱后的机器上,有待考证。
by:ccimage 2011-10-31
168次浏览
0条评论
by:ccimage 2011-10-30
192次浏览
0条评论




程序代码


