![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
Chackca
把自己活成每一个暗恋过的人
展开
-
各种排序算法、十大排序算法
目录二分查找冒泡排序选择排序插入排序希尔排序归并排序快速排序堆排序计数排序桶排序基数排序外部排序与归并排序(强调一种思想)动态规划要点:二分查找//不使用递归实现:while循环,时间O(log2 N),空间O(1)public static int commonBinarySearch(int[] arr,int key){ ...原创 2018-09-24 10:57:14 · 800 阅读 · 0 评论 -
跳跃表(SkipList)
跳跃表在查询、添加、删除的时间复杂度上做到O(logN)跳跃表(SkipList)是一种基于有序链表的扩展,简称跳表 思考:如何才能更快找到一个有序链表的某一节点以上做法虽然增加了50%的额外空间,但是性能提高了一倍,此外还可以继续提取当大量的新节点通过逐层比较,最终插入到原链表之后,上层的索引节点会渐渐变得不够用,所以需要考虑如何从新节点当中选取一部分提取到上...转载 2018-09-27 15:11:42 · 384 阅读 · 0 评论 -
字典序算法
给定一个正整数,实现一个方法来求出离该整数最近的大于自身的换位数换位数:把一个整数各个数位的数字进行全排列,从而得到新的整数。例如53241和23541。例子:输入12345,返回12354 输入12354,返回12435 输入12435,返回12453 思路:给定整数12354,想找到最大换位数,需要尽量保持高位不变,低位在最小的范围内变换顺序。...转载 2018-09-27 15:06:59 · 1291 阅读 · 0 评论 -
搜索引擎之正排与倒排索引
正排索引(正向索引)正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。正排表结构如图1所示,这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于维护;因为索引是基于文档建立的,若是有新的文档加入,直接为该文档建立一个新的索引块,挂接在原来索引文件的后面。若是有文档删除,则直接找到该文档号文档对应的索引信息...原创 2018-09-27 15:04:27 · 3404 阅读 · 0 评论 -
大量数据去重:Bitmap位图算法和布隆过滤器(Bloom Filter)
Bitmap算法与其说是算法,不如说是一种紧凑的数据存储结构。是用内存中连续的二进制位(bit),用于对大量整型数据做去重和查询。其实如果并非如此大量的数据,有很多排重方案可以使用,典型的就是哈希表。实际上,哈希表为每一个可能出现的数字提供了一个一一映射的关系,每个元素都相当于有了自己的独享的一份空间,这个映射由散列函数来提供(这里我们先不考虑碰撞)。实际上哈希表甚至还能记录每个元素出现的...原创 2018-09-27 15:01:45 · 3312 阅读 · 0 评论 -
LRU算法(最近最久未使用/最近最少使用算法)
根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”1、最常见的实现是使用一个链表保存缓存数据1. 新数据插入到链表头部;2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;3. 当链表满的时候,将链表尾部的数据丢弃。 【命中率】当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命...转载 2018-09-26 15:48:20 · 2778 阅读 · 0 评论 -
辗转相除法与更相减损术(求最大公约数)
辗转相除法:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。比如10和25,25除以10商2余5,那么10和25的最大公约数,等同于10和5的最大公约数。以上代码存在取模运算,大数据较大时,其效率较差 更相减损术:两个正整数a和b(a>b),它们的最大公约数等于a-b的差值c和较小数b的最大公约数。比如10和25,25减去10的差是...原创 2018-09-26 15:44:21 · 15141 阅读 · 3 评论 -
top K、重复、排序问题
①Top K问题:分治+Trie树/Hash_map+小顶堆。采用Hash(x)%M将原文件分割成小文件,如果小文件太大则继续Hash分割,直至可以放入内存。然后使用Trie树来Hash统计每个小数据集中的query词频,之后用小顶堆求出每个数据集中出现频率最高的前K个数,最后在所有top K中求出最终的top K。②重复问题:BitMap位图 或 Bloom Filter布隆过滤器 或 Ha...原创 2018-09-26 15:40:01 · 2720 阅读 · 2 评论 -
前、中、后缀表达式
前缀表达式:所有的符号都是在要运算数字的前面出现 中缀表达式:平时用的标准四则运算表达式:9+(3-1)*3+10/2 后缀表达式:所有的符号都是在要运算数字的后面出现 中缀表达式转化为后缀表达式:9 3 1 - 3 * + 10 2 / + 规则:从左到右遍历中缀表达式每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于栈顶...原创 2018-09-25 10:11:18 · 4432 阅读 · 0 评论 -
树(扩展)
目录红黑树B树、B+树Trie树(前缀树/字典树/单词查找树)AVL树:平衡二叉树、平衡二叉搜索树,最早的平衡二叉树之一。应用相对其他数据结构比较少。windows对进程地址空间的管理用到了AVL树。 红黑树: 平衡二叉树,广泛用在C++的STL中。如map和set都是用红黑树实现的。B/B+树: 用在磁盘文件组织 数据索引和数据库索引。 Trie树(字典树): 用...原创 2018-09-25 10:04:29 · 571 阅读 · 0 评论 -
二叉树
目录 二叉树什么是二叉树?什么是二叉排序树?二叉树的数据结构定义二叉树的各种遍历从上到下不分行的层序遍历从底到上分行的层序遍历二叉树的最小深度判断是否为平衡二叉树按之字形打印二叉树二叉树的直径二叉树的镜像判断是否为对称二叉树二叉树什么是二叉树?在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”和“右子...原创 2018-09-24 11:23:11 · 784 阅读 · 0 评论 -
一些智力题
目录玻璃球与楼层烧香撞球小白鼠试毒水壶装水12枚硬币玻璃球与楼层 题目:有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层?? 答:https://blog.csdn.net/coolws123/article/details/22998879 ...原创 2018-09-27 15:20:02 · 754 阅读 · 0 评论