基本算法
文章平均质量分 87
基本算法的讲解加实现,让算法学习更简单。
云聪
喜欢简洁的抽象,也着迷神奇的细节,我担心自己因为过于偏向抽象而变得肤浅,也害怕自己因为太过深入细节而迷失,这让我很痛苦,但是我不会放弃挣扎,因为我相信挣扎的过程就是成长。
展开
-
基本算术编码
1.基本思想 算术编码,就是用一个数编码一串字符串。原创 2017-01-15 01:21:38 · 13962 阅读 · 1 评论 -
LeetCode102 Binary Tree Level Order Traversal Java
题目: Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).原创 2016-04-23 14:20:55 · 3813 阅读 · 0 评论 -
LeetCode144 Binary Tree Preorder Traversal(迭代实现) Java
题目: Given a binary tree, return the preorder traversal of its nodes’ values.For example: Given binary tree {1,#,2,3}, 1 \ 2 / 3return [1,2,3].Note: Recursive solution is trivial...原创 2016-04-23 13:14:19 · 2417 阅读 · 0 评论 -
LeetCode94 Binary Tree Inorder Traversal(迭代实现) Java
题目: Given a binary tree, return the inorder traversal of its nodes’ values.For example: Given binary tree {1,#,2,3}, 1 \ 2 / 3return [1,3,2]. 分析: 中根遍历二叉树...原创 2016-04-22 21:05:06 · 1068 阅读 · 0 评论 -
LeetCode145 Binary Tree Postorder Traversal(迭代实现) Java
题目: Given a binary tree, return the postorder traversal of its nodes’ values.For example: Given binary tree {1,#,2,3}, 1 \ 2 / 3return [3,2,1].原创 2016-04-21 18:57:23 · 1177 阅读 · 0 评论 -
基于最小优先级队列构造哈夫曼树 Java
哈夫曼编码是一种前缀编码,也就是说,它编码的字符,任何一个字符的编码都不是另一个字符的前缀,这使得对哈夫曼编码进行解码变得容易。而使得哈夫曼编码是前缀编码的关键就是哈夫曼树。哈夫曼树也正是本文要说的。哈夫曼树是一颗二叉树,在这棵树上,从父节点到左孩子节点的边被标为0,从父节点到右孩子节点的边被标为1,所有字符被编码为一个从根结点到叶子节点的路径上的所有01构成的位串原创 2016-03-19 16:18:49 · 2786 阅读 · 3 评论 -
证明利用快慢指针寻找有环单链表中环的起点算法
问题:给定一个有环单链表,找到链表中环的起点,也就是说,找到下图中的单链表中Join点: (本图来源于http://www.cnblogs.com/xudong-bupt/p/3667729.html,做了少许修改) 解答:一个常见的解法是这样的,声明两个指针,两个指针的初始值都是链表的头指针,其中一个指针每次前移两个节点,称为快指针,另一个指针每次前移一个节点,称为慢指针原创 2016-01-07 20:39:14 · 4345 阅读 · 7 评论 -
将数组元素循环右移k个位置(Java实现)
用四种方法实现了将数组元素循环右移k个位置,相关的解释作为注释放在代码里面了。package movearrayelement;import java.util.BitSet;public class MoveArrayElement { /** * 每次把数组中所有元素移动一个位置,移动k轮 * @param array * @param k */ public原创 2015-08-26 21:17:55 · 17960 阅读 · 0 评论 -
Java实现桶排序
详细讲解见《算法导论》8.4节——桶排序。Java代码如下:package linetimesort;import java.util.LinkedList;import sort.InsertSort;/** * 桶排序假设输入元素均匀而独立的分布在区间[0,1)上; * 桶排序的核心思想是,将[0,1)分为n个大小相同的子区间, * 上一个区间里的元素都比下一个区间里的原创 2015-05-19 19:24:27 · 4987 阅读 · 0 评论 -
Java实现基数排序
详细讲解见《2015版数据结构高分笔记》8.6节——基数排序。Java代码如下:package linetimesort;import java.util.LinkedList;import java.util.Objects;/** * 基数排序的思想是多关键字排序 * @author yuncong * */public class RadixSort { /**原创 2015-05-19 19:21:01 · 1317 阅读 · 0 评论 -
Java实现计数排序
详细讲解见《算法导论》8.2节——计数排序。Java代码如下:package linetimesort;/** * 计数排序假设n个输入元素中的每一个都是介于0到k之间的某个整数,k为某个整数;它 * 通过确定小于等于一个数的数的个数来确定这个数应该放在哪个位置 * @author yuncong * */原创 2015-05-19 19:18:12 · 1472 阅读 · 0 评论 -
Java实现快速排序
快速排序是一个分治算法,它首先把数组分为两部分,然后对每一个部分递归的求解,但它不需要合并子问题的解。快速排序的伪代码如下:其中,A是一个数组,p是数组中需要排序的子数组的开始下标,r是结束下标,q是一个分隔元素,PARTITION(A, p,r)返回后,q下标左边的元素都比A[q]小,q下标右边的元素都比A[q]大。这样数组就被分为两部分,一部分比A[q]小,一部分比A[q]大;而且最终原创 2015-05-18 21:38:40 · 927 阅读 · 0 评论 -
Java实现堆排序
(二叉)堆是一个完全二叉树,分为大根堆和小根堆。大根堆是指树中除根结点外的所有结点的值都小于等于其父结点的堆;小根堆是指树中除根节点外的所有结点的值都大于等于其父结点的堆。从定义可知,大根堆的根结点是堆中的最大结点,小根堆的根结点是堆中的最小结点。本文基于大根堆实现对数组元素排序。大根堆的图形描述如下:基于大根堆实现对数组元素排序有三个步骤:(1)实现下降结点的子程序;(2)实现建原创 2015-05-18 18:42:35 · 645 阅读 · 0 评论 -
Java实现归并排序
问题:用归并排序算法对n个对象的数组进行升序排序。归并排序算法描述:分解:将n个元素分解成各含n/2个元素的字序列;解决:用归并排序算法对两个子序列递归地排序;合并:合并两个已排序的字序列得到排序结果。算法的伪代码描述如下:其中,A是数组,p是子数组起始位置,也是分解后第一个子数组的起始位置,r是子数组结束位置,也是分解后第二个数组的结束位置,q为分解后第一个数组的原创 2015-05-10 13:51:41 · 1210 阅读 · 0 评论 -
Java实现插入排序
问题:用插入排序算法对n个对象的数组进行升序排序。插入排序算法描述:插入排序的基本思想是,在一个已经排好序的子数组中查找一个位置,在找到的位置中插入一个元素,元素插入后,子数组依然有序。算法步骤如下:(1)初始状态,子数组只包含数组的第一个元素,这样,子数组自然是有序的。(2)从数组的第二元素起,每一个元素依次插入子数组中的某一个位置,每次插入后,子数组保持有序。查找插入位置的方法原创 2015-05-08 14:11:35 · 1010 阅读 · 0 评论 -
Java实现哈夫曼编码和解码
题目:将一个字符串进行哈夫曼编码;编码过程中,会得到每个字符的编码,通过已知的每个字符的编码对之前的编码进行解码。原创 2015-03-31 14:16:08 · 13609 阅读 · 4 评论 -
最大子序列和问题
这是在《数据结构与算法分析 Java语言描述中文第二版》里的一个问题。本文记载我对书中该问题的第四种解法的理解。问题:分析:数列的最大子序列必定是以j结尾的,其中,j属于[A1,AN]。首先,我们计算出以j结尾的子序列中的最大子序列的和;然后,因为j有N个值,也就是说第一步得到N最大子序列的和,这N个值中最大的那一个就是最终答案。从N个数中找出最大之是很容易的。关键是,在以j结尾的子序列中原创 2015-03-25 20:46:40 · 902 阅读 · 0 评论 -
折半查找
题目:给定整数x和整型数组a[],a中的元素已经从小到大排序,如果存在下标i使得x = a[i],则返回x,否则则返回-1。(利用折半查找实现)原创 2015-03-22 18:25:06 · 863 阅读 · 0 评论