
数据结构和算法
数据结构和算法
坤少_jkson
别再用廉价的勤奋掩饰你的懒惰
展开
-
跳表笔记
1. 概念 跳表就是在链表的基础上增加了多层索引链表,这样在查找时就可以通过在上下不同层级的索引链表间跳跃,就能像二分查找(底层依赖的是数组随机访问的特性)算法一样达到快速查找的目的,但是它可以支持快速的插入、删除、查找操作,写起来也不复杂,甚至可以替代红黑树(Red-black tree)。jdk包下ConcurrentSkipListMap就是基于跳表实现的2.原理 为一个值有序的链表建立多级索引,比如每2个节点提取一个节点到上一级,我们把抽出来的那一级叫做索引或索引层。如...原创 2020-10-23 00:47:03 · 118 阅读 · 0 评论 -
查找算法之二分查找
1. 概念 二分查找(Binary Search)算法,也叫折半查找算法、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0。类似生活中猜字游戏,它的时间复杂度是O(logn),适用于经常查找的、但是不变的(增删)的有序列表。虽然查询效率很高,但也有一定的局限性,二分查找依赖顺序表结构,那么只能使用数组作为底层数据结构,数组按照下标随机访问数据的时间复杂度...原创 2020-10-09 23:18:17 · 1159 阅读 · 0 评论 -
排序算法之快速排序
1. 概念通过一趟排序将待排记录使用分治算法把一个串(list)分为两个子串(sub-lists),其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。2.原理将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边,在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。简要步骤如下1) 每次排序原创 2020-08-18 00:24:35 · 148 阅读 · 0 评论 -
排序算法之归并排序
1. 概念归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。归并排序的核心思想是排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,就是分而治之思想,分治算法一般都是用递归来实现的。2.原理1. 把长度为n的输入序列分成两个长度为n/2的子序列; 2. 对这两个子序列分别采用归并排序;重点在于递归函数 3. 将两个排序好的子序列原创 2020-07-29 22:43:48 · 320 阅读 · 0 评论 -
排序算法之选择排序
1. 概念选择排序(Selection-sort)是一种简单直观的排序算法,实现思路有点类似插入排序,也分已排序区间和未排序区间。在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。它是最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。2.原理1.无序区为数组[1..n],有序区为空; 2.原创 2020-07-29 22:20:11 · 194 阅读 · 0 评论 -
排序算法之插入排序
1. 概念简单来讲就是将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的第一个元素。插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。重复这个过程,直到未排序区间中元素为空,算法结束。2.原理从第一个元素开始,该元素可以认为已经被排序; 取出下一个元素,在已经排序的元素序列中从后向前扫描(每次取下个元素当成基准参数和之前的数字进行挨个比较); 如果该元素(已排序)大于新元素,将该元素移到下原创 2020-07-24 00:26:32 · 183 阅读 · 0 评论 -
排序算法之冒泡排序
1. 概念冒泡排序是一种简单的排序算法。只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作。2.原理1.比较相邻的元素。如果第一个比第二个大,就交换它们两个;2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;3.针对所有的元素重复以上的步骤,除了最后一个;4. 重复步骤1~3,直到排序完成(需要注意原创 2020-07-24 00:16:17 · 230 阅读 · 0 评论 -
各种加密算法比较
各种加密算法比较 算法选择:对称加密AES,非对称加密: ECC,消息摘要: MD5,数字签名:DSA 对称加密算法(加解密密钥相同) 名称 密钥长度 运算速度 安全性 资源消耗 ...转载 2019-02-20 20:26:30 · 714 阅读 · 0 评论 -
坐在马桶上看算法:快速排序(转)
高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大...转载 2018-07-02 18:14:50 · 232 阅读 · 0 评论 -
BloomFilter——大规模数据处理利器
Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法。通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合。 一. 实例 为了说明Bloom Filter存在的重要意义,举一个实例: 假设要你写一个网络蜘蛛(web crawler)。由于网络间的链接错综复杂,蜘蛛在网络间爬行很可能会形成“环”。转载 2017-11-11 11:28:04 · 259 阅读 · 0 评论 -
Bit-map空间压缩和快速排序去重
阅读目录1. Bit-map的基本思想2. Bit-map应用之快速排序3. Bit-map应用之快速去重4. Bit-map应用之快速查询5. Bit-map扩展——Bloom Filter6. 总结 Bit-map是一种很巧妙的数据存储结构。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为转载 2017-06-14 10:12:51 · 291 阅读 · 0 评论