文章分类 - 数据结构与算法
摘要:由于最近工作比较忙,好长时间都没有更新博客了,今天就分享下分治思想。 一: 思想 有时候我们处理一个复杂的问题,可能此问题求解步骤非常杂,也可能是数据非常多,导致我们当时很难求出或者无法求出,古语有云: 步步为营,各个击破,这个思想在算法中称为分治思想,就是我们可以将该问题分解成若干个子问题,然后我
阅读全文
摘要:记得广告中经常听到过,抱着试试看的态度买了3个疗程,效果不错........ 也经常听人说过什么车到山前必有路,船到桥头自然直。 哈哈,这种思想就是回溯思想,也可称为试探思想。 一: 思想 有时我们要得到问题的解,先从其中某一种情况进行试探,在试探过程中,一旦发现原来的选择是错误的,那么就退回一步重
阅读全文
摘要:说到“贪”字,很邪恶的一个词,记得和珅和大人拆解过这个字,为”今“和”贝“,而”贝“字分解成”上面的那个XX“和”人“,意思就是说 今天你贪了,明天一座监狱就把你套起来,纵观古今,有多少豪杰与"贪“结下了不解之缘,呵呵,扯远了。 这个贪心的行为在算法中也成为了一种指导思想,也就是说贪心算法所作出的选
阅读全文
摘要:今天分享一下枚举思想,这种思想也常是码畜,码奴常用的手段,经常遭到码农以上级别的鄙视,枚举思想可以说是在被逼无奈时最后的狂吼。 一: 思想 有时我们解决某个问题时找不到一点规律,此时我们很迷茫,很痛苦,很蛋疼,突然我们灵光一现,发现候选答案的问题规模在百万之内, 此时我们就想到了从候选答案中逐一比较
阅读全文
摘要:今天说说递归思想,在我们编码时,有的时候递归能够让我们的算法更加通俗易懂,并且代码量也是大大的减少。比如我先前的系列中说到了 关于树的“先序,中序和后序”遍历,那么看看用递归来描叙这个问题是多少的简洁,多么的轻松。 看看,多么简洁明了。当然递归都是可以改成非递归的,但是就不见得简洁和通俗易懂了。 一
阅读全文
摘要:像俺一样奋斗在一线的码农们,一谈到学编程,都是说要学会XX语言就OK了,其实我们理解的有一点点的偏差,因为我们只说到了 三分之一,其实真正的编程应该是:编程=数据结构+算法+XX语言。 对的,XX语言只是一个工具而已,就好比我们知道用笔来写字,但是不见得我们就能写出一手让张恨水为之倾倒的好字,其实我
阅读全文
摘要:1.分治 分治法的设计思想是,将一个难以直接解决的大问题,分割成k个规模较小的子问题,这些子问题相互独立,且与原问题相同,然后各个击破,分而治之。 分治法常常与递归结合使用:通过反复应用分治,可以使子问题与原问题类型一致而规模不断缩小,最终使子问题缩小到很容易求出其解,由此自然导致递归算法。 根据分
阅读全文
摘要:注:转载请注明:http://www.cnblogs.com/ECJTUACM-873284962/ 枚举法的基本思想 枚举法的基本思想是根据提出的问题枚举所有可能状态,并用问题给定的条件检验哪些是需要的,哪些是不需要的。能使命题成立,即为其解。 枚举结构:循环+判断语句。 枚举法的条件 虽然枚举法
阅读全文
摘要:在学习枚举算法之前,首先问有关枚举的几个问题 1. 为什么要进行枚举? 2. 需要对哪些对象进行枚举? 3. 如何进行枚举? 4. 枚举的结束条件是什么? 现在针对两个使用枚举算法的实例对以上问题进行分析. 实例一:熄灯问题 给定一个5×6的棋盘,上面有灯,每个灯都有各自的按钮,每个按钮按下去都会使
阅读全文
摘要:枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件 <1>可预先确定候选答案的数量 <2>候选答案的范围在求解之前必须有一个确定的集合 例一,求解哪些数字的组合满足下图所示的格式 例二,在等号左边的数字之间填入加减乘除任意一个符号,使等式成立。 需要考虑的问题 <1>当填入除
阅读全文
摘要:题记: 最近刚研究了动态规划,感觉确实是算法思想中比较晦涩深奥的一种,解法2就是用动态规划,一般都是用数组记录尝试过的解法结果,为后续的解法提供剪枝。对于这道题目,解法1,解法3的思路比较简单易懂。 解法1:用两个for循环找出所有子串,第三个for循环用于判断该子串是否为回文,是回文则且比已找到的
阅读全文
摘要:题目 给一个由数字组成的字符串。求出其可能恢复为的所有IP地址。 样例给出字符串 "25525511135",所有可能的IP地址为: [ "255.255.11.135", "255.255.111.35"](顺序无关紧要) 分析 方法一:直接三种循环暴力求解 public class Soluti
阅读全文
摘要:Chrome内嵌开发者工具。它具有丰富的功能特色,比如元素,网络以及安全。今天,我们将完全关注javascript的console. 当我才开始编程的时候,我只是将console用作纪录服务器的响应。但是后来经过一些教学的帮助,我开始发现console可以做的更多。 在这我们讲一些你可以用conso
阅读全文
摘要:1.next_permutaton生成字典序全排列,要先将数组排序。 2.prev_permutation生成逆字典序排列 3.递归枚举
阅读全文
摘要:主要包括全排列和回溯两类,其中全排列可以递归与非递归,回溯也可以递归与非递归。于是加一起有4种解法。 #include <iostream> #include <algorithm> using namespace std; template <size_t N> struct ArraySizeH
阅读全文
摘要:全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总结帮助大家更好的学习和理解。对本文有任何补充之处,欢迎大家指出。首先来看看题目是如何要求的(百度迅雷
阅读全文
摘要:Contents 代入法 递归树法 主方法 第四章介绍分治策略,以最大子数组和矩阵乘法为实例。这两个问题都很简单,重点放在了介绍三种求解递归式的方法上:代入法、递归树法、主方法。个人认为主方法最为实用。对于最大子数组的解法就是二分法,矩阵乘法简单的分治没办法缩小复杂度,因此引入了Strassen算法
阅读全文
摘要:Recursion Tree 在使用分治法( Divide and Conquer ) 来求解问题的过程中不可避免会用到递归( Recursion ),这给算法的复杂度分析带来了麻烦。但是幸运的是,递归树这种方法总能有用;不幸的是,它将会用到我们一个又爱又恨的符号,也就是 “点点点” ( … ) 下
阅读全文
摘要:递归分析一般利用的方法是主定理,辅助的方法有替换法,递归树方法~ 主定理: 递归树: 主定理的证明可以通过递归树的方法进行; 主定理适用的范围比较局限,有些情况不能被包括,这些情况就需要利用递归树的方法了, 主定理的case1是f(n)小于nlogba多项式时间,原定理描述为f(n)=O(nlogb
阅读全文
摘要:上面这段代码的循环复杂度为O(n),因为循环体中的代码需要执行n次 上面这段代码的时间复杂度为O(n²)。 分析,由于当i=0时,内循环执行了n次,当i=1时,内循环则执行n-1次。。。。。。当i=n-1时,内循环执行1次,所以总的执行次数应该是n+(n-1)+(n-2)+...+1=n(n+1)/
阅读全文

浙公网安备 33010602011771号