
算法
空指针异常1
这个作者很懒,什么都没留下…
展开
-
哈夫曼编码详解 及 Java实现
哈夫曼编码原理众所周知:计算机是只看得懂二进制。一串字符,转换成二进制之后,数据是非常长的。哈夫曼编码的作用就是,根据字符出现的频率,来定义其二进制编码的长度,出现的频率越高,则编码长度越短。是不是听起来和哈夫曼树很像:权值越大,路径越短(废话,这俩明显是一个人搞出来的)。举个例子:Hello world 转换成十进制ASCII编码为以下这串数字72 101 108 108 111 32 119 111 114 108 100转换成二进制,是这样的:01001000 01100101 011原创 2020-07-28 18:52:25 · 1340 阅读 · 1 评论 -
堆排序算法详解、及Java实现
堆排序需要提前掌握:二叉树、顺序存储二叉树概述堆:堆可以看做是一个完全二叉树大顶堆:其父节点总是大于等于子节点的值,而左右子节点之间没有大小顺序要求小顶堆:其父节点总是小于等于子节点的值,而左右子节点之间没有大小顺序要求堆排序:是指利用堆这种数据结构所设计的一种排序算法。以大顶堆为例,我们知道:完全二叉树可以以顺序方式存入数组中的,而大顶堆的根节点是堆中最大的数据,则可以将根节点和最后一个元素交换,再忽略其存在,将前面的元素再次构建成大顶堆,如此反复即可完成排序。一般,升序采用大顶堆,降序原创 2020-07-26 21:19:52 · 270 阅读 · 0 评论 -
前缀、中缀、后缀表达式计算和转化算法详解
前缀、中缀和后缀表达式概述前缀、中缀、后缀表达式是对表达式的不同记法,其区别在于运算符相对于数字的位置不同,前缀表达式的运算符位于操作数之前,中缀和后缀同理如:中缀表达式:1 + (2 + 3) × 4 - 5前缀表达式:- + 1 × + 2 3 4 5后缀表达式:1 2 3 + 4 × + 5 -中缀表达式是人们最常用的算术表示方法,人脑很容易理解,但对计算机来说很复杂,因为要判断计算的优先级太过繁琐。对计算机来说,计算前缀或后缀表达式的值非常简单。中缀转换为前缀、后缀**以 1+(2原创 2020-07-21 18:48:28 · 4929 阅读 · 0 评论 -
二分法查找Java实现及其详解
目录二分法查找概述实现原理实现代码二分法查找概述二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。归并排序即运用了二分法的思想。首先需要一个由小到大排序好的数组,先对比中间的值,如果比要找的大,则向前找,取中间值前面的一半再找中间值再对比。如果比要找的小,则向后找,取中间值后面的一半再取中间值再对比。实现原理这里,我使用了递归的方法进行实现。首先需要确认查找的范围,即有一个左索引和右原创 2020-07-25 12:10:43 · 1342 阅读 · 0 评论 -
基数排序的Java实现及其详解
目录基数排序概述实现原理实现代码基数排序概述基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog®m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。可以这样理解它:0 - 9 有10个桶,一开始,0桶装个位为0的数原创 2020-07-25 10:42:46 · 289 阅读 · 0 评论 -
Java实现归并排序,及其详解
目录归并排序概述实现原理代码实现归并排序概述归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。简而言之就是,首先将数组分成两半,再分成两半…直到每部分只剩一个元素,则开始合并,左右两个元素(数组),比较后,形成一个有序的数组,再和其他也合并完的有序数组再次合并,原创 2020-07-24 21:12:28 · 684 阅读 · 0 评论 -
Java实现快速排序 及详解
这里写目录标题快速排序概述原理排序演示代码快速排序概述快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。简而言之,快速排序就是,先确定一个中间值,这个值通常是 第一个数字,然后将所有比它小的值放到它前面,这样,以它为中线,原创 2020-07-24 16:23:44 · 236 阅读 · 0 评论 -
Java实现希尔排序 及其 详解
希尔排序概述希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。插入排序的速度虽然比冒泡和选择快,但是还是比较慢且有缺陷的。因为如果一个最小原创 2020-07-24 12:04:54 · 671 阅读 · 0 评论 -
Java实现插入排序及详解
插入排序概述插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动 。插入排序就像排序一手扑克牌。开始时,我们的左手为空 并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我原创 2020-07-23 21:18:23 · 875 阅读 · 2 评论 -
Java实现冒泡排序、选择排序及详解
这里写目录标题冒泡排序原理代码实现思考与优化优化后的代码选择排序实现思路实现代码冒泡排序原理比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。相当于,每次循环(使用循环,找出最大的一个数字,排到末尾)就像冒泡泡一样,每次把最大的泡泡冒到最上面代码实现package sor原创 2020-07-23 16:31:19 · 498 阅读 · 0 评论 -
Java实现八皇后问题、迷宫问题 及 递归详解
目录概述递归的作用迷宫问题代码实现八皇后问题代码实现概述递归是方法本身调用自己的一种算法。由于java在调用方法时会在栈中开辟一个新的空间,所以递归一定要确定一个终止条件,且在不断递归的过程中,不断向这个条件靠近,否则会栈溢出。也就是这个原因,有人说递归性能不好,内存占用大。程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小原创 2020-07-22 19:25:25 · 465 阅读 · 0 评论 -
Java实现中缀转化为后缀表达式(逆波兰表达式)并计算;中缀、后缀表达式计算器
实现思路将一个普通的中缀表达式转换为逆波兰表达式的一般算法是:首先需要分配2个栈,一个作为临时存储运算符的栈S1(含一个结束符号),一个作为存放结果(逆波兰式)的栈S2(空栈),S1栈可先放入优先级最低的运算符#,可指定其他字符,不一定非#不可。从中缀式的左端开始取字符,逐序进行如下步骤:(1)若取出的字符是数字,则分析出完整的数字(如:10、100,而非仅0-9的个位数字),该操作数直接送入S2栈。(2) 如果是运算符,则与栈顶元素比较,如果优先级高于栈顶运算符(包括左括号)优先级,则进S1栈;原创 2020-07-22 10:35:27 · 511 阅读 · 0 评论 -
Java实现后缀表达式的计算
实现方法从左至右扫描表达式遇到数字时,将数字压栈,遇到运算符时,弹出栈顶的两个数,计算并将结果入栈重复2直到表达式最右端,最后运算得出的值即为表达式的结果示例:计算后缀表达式的值:1 2 3 + 4 × + 5 -从左至右扫描,将1,2,3压入栈;遇到+运算符,3和2弹出,计算2+3的值,得到5,将5压入栈;遇到4,将4压入栈遇到×运算符,弹出4和5,计算5×4的值,得到20,将20压入栈;遇到+运算符,弹出20和1,计算1+20的值,得到21,将21压入栈;遇到5,将5压入栈;原创 2020-07-21 18:57:06 · 1114 阅读 · 1 评论