![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 80
带鱼兄
爱在新空气,快乐每一天
展开
-
从B树、B+树、B*树谈到R 树
从B 树、B+ 树、B* 树谈到R 树 作者:July、weedge、Frankie。编程艺术室出品。说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。其中B树、B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成。出处:http://blog.csdn.net/v_JULY_v 。 第一节、B树、B+树、B*转载 2015-12-02 22:43:29 · 1080 阅读 · 0 评论 -
图解反转单向链表
核心代码/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *pNext;* };*//*反转函数,输入待反转链表头,返回反转后的链表头 */struct ListNode* reverseList(struct Lis...原创 2019-06-14 23:45:29 · 1056 阅读 · 0 评论 -
归并排序详解
基本概念:归并排序(英语:Merge sort,或mergesort),是建立在归并操作上的一种有效的排序算法,效率為O(n log n)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并操作(merge),指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。原创 2016-09-08 00:07:37 · 2879 阅读 · 0 评论 -
二分查找详解
基本概念:在计算机科学中,二分搜索(binary search),也称折半搜索(half-interval search),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不原创 2016-09-20 22:35:51 · 1021 阅读 · 0 评论 -
希尔排序详解
基本概念:希尔排序按其设计者希尔(Donald Shell)的名字命名,它是一种基于插入排序的快速排序算法,要了解希尔排序,必须先掌握插入排序的原理与实现。希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的原创 2016-09-06 00:04:39 · 30821 阅读 · 9 评论 -
八大排序算法详解
基本概念:冒泡排序详解选择排序详解插入排序详解希尔排序详解归并排序详解快速排序详解堆排序详解基数排序详解时间复杂度:计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,它考察当输原创 2016-09-17 23:47:54 · 1409 阅读 · 2 评论 -
基数排序详解
基本概念:基数排序(英语:Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。它是这样实现的:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到原创 2016-09-17 22:42:06 · 4807 阅读 · 2 评论 -
插入排序详解
基本概念:通常人们整理扑克牌的方法是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置。在计算机的实现中,为了给要插入的元素腾出空间,我们需要将其余元素在插入之前都向右移动一位。这种算法叫插入排序(insert sort)。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用原创 2016-09-04 23:08:48 · 2363 阅读 · 0 评论 -
选择排序详解
基本概念:选择排序(selection sort)是这样的:首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。这种方法叫做选择排序,因为它在不断地选择剩余元素之中的最小值。选择排序的时间复杂度为O(n²),时间复杂度可原创 2016-09-04 18:11:24 · 1801 阅读 · 0 评论 -
冒泡排序详解
基本概念:冒泡排序(bubble sort)并没有什么特殊的价值,它是一种相对较慢的排序。冒泡排序包括一个简单的双重for循环。第一次内存for循环从记录数组的底部比较到顶部,比较相邻的值,如果低序号的值比高序号的值大,则将二者交换顺序,这个过程将使它像个气泡一样被推到数组的顶部。第二次再重复调用上面的过程,但是既然知道最大元素第一次就被排到了数组的最上面(数组尾),因此就没有再比较最上面两个元素的必要了。原创 2016-09-04 14:20:26 · 1972 阅读 · 0 评论 -
快速排序详解
基本概念:快速排序是一种分治的排序算法,由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。如何切割成两部分:a) 假设有两个指针low和high,它们的初值分别为low和hi...原创 2016-09-11 00:17:24 · 954 阅读 · 0 评论 -
堆排序详解
基本概念:要了解堆排序,首先要了解什么是堆,要了解堆,还要先了解什么是完全二叉树。一、什么是完全二叉树?完全二叉树(complete binary tree)有严格的形状要求:从根节点起每一层从左到右填充。一棵高度为d的完全二叉树除了d-1层以外,每一层都是满的。底层叶节点集中在左边的若干位置上。完全二叉树如下图:二、什么是堆?堆实际上是一棵完全二叉原创 2016-09-13 22:43:15 · 1832 阅读 · 0 评论 -
HMAC-SHA1签名认证算法
HMAC-SHA1:HMAC是哈希运算消息认证码 (Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。HMAC-SHA1签名算法是一种常用的签名算法,用于对一段信息进行生成签名摘要。生成一个随机秘钥(python范例):#coding:utf-8from Crypt原创 2016-07-03 22:52:14 · 37395 阅读 · 1 评论 -
Twitter-Snowflake,64位自增ID算法详解
基本概念:Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的id必须不同。一.Snowflake算法核心把时间戳,工作机器id,序列号组合在一起。除了最高位bit标记为不可用以外,其余三组bit占位均可浮动转载 2016-06-15 23:50:43 · 1156 阅读 · 0 评论 -
程序员必须知道的10大基础实用算法及其讲解
算法一:快速排序算法快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。快速排序使用分治法(Divide and conqu转载 2016-02-01 17:33:21 · 873 阅读 · 0 评论 -
openresty中应用murmurHash
介绍:MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。由Austin Appleby在2008年发明,并出现了多个变种,都已经发布到了公有领域(public domain)。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。当前的版本是MurmurHash3,能够产生出32-bit或128-bit哈希值。较早的Murmu...原创 2019-08-01 22:30:23 · 2909 阅读 · 0 评论