![](https://img-blog.csdnimg.cn/20210611132212523.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构、算法
文章平均质量分 58
数据结构、算法
Whitemeen太白
这个作者很懒,什么都没留下…
展开
-
平衡二叉树的构造过程图解
平衡二叉树实现的实例选取一组数据,10个结点来构造平衡二叉树。int arr[10] = { 2,1,0,3,4,5,6,9,8,7 };1. LL型:首先数据为2的结点作为根结点插入,接着插入1,仍是平衡的,再插入0是,2的平衡因子变为2,此时出现了不平衡,因此需要进行调整,最低不平衡结点为2,属于LL型,调整过程如图1所示。2. RR型接着插入3,是平衡的,再插入4,此时出现了不平衡,结点 1 和 2 的平衡因子都为 -2,结点2为最低不平衡结点,属于RR型,调整过程如图2所示接着插入原创 2021-06-11 01:10:31 · 4560 阅读 · 0 评论 -
算法设计: 五、分支界限法(1. 旅行售货员问题)—— C++实现 - 算法分析
分支界限法分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树,裁剪那些不能得到最优解的子树以提高搜索效率。分支界限法解题的一般思路:(1)分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。(2)搜索方式:以广度优先或以最小耗费优先的方式搜索解空间树。分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。(3)在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生原创 2021-04-21 21:39:11 · 3359 阅读 · 0 评论 -
算法设计: 二、递归转非递归的转化方案(Hanio塔非递归算法) —— java实现 - 算法分析
非递归化非递归化就是指不引入堆栈等辅助空间进行计算的算法。更确切地说,非递归是指辅助的空间为O(1)的算法(辅助空间的规模和问题的输入规模无关)。引入堆栈的所谓非递归本质上还是递归,只不过原来由编译器做的事让你的程序来模拟实现了。不是所有的可计算问题都可以由递归转化为递推的。例如著名的Ackermann函数,就没有递推算法,除非引入堆栈等辅助结构。尾递归是最简单的一类直接可以转化为递推的递归算法,另外还有很多方法将递归转化为递推,例如利用Cooper变换,反演变换,T1,T2变换,C变换,RR变换原创 2021-04-21 20:44:49 · 380 阅读 · 0 评论 -
算法设计: 五、回溯法(1. 0-1 背包问题)—— C++实现 - 算法分析
回朔法回朔法有通用解题法之称,可以系统地搜索一个问题的所有解或者任一解,他是一个即带有系统性又带有跳跃性的搜索算法。回朔法算法解题的一般思路:针对所给问题,定义问题的解空间;确定易于搜索的解空间结构;以深度优先的方式搜索解空间。利用回朔法求解 0-1 背包问题。我们有 n 种物品,物品 j 的重量为 wj,价格为 pj。我们假定所有物品的重量和价格都是非负的。背包所能承受的最大重量为 c。如果限定每种物品只能选择 0 个或 1 个。有六件物品,体积和价值见下表,背包容量为 25原创 2021-04-21 17:10:13 · 1211 阅读 · 0 评论 -
算法设计: 四、贪心算法(2. 最小生成树 Prim 算法)—— java实现 - 算法分析
Prim 算法计算最小生成树最小生成树的定义:最小生成树是一副连通加权无向图中一棵权值最小的生成树。假设给定无向图 G 一共有 n 个顶点,那么最小生成树一定会有 n-1 条边。求解思想:选定一个点做为一个集合 a,剩下的点为另一个集合 b;将横跨两个集合且权重在其中最小的边加入最小生成树;将刚刚加入最小生成树的边中不在集合 a 中的点加入集合 a,直到所有的点加入集合 a。流程图:源码:public class Prim { static int sum=0; static i原创 2021-04-21 16:19:58 · 1081 阅读 · 0 评论 -
算法设计: 四、贪心算法(1. 单源最短路径问题)—— java实现 - 算法分析
贪心算法贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法思路:建立数学模型来描述问题;把求解的问题分成若干个子问题;对每一子问题求解,得到子问题的局部最优解;把子问题的解局部最优解合成原来解问题的一个解利用贪心算法解题,需要注意两个问题:问题是否适合用贪心法求解。用贪心法解题很方便,但它的适用范围很小,判断一个问题是否适合用贪心法求解,目前还没有一个通用的方法,在信息学竞赛中,需要凭个人原创 2021-04-21 16:08:41 · 2913 阅读 · 1 评论 -
算法设计: 三、动态规划 (2. 多段图问题)—— java实现 - 算法分析
一、动态规划思想把待求解问题分解成若干个子问题,先求解子问题,然后由这些子问题的解得到原问题的解,但动态规划求解过的子问题的结果会被保留下来,不像递归那样每个子问题的求解都要从头开始返回求解。动态规划求解问题的关键在于获得各个阶段子问题的递推关系式:分析原问题的最优解性质,刻画其结构特征递归定义最优值自底向上(由后向前)的方式计算最优值根据计算最优值时得到的信息,构造一个最优解。1、动态规划的最优决策原理活动过程划分为若干个阶段,每一阶段的决策,依赖于前一阶段的状态,由决策所采取的动原创 2021-04-21 15:53:45 · 2945 阅读 · 3 评论 -
算法设计: 三、动态规划 (1. 0-1 背包问题)—— java实现 - 算法分析
算法思想动态规划算法思想:把待求解问题分解成若干个子问题,先求解子问题,然后由这些子问题的解得到原问题的解,但动态规划求解过的子问题的结果会被保留下来,不像递归那样每个子问题的求解都要从头开始返回求解。动态规划求解问题的关键在于获得各个阶段子问题的递推关系式:分析原问题的最优解性质,刻画其结构特征。递归定义最优值。自底向上(由后向前)的方式计算最优值。根据计算最优值时得到的信息,构造一个最优解。0-1 背包问题:我们有 n 种物品,物品 j 的重量为 wj,价格为 pj。所有物品的重原创 2021-04-21 15:16:35 · 506 阅读 · 0 评论 -
java实现swap()函数 交换同一对象任意指定的两个属性值(包装类+反射 实现)
先挂一下代码,之后再进行解析。package test;import java.lang.reflect.Field;public class Test { private Character from; private Character pass; private Character to; Test() {} Test(Character from, Character pass, Character to) { this.from = from; this.pas原创 2021-04-18 17:46:06 · 543 阅读 · 0 评论 -
算法设计: 二、递归与分治策略 (1. Hanio塔问题)—— java实现 - 算法分析
Hanio塔问题原创 2021-04-16 10:31:05 · 424 阅读 · 0 评论 -
算法设计:二、快速排序算法优化(快速排序随机基准算法)—— 测试过程及结果分析
一、快速排序算法别急,首先给出快速排序一般算法,即快速排序的非随机基数算法。快速排序算法 - 源码://快速排序算法实现package quikesort;public class QuikeSort { public static int[] array = {49, 38, 65, 97, 76, 13, 27, 49}; public static void main(String[] args) { QuikeSort qs = new QuikeSort();原创 2021-04-14 12:48:45 · 1545 阅读 · 0 评论 -
算法设计: 二、递归与分治策略 (2. 快速排序、快速排序随机基准算法)—— java实现 - 算法分析
分治法基本思想将一个规模为 n 的问题分解为 k 个规模较小的问题,这些子问题相互独立且与原问题相同。递归地解这些子问题,然后将各子问题的解合并得到原问题的解。1、快速排序算法(运用了二分搜索技术)2、Hanoi 塔问题...原创 2021-04-13 20:15:13 · 504 阅读 · 0 评论 -
求解:树的叶子结点的相关问题?
已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度3的结点,则该树有几个叶子结点?设该树中的叶子数为n0个.该树中的总结点数为n个,则有:n=n0+n1+n2+…+nm (1)又有除根结点外,树中其他结点都有双亲结点,且是唯一的(由树中的分支表示),所以,有双亲的结点数为:n-1=0n0+1n1+2n2+…+mnm (2)联立(1)(2)方程组可得:叶子数为:n0=1+0n...原创 2021-04-13 15:20:05 · 2541 阅读 · 0 评论 -
算法设计:一、NP完全性理论
NP完全问题(NPC问题)概述P和NP对于一个问题,如果存在一个图灵机,对这个问题的任何实例,都能给出回答,那么这个问题就称作可解的;如果存在一个图灵机,又存在一介多项式P,在给定问题的实例后(设n是给定实例在0、1编码下的长度),这个图灵机能在P(n)步内给出回答,那么该问题称作多项式时间可解的。图灵机可分为确定型和非确定型。确定型图灵机在多项式时间内可解决的全部问题类记作 P。非确定型图灵机在多项式时间内可解决的全部问题类,记作NP。由于确定型机器是非确定型机器的特殊情形,故P=NP。有趣的是相反的原创 2021-04-13 15:15:29 · 281 阅读 · 0 评论 -
循环队列实现原理
循环队列解决的是“假溢出”问题,但是仍然会出现真正的溢出问题假溢出指的是下标溢出,真溢出指的是空间溢出这么说吧,队列的maxsize小于需要的大小,然后队列中元素不允许覆盖,还是会发生溢出。...原创 2021-04-13 15:22:08 · 2481 阅读 · 0 评论