随笔分类 - 数据结构与算法
摘要:转载:https://www.jianshu.com/p/33cffa1ce613 一、图示: (1) 归并排序的流程 (2) 合并两个有序数组的流程 (3)动图展示 二、代码实现 public static void mergeSort(int[] arr) { sort(arr, 0, arr.
阅读全文
摘要:参考:https://blog.csdn.net/itcats_cn/article/details/81389063 0、有一个你想要测的方法A 1、实现一个绝对正确但是复杂度不好的方法B 2、实现一个随机样本产生器 3、实现比对的方法 4、把方法a和方法b比对很多次来验证方法a是否正确 5、如果
阅读全文
摘要:一、二分查找算法 1) 前面我们讲过了二分查找算法,是使用递归的方式,下面我们讲解二分查找算法的非递归方式 2) 二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找 3) 二分查找法的运行时间为对数时间 O(㏒₂n) ,即查找到需要的目标位置最多只需要㏒₂n 步,假
阅读全文
摘要:图的基本介绍: 为什么要有图: 前面我们学了线性表和树 线性表局限于一个直接前驱和一个直接后继的关系 树也只能有一个直接前驱也就是父节点 当我们需要表示多对多的关系时, 这里我们就用到了图。 图的举例说明 图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称
阅读全文
摘要:平衡二叉树(AVL树) 平衡二叉树简介: 平衡树(Balance Tree,BT) 指的是,任意节点的子树的高度差都小于等于1。常见的符合平衡树的有,B树(多路平衡搜索树)、AVL树(二叉平衡搜索树)等。 具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1, 并且左右两个子树都是-
阅读全文
摘要:二叉排序树 百度百科: 叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。是数据结构中的一类。在一般情况下,查询效率比链表结构要高。 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当 前节点的值小,右子节点的值比当前节点的值
阅读全文
摘要:1、如果小球能到arr[6][5],说明通路找到2、约定: 当arr[i][j]为0表示该点没有走过,为1表示墙,为2表示通路可以走,为3表示走过但是没有走通3、走迷宫时定义一个策略,"下->右->上->左",如果该点走不通,再回溯 1、定义迷宫的大小以及墙壁 // 初始化迷宫大小 int[][]
阅读全文
摘要:import java.util.Arrays; public class 二分查找 { public static void main(String[] args) { int[] arr = {1, 6, 3, 7, 5}; //排序 for (int i = 0; i < arr.length
阅读全文
摘要:赫夫曼树介绍: 1)给定n个权值作为n个吐子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二二叉树,也称为哈夫曼树(Huffmanree),还有的书翻译为霍夫曼树。 2)赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 赫夫曼树概念: 路径和路径长度:在一
阅读全文
摘要:1、插值查找算法 插值查找是对二分查找的优化,是有序序列的查找算法。二分查找选取中间位置,插值查找则通过查找值判定大概位于序列的哪个位置比例。 2、二分查找与插值查找的对比 //begin表示数组开始下标,end表示数组结束下标,mid表示中间位置 二分查找:int mid = (begin + e
阅读全文
摘要:1、二分查找介绍 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列、 2、查找过程 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中
阅读全文
摘要:1、基数排序介绍 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort、 顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序 其时间复杂度
阅读全文
摘要:1、斐波那契数列的定义: 斐波那契数列指的是这样一个数列: 自然中的斐波那契数列 这个数列从第3项开始,每一项都等于前两项之和。 斐波那契数列的定义者,是意大利数学家莱昂纳多·斐波那契(Leonardo Fibonacci),生于公元1170年,卒于1250年,籍贯是比萨。他被人称作“比萨的莱昂纳多
阅读全文
摘要:1、快速排序介绍 快速排序 (Quicksort) 是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分。 其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序。 整个排序过程可以递归进行,以此达到整个数据变成有序序列 2、基本
阅读全文
摘要:1、希尔排序介绍: 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。 2、 希尔排序基本思想: 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减
阅读全文
摘要:1、插入排序介绍: 插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。 就是将第一待排序序列中的第一个元素看作一个有序序列,把第2个元素到最后一个元素当做是未排序序列 2、插入排序思路: 3、实现代码 import java.util.Arrays; i
阅读全文
摘要:选择排序思想: 选择排序(select sorting) 也是一种简单的排序方法。它的基本思想是:第一次从arr[0]^ arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[1]* ararrln-1]中选取最小值,与arr[1]交换,第三决从arr[2] arr[n-1]中选取最小值
阅读全文
摘要:冒泡排序算法步骤: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 排序规则
阅读全文
摘要:八皇后: 八皇后问题是由国际西洋棋棋手马克斯·贝瑟尔于1848年提出的问题,是回溯算法的典型案例。 问题表述为:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 思路分析: 实现代码: public class Test03_
阅读全文
摘要:什么是栈: “栈又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素。 栈的特点: 1、栈的插入和删除只允许在线性表的一端进行 2、“
阅读全文