摘要: 穷举的模式匹配算法时间代价:最坏情况比较n-m+1趟,每趟比较m次,总比较次数达(n-m+1)*m。复杂度为O(m*n)。原因在于每趟重新比较时,目标串的检测指针要回退,而这回退后再进行的计算很多是没必要。改进的模式匹配算法(KMP算法)可使目标串的检测指针不回退。总的比较次数最坏为n,求next函数的比较次数为m,所以总的时间复杂度为O(n+m)。 假设S串匹配到i位置,T串匹配到j位置,那么穷举法和KMP算法的区别就在于失配情况下所做的处理。我们的字符串下标从0开始。穷举法中,如果当前字符匹配,即S[i]=T[j],则令i++, j++,继续匹配下一个字符;如果失配,即S[i]!=T... 阅读全文
posted @ 2012-03-24 00:54 爱也玲珑 阅读(574) 评论(0) 推荐(0) 编辑
摘要: 回溯法解决八皇后问题回溯发的步骤: 从第一行开始进行,设前i-1行上的皇后已经布局好,互不攻击。现考虑第i行上的皇后的位置, 使之与前i-1行上的皇后也都互不攻击。 (1)检查第i行上的皇后与前i-1行的皇后是否互不攻击。若有攻击,则将第i行上的皇后右移一个位置, 重新进行这个过程;若无攻击,则考虑安排下一行上的皇后位置。 (2)若安排好的皇后是最后一行,则说明已经找到了8个皇后互不攻击的一个布局,将这个布局输出, 然后将该行上的皇后右移一个位置,重新进行这个过程,以便寻找下一个布局。View Code #include<iostream>using namespace std;i 阅读全文
posted @ 2012-03-22 16:44 爱也玲珑 阅读(913) 评论(0) 推荐(0) 编辑
摘要: 所有变量在内存中的存储都有对齐问题,包括结构体和类(对象)等,只是这些对程序员是透明的,不需要关心。说白了,对齐就是在空间与复杂度上达到平衡,在可接受的空间浪费前提下,尽可能提高相同运算过程的速度。 举个例子,现在有两个变量:char A; int B; 在不考虑对齐时,A变量从内存地址0开始分配,占0x00内存,B变量占0x01-0x04。一般情况下,地址总线总是按照对齐后的地址来访问的。计算机的处理过程是先将0x00-0x03共32位读入寄存器,与0x000000FF做与运算或者通过左移24位再右移24位得到A的值。获得B变量的方法是将0x00-0x03这32位读入寄存器,得到低24... 阅读全文
posted @ 2012-03-20 15:26 爱也玲珑 阅读(719) 评论(0) 推荐(0) 编辑