算法与数据结构
。
太阳是我啃圆的 i
这个作者很懒,什么都没留下…
展开
-
算法 —— 错排算法
错排算法1.认识:什么是错排算法?举个简单的例子,教室里有十个座位(1 ~ 10),十位同学分别坐在一个不同的位置上(1 ~ 10),现要求打乱所有同学的位置,打乱规则如下:所有的同学都不能出现在原来的位置上,问有多少种打乱的方法?引出错排问题:有n个正整数1,2,3,……n,将这n个正整数重新排列,使其中的每一个数都不在原来的位置上,这种排列称为正整数1,2,3,……n的错排,问这n个正...原创 2020-05-08 17:04:17 · 1459 阅读 · 0 评论 -
java哈希表开散列(哈希桶)实现(HashMap、HashSet)
哈希表一、概念在顺序结构和平衡树中,元素与其存储下标没有直接的对应关系,每查找一个元素时,必须要遍历这个结构进行多次比较才能找到这个元素,而现在我们想不经过任何比较,一次就从表中查找到这个元素,通过某些方法实现的这种存储结构就是哈希表。二、基本思想在哈希表中发通过某种函数使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。在哈希表中主要进行两...原创 2020-03-24 21:34:14 · 973 阅读 · 0 评论 -
java堆和优先级队列PriorityQueue的使用及实现
在谈优先级队列之前先简单说一下堆的概念。堆(heap)一、概念1.堆在逻辑上是一棵完全二叉树2.物理上是保存在数组中3.满足任意结点的值都大于其子树中结点的值,叫做大堆,或者大根堆,或者最大堆4.反之,则是小堆,或者小根堆,或者最小堆5.堆的基本作用是,快速找集合中的最值二、大小根堆的建立向下调整实现调整过程:1.判断 index 位置有没有孩子1)index 如果已经是叶子...原创 2020-03-03 15:28:05 · 1128 阅读 · 0 评论 -
java中的二叉搜索树
二叉搜索树一、概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树如下图所示就是一个二叉搜索树:二、搜索树操作1.查找如果根节点的值等于要查找的值,返回true如果根节点的值大于要查找的值,那么在其左子树查找...原创 2020-03-23 19:23:54 · 297 阅读 · 2 评论 -
(堆、快速、归并)排序总结及java实现
1.堆排序(Heapsort)5.1算法描述堆排序是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。是一种不稳定的排序算法。排序过程描述:1.将待排序数组(R1,R2….Rn)构建成大根堆,此堆为初始的无序区2.将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,...原创 2020-03-08 20:15:38 · 272 阅读 · 0 评论 -
二叉树的前序、中序、后序、层序遍历,Java实现(递归、非递归)
关于二叉树的内容,我觉得二叉树最核心的地方就是它的几种遍历方式,基本上所有的问题都是围绕着几种遍历方式来的。因此就在这总结一下这几种遍历方式。前序遍历一、简介前序遍历(DLR),是二叉树遍历的一种,也叫做先根遍历、先序遍历,可记做根左右。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。若二叉树为空则结束返回,否则...原创 2020-02-26 17:01:18 · 6726 阅读 · 2 评论 -
java常见七大排序算法总结
一、定义排序就是将一组“无序”的对象按照某种规则使其变得“有序”的过程。二、术语说明1.稳定: 排序序列中如果a=b,原序列中a在b的前边,排序之后a仍然在b的前边2.不稳定: 排序序列中如果a=b,原序列中a在b的前边,排序之后a可能在b的后边三、算法思想与实现1.冒泡排序1.1 算法描述在要排序的序列中,对当前还未排好序的范围中的所有数,相邻的两个数依次进行比较,让较大的数向上...原创 2020-02-22 18:25:34 · 336 阅读 · 0 评论 -
汉诺塔问题
问题:汉诺塔问题的算法分析和程序编写基本思路:假设初始有n个盘子,3个柱子分别为A、B、C,为了将盘子从A移动到C,可以分为以下三步执行:1.以C柱作为中间柱,将A柱上的n-1个盘子移动到B柱;2.将A柱上的最后一个盘子(第n个盘子)移动到C柱;3.以A柱作为中间柱,将B柱上的n-1个盘子移动到C柱;可以发现除了第二步可以直接完成外,1.3步好像都没那么简单。但是我们可以将1.3步继...原创 2019-11-12 23:11:28 · 153 阅读 · 0 评论 -
关于如何由十进制整数转化成二进制及十六进制
引言:随着计算机技术的发展,对数字的运算已经不仅仅局限于十进制的计算。二进制、十六进制这种也是会用到。接下来介绍一下如何将十进制转化为二进制及十六进制。十进制整数转二进制:十进制整数转换为二进制整数采用除2取余,逆序排序法。什么意思呢?打个比方比如十进制整数100转化为二进制。除以2 …………………取余100/2=50…………(余数为0);50/2=25………….(余数为0)...原创 2019-10-30 15:25:11 · 927 阅读 · 0 评论