数据结构与算法
五山口老法师
腾讯后台开发工程师
展开
-
topK问题
topK问题原创 2018-09-12 10:38:52 · 213 阅读 · 0 评论 -
二分查找2
二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,但它有一个前提,就是必须在有序数据中进行查找。二分查找很好写,却很难写对,据统计只有10%的程序员可以写出没有bug的的二分查找代码。出错原因主要集中在判定条件和边界值的选择上,很容易就会导致越界或者死循环的情况。下面对二分查找及其变形进行总结:1. 最基本的二分查找public int ...原创 2019-03-21 16:10:43 · 181 阅读 · 0 评论 -
哈夫曼编码
哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。哈夫曼编码,主要目的是根据使用频率来最大化节省字符(编码)的存储空间。简易的理解就是,假如我有A,B,C,D...原创 2019-03-04 22:55:14 · 1321 阅读 · 0 评论 -
B树和B+树的不同
多路查找树:和之前学习的二叉树不同的是,多路树的每一个节点的孩子数可以多于两个!同时每个孩子节点可以存储多个元素。多路查找树有4种特殊形式:2-3树、2-3-4树、B树、B+树2-3树每个节点都具有2个孩子(称之为2节点)或者3个孩子(称之为3节点)。一个2节点包含一个元素和两个孩子(或没有孩子)。一个3节点包含两个元素和三...原创 2019-02-24 17:09:47 · 252 阅读 · 0 评论 -
二叉搜索树(BST)?平衡二叉树(AVL)?
二叉搜索树:中序遍历序列是有序的。二叉查找树,也称有序二叉树,是指一棵空树或者具有以下性质的二叉树:左子节点的值比父节点小 右子节点的值比父节点大 任意节点的左右字树也分别为二叉查找树 没有键值相等的点 在理想情况下,二叉查找树增删改查的时间复杂度为O(logN);二叉搜索树的查找使用递归!如果key小于当前节点,向当前节点的左子树往下进行递归查找!如果key大于当...原创 2019-02-24 15:40:03 · 244 阅读 · 0 评论 -
二分查找算法总结
二分查找有N多种写法,有各种各样的形式,选一种合适自己,自己能够理解记住的才是最好的。对于最最最原始的二分查找,即给出一个Key,查找出key值的索引号。 最经典的二分查找对返回来的索引号没有任何要求,只要其对应的值是Key就可以了!!!!使用二分查找算法的序列必须是有序序列核心代码:int binarySearch(int a[],int key,int left,int ri...原创 2019-02-18 20:07:08 · 260 阅读 · 0 评论 -
排序算法稳定性分析
分析一下常见的排序算法的稳定性,每个都给出简单的理由。 冒泡排序冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。 ...原创 2019-02-17 13:05:24 · 155 阅读 · 0 评论 -
排序算法总结
排序算法稳定性的定义?假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。1.1冒泡排序的思想对相邻的元素进行两两比较,顺序相反则进行交换。这样每一趟将最小或最大的元素浮到顶端。最终达到完全有序。冒泡排序一般是将...原创 2019-02-16 23:16:00 · 554 阅读 · 0 评论 -
图:BFS/DFS java实现
上一篇博文介绍了BFS和DFS的原理,现在给出其JAVA代码实现;BFS就是维护一个队列,先依次访问起始点相邻的节点,入队,再访问相邻节点的相邻节点,依次入队出队。DFS就是利用递归+回溯,直到递归到没有相邻节点可以访问了,就向上回溯。BFS:import java.util.HashMap;import java.util.LinkedList;import java....原创 2019-01-18 10:01:26 · 665 阅读 · 0 评论 -
图的遍历:BFS和DFS
前言图是一种灵活的数据结构,一般作为一种模型用来定义对象之间的关系或联系。对象由顶点(V)表示,而对象之间的关系或者关联则通过图的边(E)来表示。图可以分为有向图和无向图,一般用G=(V,E)来表示图。经常用邻接矩阵或者邻接表来描述一副图。在图的基本算法中,最初需要接触的就是图的遍历算法。根据访问节点的顺序,可分为广度优先搜索(BFS)和深度优先搜索(DFS)。正文广度优先搜索...原创 2018-09-12 19:56:24 · 298 阅读 · 0 评论 -
单链表实现快速排序
用单链表实现快速排序前言:快速排序我们都知道,通过一个基准数字,一趟排序就将数据划分为两个部分:左边的部分小于这个基准数字,右边的部分大于等于这个基准数字。我们知道,实现快速排序的关键在于随机访问数据元素,所以以往的快排都是基于数组实现的。但是在面试中,经常会遇到面试官要求我们用链表实现快排,那么如何通过链表实现快排呢?我们设置两个指针 i,j,其中 i 初始时指向数组的第一个元素,j 初始...原创 2019-08-16 16:48:38 · 671 阅读 · 0 评论