摘要:一、概念(真的多,倒是不难) 图中数据元素通常称为顶点(Vertex)。V是顶点的有穷非空集合,VR是两个顶点之间的关系集合; 若<v,w>∈VR,则<v,w>表示从v到w的一条弧(Arc); 且称v为弧尾(Tail)或初始点(Initial Node),称w为弧头(Head)或终端点(Termin
阅读全文
摘要:二叉树操作效率很高,但是也存在问题 :二叉树需要加载到内存,如果二叉树及节点很多,在构建的时候需要进行多次i/o操作(海量数据存在数据库或者文件中),节点海陵,构建二叉树速度有影响。同时节点海量会造成二叉树高度过大,会降低操作速度。 在二叉树中,每个节点有数据项,最多两个子节点。如果允许每个节点可以
阅读全文
摘要:二叉排序树(二叉搜索树)(Binary Sort(Search) Tree),快速查找、添加、删除。 一、性质: 1)若左子树不为空,则左子树上所有节点的值都小于根结点的值。 2)若右子树不为空,右子树所有节点的值大于根结点的值。 3)左右子树也分别是二叉排序树。 创建遍历没有什么问题,删除需要考虑
阅读全文
摘要:数据解压就是数据压缩的逆向。 直接上代码: /** * 数据解压 思路: 1.将huffmanCodeByte[-88, -65, -56, -65, -56, -65, -55, 77, -57, * 6, -24, -14, -117, -4, -60, -90, 28] 重新先转成赫夫曼编码对
阅读全文
摘要:一、基本介绍 赫夫曼编码也翻译为哈夫曼编码(HuffmanCoding),是一种编码方式,也是一种程序算法。 赫夫曼编码是赫夫曼树在电讯通信中的经典应用之一。 赫夫曼编码也广泛用于文件压缩。其压缩率通常在20%~90%之间。 赫夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一
阅读全文
摘要:赫夫曼树名字看起来很难,其实蛮简单的。我记得为大学的时候就很爱做赫夫曼树,因为很容易掌握而且做对。笑了。 一、赫夫曼树 1)给定n个权值作为n个叶子结点,构造一棵二叉树,若该树带权路径(wpl)达到最小,称这样的树为最优二叉树,也叫赫夫曼树(Huffman Tree)。 2)赫夫曼树是带权路径长度最
阅读全文
摘要:一、堆排序基本介绍 1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序也是一种选择排序,它的最坏、最好、平均时间复杂度都是O(nlogn),不稳定排序。 2)堆是完全二叉树(完全二叉树概念可以参考上一篇,我自己都忘记,又回头看)。大顶堆:每个结点的值都大于或者等于其左右孩子结点的值。小顶堆:
阅读全文
摘要:本篇内容:线索化二叉树,(堆排序[专门提出来放在下一篇了])、赫夫曼树 一、线索化二叉树基本介绍 n个结点的二叉链表中含有2n-(n-1)=(n+1)个空指针域。利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为线索) 这种加上了线索的二叉链表称为线索链
阅读全文
摘要:本篇内容:二叉树、前中后序遍历二叉树、前中后序查找、二叉树删除节点、顺序存储二叉树
阅读全文
摘要:一、哈希表基本介绍 散列表(hash table 也叫哈希表),是根据关键码值(key value)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问纪录,以加快查找的速度。这个映射函数叫散列函数,存放纪录的数组叫做散列表。 二、情景题及代码实现 有一个公司,当有新员工来报道时,要求
阅读全文
摘要:Java中常见的查找有四种: 顺序( 线性)查找。代码太简单不码了,就是遍历。 二分查找/折半查找。也没有难度。 插值查找。 斐波那契查找。我遇到困难了,好难理解 一、顺序查找 不多说 二、二分查找:前提是有序。 思路: 确定该数组的中间下标 mid = (left+right) / 2 让需要查找
阅读全文
摘要:其实我到希尔排序就有点不懂了。就反反复复码很多遍。最后搞得能敲出来但是清楚知道还是不懂。 但是我有良好的自信系统,我知道我不属于笨蛋,如果不懂,那就是确实需要多付出一些精力。 我期待我像小学生背乘法口诀,不知所云,但突然有一天茅塞顿开,啊原来是这么用的。 本篇内容:归并排序、基数排序 一、归并排序:
阅读全文
摘要:排序也称排序算法(Sort Algorithm)。分为内部排序和外部排序。 内部排序:将需要处理的所有数据都加载到内部存储器(内存)中进行排序。 外部排序:数据量过大,无法全部加入到内存中,需要借助外部存储(文件等)进行排序。 常见的排序算法分类:(以下五种都属于内部排序) 1.插入排序: 直接插入
阅读全文
摘要:在公司工作空隙里敲敲,基本上也觉得不难回来就不会再敲一遍了。还是上周敲完的代码了。今天趁着写博客重新敲一遍。 递归简单来说就是自己调用自己,每次调用传入不同的变量。 递归调用能解决的数学问题如:8皇后、汉诺塔、阶乘、迷宫、球和篮子等。 有些算法也会使用递归,比如快排、归并排序、二分查找、分治算法等。
阅读全文
摘要:中缀表达式转后缀表达式思路: 1.初始化两个栈:运算符栈S1和储存中间结果的栈S2; 2.从左到右扫描中缀表达式 3.遇到操作数时,将其压入S2; 4.遇到运算符,比较其与S1栈顶运算符的优先级: 如果S1为空,或栈顶运算符是左括号 '(' ,则直接将此运算符入栈; 若优先级比栈顶运算符的高,也将运
阅读全文
摘要:前缀表达式也叫波兰表达式。后缀表达式也叫逆波兰表达式。 逆波兰表达式实现计算器: package com.njcx.test3; import java.util.ArrayList; import java.util.List; import java.util.Stack; public cla
阅读全文
摘要:这里我是在公司码的代码,没有带回来。这里很简单也不常用(中缀表达式)。后面用后缀表达式还会实现计算器,没必要再专门再来一次。心安理得坑着。
阅读全文
摘要:链表内容我打算就写在这一篇里。包括单链表,双向链表,单向及双向环形链表,josephu问题。 链表是以节点的方式来存储,是链式存储 每个节点包含data域,next域(指向下一个节点) 链表在内存中未必是连续存储 链表根据实际需求确定带有头结点和不带头结点 一 单链表的增删改查 单链表的两种添加方式
阅读全文
摘要:队列是个有序列表,可以用数组和链表来实现。 遵循先进先出原则。 只要看后面循环队列就好了。前面普通数组模拟队列太简单了。 使用数组模拟队列: 因为队列输入输出分别是从前后端来处理,所以需要两个变量front和rear分别纪录队列前后点的下标。front会随着数据输出而改变,rear根据数据输入而改变
阅读全文