![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习
Shuangdui
性格开朗,没啥爱好,积极生活,正在读书
展开
-
编程之美——二进制数种1的个数
昨天看《编程珠玑》遇到一个问题,于是翻出来《编程之美》把数组循环左移和循环右移的问题搞懂了,又想到二进制中1的个数,是笔试面试中常考到和问到的经典题目,所以把《编程之美》上的几种方法实现了一下,发到这里以留后续再看。题目如下:对于一个字节的无符号整型变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能的高。解法一:通过除以2的方法,如果有余数就表示当前位置有一个1。原创 2012-11-25 15:24:36 · 520 阅读 · 0 评论 -
KMP算法
最近就在纠结这个KMP算法,一定要搞明白KMP字符串模式匹配详解来自CSDN A_B_C_ABC 网友KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度为O(m+n).。一. 简单匹配算法先来看一个简单匹配算法的函数:int Index_BF ( ch转载 2012-10-29 11:19:17 · 402 阅读 · 0 评论 -
用回溯法解决0-1背包问题
(1)、算法原理 用回溯法解问题时,应明确定义问题的解空间,问题的解空间应至少包含问题的一个(最优)解。定义了问题的解空间后,还应将解空间很好地组织起来,使得能用回溯法方便地搜索整个解空间。通常将解空间组织成树或图的形式。确定了解空间的组织结构后,回溯法从开始结点(根结点)出发,以深度优先方式搜索整个解空间。这个开始结点成为活结点,同时也成为当前的扩展结点。在当前的扩展节点处,搜索原创 2010-11-12 21:34:00 · 3043 阅读 · 3 评论 -
用分支限界解决0-1背包问题
(1)、算法原理分支限界法类似于回溯法,也是在问题的解空间上搜索问题解的算法。一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出解空间中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。由于求解目标不同,导致分支限界法与回溯法对解空间的搜索方式也不相同。回溯法以原创 2010-11-12 21:36:00 · 4725 阅读 · 1 评论 -
用贪心算法解决0-1背包问题
(1)、算法原理 贪心算法总是作出在当前看来是最好的选择,即贪心算法并不从整体最优解上加以考虑,它所作出的选择只是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广的许多问题它能产生整体最优解。如图的单源最短路径、最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,但其最终结果却是最优解的很好近似解。贪心算法求解的问题一般具有两个重要性质原创 2010-11-12 21:32:00 · 8880 阅读 · 2 评论 -
动态规划解决0-1背包问题
(1)、基本原理 动态规划算法(Dynamic Programming Algorithm, DPA)与分治法类似,其基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的,若用分治法解这类问题,则分解得到的子问题数目太多,以至于最后解决原问题需要耗费过多的原创 2010-11-12 21:27:00 · 1689 阅读 · 0 评论 -
编程之美——循环移位
在编程之美中有一节是讲述数组循环移位的情况:设计一个算法,把含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。不考虑时间复杂度的的方法就是每一位的移动方式,代码如下:RightShift(int * arr,int N,int K){while(K--){int t = arr[N-1];for(int i= N-1原创 2012-11-24 20:14:43 · 572 阅读 · 0 评论