摘要: 问题是这样的,假设有一只股票a,a[1...n]代表股票a在第1到第n天所对应的股价,试找到一对值i,j,满足1j的情况出现,也就是先买入,然后才能卖出。下面我就给出这个问题的几个解法。穷举法最容易想到的就是该方法,通过穷举a[1...n]中所有天数组和(i,j)(1profit){profit=array[j]-array[i];}}}returnprofit;}int SingleSellProfit(const int array[], size_t array_size){ unsigned int i, j; int profit = INT_MIN; for(i = 0; i p. 阅读全文
posted @ 2013-08-16 19:06 sandyhit 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 问题描述: Rabin-Karp的预处理时间是O(m),匹配时间O( ( n - m + 1 ) m )既然与朴素算法的匹配时间一样,而且还多了一些预处理时间,那为什么我们还要学习这个算法呢?虽然Rain-Karp在最坏的情况下与朴素匹配一样,但是实际应用中往往比朴素算法快很多。而且该算法的期望匹配时间是O(n)【参照《算法导论》】,但是Rabin-Karp算法需要进行数值运算,速度必然不会比KMP算法快,那我们有了KMP算法以后为什么还要学习Rabin-Karp算法呢?个人认为学习的是一种思想,一种解题的思路,当我们见识的越多,眼界也就也开阔,面对实际问题的时候,就能找到更加合适的算法。.. 阅读全文
posted @ 2013-08-16 13:43 sandyhit 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 二.KMP算法 KMP算法之所以叫做KMP算法是因为这个算法是由三个人共同提出来的,就取三个人名字的首字母作为该算法的名字。其实KMP算法与BF算法的区别就在于KMP算法巧妙的消除了指针i的回溯问题,只需确定下次匹配j的位置即可,使得问题的复杂度由O(mn)下降到O(m+n)。在KMP算法中,为了确定在匹配不成功时,下次匹配时j的位置,引入了next[]数组,next[j]的值表示P[0...j-1]中最长后缀的长度等于相同字符序列的前缀。对于next[]数组的定义如下:1)next[j]=-1 j=02)next[j]=max k:00时,表示P[0...k-1]=P[j-k,j-1]因此K 阅读全文
posted @ 2013-08-16 10:47 sandyhit 阅读(241) 评论(0) 推荐(0) 编辑