随笔分类 -  基础算法

摘要:(1)问题描述 在一个圆形操场的四周摆放着 num 堆石子。先要将石子有次序地合并成一堆。规定每次只能选相邻的 2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的耗费力气。试设计一个算法,计算将 n 堆石子合并成一堆的最省力气数。 (2)算法思想 对于给定的 n 堆石子,当只有一堆时,不用搬 阅读全文
posted @ 2020-02-14 16:48 菜鸟的奋斗之路 阅读(4799) 评论(0) 推荐(1) 编辑
摘要:(1)问题描述 在 n × n 格的棋盘上放置彼此不受攻击的 n 个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n 后问题等价于在 n × n 的棋盘上放置 n 个皇后,任何 2 个皇后不放在同一行或同一列或同一斜线上。 (2)算法描述 a. 将第一个皇后放置在第 阅读全文
posted @ 2020-02-13 15:08 菜鸟的奋斗之路 阅读(1079) 评论(0) 推荐(0) 编辑
摘要:(1)问题描述:子集和问题的一个实例为<data, num>。其中 data = {x1, x2, ......, xn} 是一个正整数的集合,targetValue 是一个正整数。子集和问题判定是否存在 data 的一个子集 data1,使得 x1 + x2 + ...... + xn = tar 阅读全文
posted @ 2020-02-13 10:39 菜鸟的奋斗之路 阅读(2772) 评论(0) 推荐(0) 编辑
摘要:(1)算法描述 给定 num 种物品和一背包。物品 i 的重量是 weighti > 0,其价值为 pricei > 0,背包的容量为 capacity。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大? (2)举例 对于 0-1 背包问题的一个实例,num = 4,capacity = 阅读全文
posted @ 2020-02-12 16:34 菜鸟的奋斗之路 阅读(2521) 评论(0) 推荐(0) 编辑
摘要:(1)问题描述:有一批共 n 个集装箱要装上 2 艘载重量分别为 capacity1 和 capacity2 的轮船,其中集装箱 i 的重量为 wi,且装载问题要求确定是否有一个合理的装载方案可将这些集装箱装上这 2 艘轮船。如果有,找出一种装载方案。 例如:当 n = 3, capacity1 = 阅读全文
posted @ 2020-02-12 09:50 菜鸟的奋斗之路 阅读(1941) 评论(0) 推荐(0) 编辑
摘要:(1)问题描述:对于给定的集合 A{a1,a2,...,an},其中的 n 个元素互不相同,如何输出这 n 个元素的所有排列(全排列),时间复杂度为O(2n); 例如:{a, b, c} 全排列:{a, b, c}, {a, c, b}, {b, a, c}, {b, c, a}, {c, a, b 阅读全文
posted @ 2020-02-11 16:26 菜鸟的奋斗之路 阅读(3812) 评论(1) 推荐(0) 编辑
摘要:一、回溯算法主要思想 回溯法有“通用的解题法”之称。用它可以系统地搜索一个问题的所有解或任一解。回溯法是一个既带有系统性又带有跳跃性的搜索算法,它在问题的解空间树中,按深度优先策略,从根节点出发搜索解空间树。算法搜索至解空间树的任一结点时,先判断该结点是否包含问题的解。如果不包含,则跳过对以该结点为 阅读全文
posted @ 2020-02-11 16:14 菜鸟的奋斗之路 阅读(3870) 评论(0) 推荐(0) 编辑
摘要:(1)问题描述:给定 n 位正整数 a,去掉其中任意 k <= n 个数字后,剩下的数字按原来次序排列组成一个正整数。对于给定的 n 为正整数 a 和正整数 k 设计一个算法找出剩下数字组成的新数最小的删数方案; (2)算法设计:对于给定的正整数 a,计算删去 k 个数字后得到的最小数; (3)算法 阅读全文
posted @ 2020-02-11 11:31 菜鸟的奋斗之路 阅读(1172) 评论(0) 推荐(0) 编辑
摘要:(1)问题描述:假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。前提每个活动都有开始和结束时间,一个会场中多个活动不能交叉进行,只能按次序进行,设计一个有效的贪心算法进行安排。 (2)算法设计:对于给定的 activities 个带安排的活动,计算使用最少会场的时间表; (3)数据输入 阅读全文
posted @ 2020-02-10 18:28 菜鸟的奋斗之路 阅读(1690) 评论(0) 推荐(0) 编辑
摘要:贪心算法思想:不从整体最优上加以考虑,它所做出的选择只是在某种意义上的局部最优选择,当然希望贪心算法得到的最终结果也是整体最优的; 贪心算法性质:指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到; 最优装载问题 (1)问题描述:有一批集装箱要装上一艘载重量为 tatol 的轮船, 阅读全文
posted @ 2020-02-10 15:07 菜鸟的奋斗之路 阅读(1986) 评论(0) 推荐(0) 编辑
摘要:分治算法基本思想:将一个规模为 n 的问题分解为 k 个规模较小的子问题,这些子问题相互独立且与原问题相同; 给定已排好序的 n 个元素 array[0:n-1],现要在这 n 个元素找出特定元素x; 首先较容易想到的是用顺序搜索方法,逐个比较 array[0:n-1] 中元素,直至找出元素 x 或 阅读全文
posted @ 2020-02-09 15:07 菜鸟的奋斗之路 阅读(421) 评论(0) 推荐(0) 编辑
摘要:(1)完全二叉树的概念:前h-1层为满二叉树,最后一层连续缺失右结点!(标注:大根堆为升序,小根堆为降序) (2)首先堆是一棵全完二叉树,排序思路: a:构建一个堆分为两步: 1)创建一棵完全二叉树 2)调整为一个堆 b:算法描述: ① 创建一棵完全二叉树 ② while(有双亲){ A:调整为大根 阅读全文
posted @ 2019-07-31 19:56 菜鸟的奋斗之路 阅读(437) 评论(0) 推荐(0) 编辑
摘要:面试中常出现让你手写两个队列实现一个栈,两个栈实现一个队列的问题,很是头疼!今天就仔细将我分析,思考过的Java代码给大家分享一下:(一)两个队列实现一个栈: 两个队列添加元素,哪个队列为空,由于在输出元素时,要进行相应元素的移动(除去尾部元素),所以要在对应不为空的队列进行元素的添加;在输出数据时 阅读全文
posted @ 2019-07-18 16:16 菜鸟的奋斗之路 阅读(5781) 评论(0) 推荐(0) 编辑
摘要:最大子段和问题描述 给定由 n 个整数(可能为负整数)组成的序列a1,a2,a3...an,求该数列中连续子段和最大! 例如:当(a1,a2,a3,a4,a5)=(-2,11,-4,13,-5,-2)时,最大字段和为 20 (11 + (-4) + 13); 以下例子都是以int data[6] = 阅读全文
posted @ 2019-07-01 20:23 菜鸟的奋斗之路 阅读(1622) 评论(0) 推荐(0) 编辑
摘要:初始化一个数组: (1)冒泡排序的基本思想:重复的走过要排序的数列,一次比较两个元素,相邻两个元素进行交换,直到没有在需要交换为止。 a)比较相邻的元素。如果第一个比第二个大,就交换他们两个; b)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数; c 阅读全文
posted @ 2019-06-30 14:05 菜鸟的奋斗之路 阅读(1243) 评论(0) 推荐(0) 编辑