算法
周成城
坚持去坚持
展开
-
快速排序算法
要点是如何把数组中大于key的都放它后面,小于他的都放它前面。 private static int sort(int[] A, int low, int high) { // TODO Auto-generated method stub int key = A[low]; int i = low; int转载 2016-03-01 16:43:56 · 276 阅读 · 0 评论 -
分治法、动态规划与贪心算法
分治法:将原问题划分为n个规模较小而结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就可得到原问题的解(即递归解决)能用分治法解决的问题一般包括四个特征:1、该问题的规模缩小到一定的程度就可以容易的解决2、该问题可以分解为若干规模较小的相同问题,即该问题具有最优子结构性质3、利用该问题分解出的子问题的解可以合并为该问题的解4、该问题所分解出的各个子问题是相互独原创 2016-03-08 11:48:41 · 736 阅读 · 0 评论 -
使用动态规划求解最长递增子序列(LIS)
给定一个数列,数列中的数是未排序、可重复的,求其最长递增子序列(LIS)的长度。如数列1 7 3 5 9 4 8其LIS为1 3 5 9或1 3 5 8则输出其长度4。先将数列存入数组Array中然后把Array[n]的LIS长度存入数组Result[n]中,如在数列1、7、3、5、9、4、8中,Array[0]为1,LIS长度为1,原创 2016-04-11 16:32:39 · 479 阅读 · 0 评论 -
使用动态规划求解最长公共子序列(LCS)
给出两个字符串,求其最长公共子序列的长度(LCS)如:abcdefghijbadfhcajie其LCS为a、d、f、h、j,则输出5注意子序列和子串是不同的,子串必须连续,子序列只要按顺序就行了,中间可以跳过某个字符。设字符串A的长度为m,B的长度为n,subA(i)表示A的前i个字符的子串则LCS(A,B)为:1)若A、B的最后一个字符相同,则为LCS(原创 2016-04-11 16:58:51 · 644 阅读 · 0 评论