算法设计
文章平均质量分 82
奔跑的青年
这个作者很懒,什么都没留下…
展开
-
03算法笔记——【分治法】分治法与二分搜索,棋盘覆盖问题
1、分治法分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归的解这些子问题,然后将各子问题的解合并得到原问题的解。 分治法所能解决的问题一般具有以下几个特征: 1) 该问题的规模缩小到一定的程度就可以容易地解决 2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。 3) 利用该问转载 2014-05-12 14:54:16 · 504 阅读 · 0 评论 -
最长公共子序列
一: 作用 最长公共子序列的问题常用于解决字符串的相似度,是一个非常实用的算法,作为码农,此算法是我们的必备基本功。二:概念 举个例子,cnblogs这个字符串中子序列有多少个呢?很显然有27个,比如其中的cb,cgs等等都是其子序列,我们可以看出子序列不见得一定是连续的,连续的那是子串。 我想大家已经了解了子序列的概念,那现在可以延伸到两个字符串了转载 2014-05-22 20:37:28 · 626 阅读 · 0 评论 -
贪心算法
贪心算法一、基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前转载 2014-05-22 15:56:18 · 360 阅读 · 0 评论 -
分治算法 概念讲解
分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计转载 2014-05-22 15:54:38 · 596 阅读 · 0 评论 -
动态规划算法 概念讲解
一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能转载 2014-05-22 15:52:31 · 859 阅读 · 0 评论 -
二分搜索查找
二分搜索技术题目描述给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。输入输入包括若干个用例,第一行为一个正整数n表示用例个数,接下来每个用例占两行,第一行为为一个正整数k和x,表示k个元素,要求查找x,第二行为k个已排序正整数,输出每个用例用一行输出找出的元素的位置和比较次数,用一个空格隔开,如果不存在,则位置用0表示。样例输入4原创 2014-05-22 10:36:42 · 924 阅读 · 0 评论 -
04算法笔记——【分治法】合并排序
合并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。合并排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序,合并排序也叫归并排序。转载 2014-05-12 15:00:18 · 525 阅读 · 0 评论 -
02算法笔记——NP完全理论
第一章,算法概述,定义什么的,复杂度什么的没有什么新鲜的,是个程序员都知道。相对来时,值得一提的是NP完全性理论。累赘的话不多说,直接来几个定义: 多项式时间:在计算复杂度理论中,指的是一个问题的计算时间m(n)不大于问题大小n的多项式倍数。通俗点来说,多项式时间就是指时间复杂度是个多项式,或者说,就是这个程序运行的时间随着数据规模n变化的函数为f(n),那么,f(n)是个多项式函转载 2014-05-12 14:52:30 · 545 阅读 · 0 评论 -
全排列 整数划分问题
全排列问题键盘输入n(1样例输入:3ABC样例输出:A B CA C BB A CB C AC B AC A B#includeusing namespace std;void pailie(char a[],int n,int i){int j;if(n==i) //一个全排列已经完成,打印整个排列{for(j=1;j原创 2014-05-18 13:52:25 · 647 阅读 · 0 评论 -
01算法笔记——【递归】排列问题,整数划分问题,Hanoi问题
递归的概念想必大家都清楚,概念神马的直接略过。这里介绍递归相关的几个问题。 1、排列问题 设R={r1,r2,...,rn}是要进行排列的n个元素,Ri=R-{ri}。集合x中元素的全排列记为Perm(X)。(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列。R的全排列可归纳如下: 当n=1时,Perm(R)=(r),其中转载 2014-05-12 11:31:09 · 615 阅读 · 0 评论 -
背包问题动态规划详解
动态规划是用空间换时间的一种方法的抽象。其关键是发现子问题和记录其结果。然后利用这些结果减轻运算量。比如01背包问题。因为背包最大容量M未知。所以,我们的程序要从1到M一个一个的试。比如,开始任选N件物品的一个。看对应M的背包,能不能放进去,如果能放进去,并且还有多的空间,则,多出来的空间里能放N-1物品中的最大价值。怎么能保证总选择是最大价值呢?看下表。测试数据:10,33,转载 2014-05-28 16:56:12 · 412 阅读 · 0 评论