算法
编程界——周大神
这个作者很懒,什么都没留下…
展开
-
数据结构与算法之顺序存储二叉树
顺序存储二叉树顺序存储二叉树的概念基本说明从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组,看右面的示意图顺序存储二叉树的特点:1)顺序二叉树通常只考虑完全二叉树2)第n个元素的左子节点为 2 * n + 13)第n个元素的右子节点为 2 * n + 24)第n个元素的父节点为 (n-1) / 2需求:给你一个数组 {1,2,3,4,5,6,7},要求以二叉树前序遍历的方式进行遍历。 前序遍历的结果应当为 1,2,4,5,3,6原创 2021-01-19 15:11:13 · 206 阅读 · 0 评论 -
数据结构与算法之二叉树删除
二叉树删除二叉树-删除节点要求如果删除的节点是叶子节点,则删除该节点如果删除的节点是非叶子节点,则删除该子树.测试,删除掉 5号叶子节点 和 3号子树思路分析代码实现public class Treedemo { public static void main(String[] args) { HeroNode root = new HeroNode(1, "宋江"); HeroNode node2 = new HeroNode(2, "吴用");原创 2021-01-18 18:32:33 · 415 阅读 · 0 评论 -
数据结构与算法之二叉树查找
二叉树查找二叉树-查找指定节点要求1)请编写前序查找,中序查找和后序查找的方法。2)并分别使用三种查找方式,查找 heroNO = 5 的节点3)并分析各种查找方式,分别比较了多少次思路分析图解代码实现public class Treedemo { public static void main(String[] args) { HeroNode root = new HeroNode(1, "宋江"); HeroNode node2 = new原创 2021-01-18 16:12:44 · 262 阅读 · 1 评论 -
数据结构与算法之二叉树遍历
二叉树遍历遍历前序遍历: 先输出父节点,再遍历左子树和右子树中序遍历: 先遍历左子树,再输出父节点,再遍历右子树后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点小结: 看输出父节点的顺序,就确定是前序,中序还是后序二叉树遍历应用实例代码实现public class Treedemo { public static void main(String[] args) { HeroNode root = new HeroNode(1, "宋江");原创 2021-01-17 22:23:09 · 120 阅读 · 0 评论 -
数据结构与算法之存储分析
数组、链表、树的存储分析数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)。缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历)树存储方式的分析能提高数据存储,读取的效率, 比如利用 二叉排序树(Binary S原创 2021-01-11 23:29:30 · 294 阅读 · 0 评论 -
数据结构与算法之插值查找
插值查找原理介绍1)插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid处开始查找。2)将折半查找中的求mid 索引的公式 , low 表示左边索引left, high表示右边索引right.key 就是前面我们讲的 findVal3)int mid = low + (high - low) * (key - arr[low]) / (arr[high] - arr[low]) ;/插值索引/对应前面的代码公式:int mid = left + (right – left) *原创 2021-01-06 20:44:19 · 99 阅读 · 0 评论 -
数据结构与算法之二分查找
二分查找请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。思路分析代码实现 public static int erfengSearch(int[] arr,int left,int right,int findValue){ int mid=(left+right)/2; int midValue=arr[mid]; if (left&原创 2021-01-06 18:17:46 · 87 阅读 · 0 评论 -
数据结构与算法之排序
快速排序介绍快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列示意图代码实现public class QuickSortdemo { public static void main(String[] args) { int[] arr={57,-1,0,75,-原创 2021-01-04 00:44:42 · 136 阅读 · 0 评论 -
数据结构与算法之空间复杂度
空间复杂度基本介绍1)类似于时间复杂度的讨论,一个算法的空间复杂度(Space Complexity)定义为该算法所耗费的存储空间,它也是问题规模n的函数。2)空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度。有的算法需要占用的临时工作单元数与解决问题的规模n有关,它随着n的增大而增大,当n较大时,将占用较多的存储单元,例如快速排序和归并排序算法就属于这种情况3)在做算法分析时,主要讨论的是时间复杂度。从用户使用体验上看,更看重的程序执行的速度。一些缓原创 2021-01-02 18:06:52 · 191 阅读 · 0 评论 -
数据结构与算法之时间复杂度
算法的时间复杂度度量一个程序(算法)执行时间的两种方法1、事后统计的方法这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素, 这种方式,要在同一台计算机的相同状态下运行,才能比较那个算法速度更快。2、事前估算的方法通过分析某个算法的时间复杂度来判断哪个算法更优.举例说明–>忽略常数项举例说明–>忽略低次项举例说明–>忽略系数时间复杂度1)一般情况下,算法中的基本操原创 2021-01-02 18:02:22 · 319 阅读 · 0 评论 -
数据结构与算法之递归(回溯)
八皇后问题(回溯算法)问题介绍八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。算法思路分析1、第一个皇后先放第一行第一列2、第二个皇后放在第二行第一列、然后判断是否OK, 如果不OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适3、继续第三个皇后,还是第一列、第二列……直到第8个皇后也能放在一个不冲原创 2021-01-02 16:00:22 · 80 阅读 · 0 评论 -
数据结构与算法之递归
递归递归应用场景看个实际应用场景,迷宫问题(回溯), 递归(Recursion)概念递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。递归调用机制(1)打印问题public class RecursionTestdemo01 { public static void main(String[] args) { prints(10); } public static void prints(i原创 2021-01-01 10:27:32 · 224 阅读 · 1 评论