摘要:
队列 (先入先出原则) 如果说链表和顺序表是对数据的存取位置的组织方式,那么队列就是一种对于存取方式限制的组织方式。换一种方式描述的话就是,队列既可以采用链表来表示,也可以采用数组(线性表)来表示,我们限制的是对于存放数据的存取方式。 出从队首出,入插入队尾 队列:只允许在一端进行插入操作,而另一端 阅读全文
摘要:
栈(stack) 先进后出 栈:只允许在一端进行插入、删除操作的线性表。 空栈:不含任何数据元素的栈。 允许插入(也称进栈、压栈、入栈)、删除(也称出栈)的一端称为栈顶。 1. 用数组模拟栈的实现: 小邋遢的衣橱 小邋遢 MS.Jinlin 是个爱打扮的公主,他有很多晚礼服如"LALA" "NIHA 阅读全文
摘要:
枚举法 枚举算法解题的基本思路: 确定枚举解的范围,以及判断条件 选取合适枚举方法,进行逐一枚举,此时应注意能否覆盖所有的可能的解,同时避免重复。 在枚举时使用判断条件检验,留下所有符合要求的解。 1. 简单型枚举 就是可以通过简单的 for 循环嵌套就可以解决的问题 42 点问题 题目描述: 众所 阅读全文
摘要:
组合的递归算法 1. 无重复项的组合 以数组a[5]={1,2,3,4,5}为例,用C(5,num)表示从这5个数中选择num个数,求其所有的情况。 首先要明确,求一组数的组合问题,元素是没有位置要求的,即对于C(5,3)的求解{1,2,3}和{3,2,1}是一种情况。因此,为了防止结果的多余项,必 阅读全文
摘要:
差分与前缀和 1. 差分法 (解决区间加减问题) 当某一个数组要在很多不确定的区间,加上相同的一个数。我们如果每个都进行加法操作的话,那么复杂度 O(nm) 是平方阶的,非常消耗时间。 **如果我们采用差分法,将数组拆分,构造出一个新的拆分数组,通过对数组区间的端点进行加减操作,最后将数组和并就能完 阅读全文
摘要:
二分法实例 分巧克力 题目描述 儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有 N 块巧克力,其中第 i 块是 Hi×Wi 的方格组成的长方形。为了公平起见,小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足: 形状是正方形,边长 阅读全文
摘要:
贪心算法的实例练习 贪心算法与枚举法的不同之处在于每个子问题都选择最优的情况,然后向下继续进行,且不能回溯,枚举法是将所有情况都考虑,然后选出最优的情况。 贪心算法,在对问题求解时,不从整体考虑,而是采用一叶障目的选择方式,只选择某种意义上的局部最优解。并且,贪心算法是没有固定的模板可以遵循的,每个 阅读全文
摘要:
贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,在每一步选择中都采取最好或最优/最有利的选择,从而希望能够导致结果是最好的算法。 贪心算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪心 阅读全文
摘要:
动态规划(DP) 动态规划,(Dynamic Programming) : 通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。 分治与动态规划 共同点:二者都要求原问题具有最优子结构性质,都是将原问题分而治之,分解成若干个规模较小(小到 阅读全文
摘要:
分治算法 分治法,字面意思是**“分而治之”**,就是把一个复杂的问题分成两个或多个相同或相似的子问题,再把子问题分成更小的子问题直到最后子问题可以简单地直接求解,原问题的解即子问题的解的合并。 由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。反复应用分治手段,可以使子问题 阅读全文