![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
xiaofei0859
这个作者很懒,什么都没留下…
展开
-
九大排序算法
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序转载 2016-11-02 14:48:30 · 569 阅读 · 0 评论 -
hash算法 (hashmap 实现原理)
Hash ,一般翻译做“ 散列” ,也有直接音译为“ 哈希” 的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不 同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。HAS转载 2017-06-13 17:30:28 · 372 阅读 · 0 评论 -
C语言实现时间戳转日期的算法
一.可以通过现有函数实现C语言库函数:localtime就可以获得一个时间戳对应的具体日期了在标准C/C++中,我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下: #ifndef _TM_DEFINED struct tm { int tm_sec; /* 秒–取值区间为[0,59] */ int tm_转载 2017-06-14 14:38:46 · 21256 阅读 · 4 评论 -
算法的时间复杂度和空间复杂度
算法的时间复杂度和空间复杂度-总结 通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的转载 2017-07-20 21:18:17 · 346 阅读 · 0 评论 -
Skip List(跳跃表)原理详解与实现
Skip List(跳跃表)原理详解与实现 转载:http://dsqiu.iteye.com/blog/1705530本文内容框架:§1 Skip List 介绍§2 Skip List 定义以及构造步骤 §3 Skip List 完整实现§4 Skip List 概率分析§5 小结转载 2017-07-10 09:52:55 · 315 阅读 · 0 评论 -
SkipList 跳表
转载:http://kenby.iteye.com/blog/1187303为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参转载 2017-07-10 09:56:45 · 219 阅读 · 0 评论 -
二叉树最近公共父节点
在二叉树中找近期公共父节点。分为两种情况,一种是有父指针,一种没有父指针。1、有父指针这样的情况比較简单。计算两个结点的深度,再把深度大的向上移。移到同一深度。在同一时候向上移动,直到两个结点同样,这样便找到了父节点。这个算法时间复杂度为O(N)。代码实现:#includestruct Node{ int data; Node* left; Nod转载 2017-08-07 19:18:20 · 570 阅读 · 0 评论 -
判定一棵二叉树是否是二叉搜索树
问题给定一棵二叉树,判定该二叉树是否是二叉搜索树(Binary Search Tree)?解法1:暴力搜索首先说明一下二叉树和二叉搜索树的区别。二叉树指这样的树结构,它的每个结点的孩子数目最多为2个;二叉搜索树是一种二叉树,但是它有附加的一些约束条件,这些约束条件必须对每个结点都成立:结点node的左子树所有结点的值都小于node的值。结点node的右子树所有结点的转载 2017-08-17 08:06:24 · 532 阅读 · 0 评论 -
INT_MAX和INT_MIN注意事项
INT_MIN在标准头文件limits.h中定义。#define INT_MAX 2147483647#define INT_MIN (-INT_MAX - 1)1212在C/C++语言中,不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。表达式的意思是对整数21473648取负,但是2147483648已经溢出了int的上限,所以定义为(-IN转载 2017-08-17 08:31:38 · 18164 阅读 · 0 评论 -
常用算法时间空间复杂度
Hi there! This webpage covers the space and time Big-O complexities of common algorithmsused in Computer Science. When preparing for technical interviews in the past, I found myself spending hours cr转载 2017-08-10 21:51:31 · 2432 阅读 · 0 评论 -
循环有序数组中的二分查找 Search in a rotated sorted array
版权声明: GNU General Public License. https://github.com/lucky521二分查找是必须要掌握的技能,适用于有序的、顺序的存储结构。1、可以用它来查找某一个数2、可以用于查找某一个范围。如《二分查找有序数组中某个数的所在范围 Search for a Range》。3、可以用它来查找两个有序数组的中位数。转载 2017-08-24 18:17:25 · 852 阅读 · 0 评论 -
判断一棵树是否是二叉查找树
转载:http://blog.csdn.net/guoyuguang0/article/details/51018249判断一棵树是否是二叉查找树 利用该节点对应的最大值和最小值来判断该节点是否符合二叉查找树的性质。public boolean isValidBST(TreeNode root) { return validateRange(root, Lo转载 2017-08-24 21:34:30 · 476 阅读 · 0 评论 -
在一个int数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数
题目的意思很简单,比如说有数组[1,6,9,2,1,5,15,20],那么满足上述条件的元素为1,15,20。分析1.暴力的方法就是从左到右进行遍历,到达某个数字后,在从0开始遍历到当前下标,找出最大的,再从当前下标遍历到尾,找出最小的,然后根据题意比较一下,这个算法为O(n^2)。比较简单的算法就是利用一下额外的空间,保存一下,每个元素右侧的最小值,或者左侧的最大值,转载 2017-08-25 12:07:27 · 2365 阅读 · 0 评论 -
c语言实现通用数据结构(五):通用映射(HashMap)
转载:http://blog.csdn.net/swwlqw/article/details/22666705这是在通用链表的基础上实现的映射,关于链表的实现参见:http://blog.csdn.net/swwlqw/article/details/22498833。注意映射中只存储了key和value的指针,没有储存实际的数据。对于新的key类型来说,需要自定义Ha转载 2017-06-13 17:26:15 · 2039 阅读 · 2 评论 -
ELFhash - 优秀的字符串哈希算法
1.字符串哈希:我们先从字符串哈希说起在很多的情况下,我们有可能会获得大量的字符串,每个字符串有可能重复也有可能不重复C不像Python有字典类型的数据结构,我们没有办法吧字符串当做是键值来保存,所以说我们需要一种hash函数将每个字符串都尽可能减少冲突的情况下去应设一个唯一的整形数据,方便我们的保存,这里我们就引入了字符串hash算法现在,有非常多的字转载 2017-06-13 16:55:49 · 1172 阅读 · 0 评论 -
C语言的HashTable简单实现
HashTable是在实际应用中很重要的一个结构,下面讨论一个简单的实现,虽然简单,但是该有的部分都还是有的。一,访问接口创建一个hashtable.hashtable hashtable_new(int size) // size表示包含的接点个数。存入key-value至hashtable中。void hashtable_put(hasht转载 2017-06-13 15:18:32 · 655 阅读 · 0 评论 -
海量数据处理算法—Bloom Filter
转载-学习使用1. Bloom-Filter算法简介 Bloom-Filter,即布隆过滤器,1970年由Bloom中提出。它可以用于检索一个元素是否在一个集合中。 Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。它是一个判断元素是否存在集合的快速的概率算法。Bloo转载 2017-06-05 14:34:08 · 262 阅读 · 0 评论 -
大根堆小根堆及其应用
转载:http://blog.csdn.net/pngynghay/article/details/22052737堆的概念堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:Key[i]=Key[2i+1]&&key>=key[2i+2]即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&转载 2017-06-06 17:06:07 · 1488 阅读 · 0 评论 -
红黑树(RB-tree)比AVL树的优势在哪?
转载:http://blog.csdn.net/mmshixing/article/details/51692892今天看了STL源码剖析中关于红黑树的原理和实现,看完复杂的节点插入、节点颜色变换后不禁想:这些功能经典的AVL树也能实现,为什么要提出红黑树?查了些资料,并且加上自己理解,感叹红黑树的巧妙。首先红黑树是不符合AVL树的平衡条件的,即每个节点的左子树和右子树的高度最多差转载 2017-06-19 10:41:53 · 818 阅读 · 0 评论 -
二分查找算法
二分查找算法 二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为O(n).但二分查找算法则更优,因为其查找时间为O(lgn),譬如数组{1, 2, 3, 4, 5, 6, 7, 8, 9},查找元素6,用二分查找的算法执行的话,其顺序为: 1.第一步查找中间元素,即5,由于5转载 2017-06-21 09:48:54 · 210 阅读 · 0 评论 -
AVL树及C语言实现
概念 平衡二叉树(Balanced binary tree)是由苏联数学家Adelson-Velskii and Landis于1962年首先提出的,所以又称为AVL树。定义:平衡二叉树或为空树,或满足如下性质的二叉树: (1)本身首先是一棵二叉搜索树 (2)左右子树深度之差的绝对值不超过1; (3)左右子树仍然为平衡二叉树.平衡因子BF转载 2017-06-21 10:59:37 · 409 阅读 · 0 评论 -
跳表SkipList
跳表SkipList1.聊一聊跳表作者的其人其事2. 言归正传,跳表简介3. 跳表数据存储模型4. 跳表的代码实现分析5. 论文,代码下载及参考资料 . 聊一聊作者的其人其事 跳表是由William Pugh发明。他在 Communications of the ACM June 1990, 33(6) 668-676 发表了Skip lis转载 2017-07-11 10:02:51 · 243 阅读 · 0 评论 -
浅析SkipList跳跃表原理及代码实现
转载:http://blog.csdn.net/ict2014/article/details/17394259SkipList在leveldb以及lucence中都广为使用,是比较高效的数据结构。由于它的代码以及原理实现的简单性,更为人们所接受。我们首先看看SkipList的定义,为什么叫跳跃表?“ Skip lists are data structures that us转载 2017-07-11 16:17:24 · 358 阅读 · 0 评论 -
为什么求模运算要用素数(质数)—— 哈希表设计
为什么求模运算要用素数(质数)—— 哈希表设计 By admin | 2013 年 7 月 25 日 | 杂记, 编程技术在设计用除法来散射的哈希表时,我们都会用数值模哈希表大小,得到的余数来作为ID存入哈希表对应格子中。所有文章都表明要用一个较大的素数来作为哈希表的大小,也就是要模一个较大的素数。但为什么就是要用素数呢?简单分析一下可以看出玄机。先看看如果用一个转载 2017-06-23 10:43:10 · 981 阅读 · 0 评论 -
hash实例讲解
from http://blog.jobbole.com/49229/说明:本文分为三部分内容,第一部分为一道百度面试题Top K算法的详解;第二部分为关于Hash表算法的详细阐述;第三部分为打造一个最快的Hash表算法。第一部分:Top K 算法详解问题描述百度面试题:搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-2转载 2017-06-23 14:50:09 · 2154 阅读 · 0 评论 -
哈希表应用实例
1:问题描述 针对某个集体(比如你所在的班级)中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。2:基本要求 假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用伪随机探测再散列发处理冲突。3:数据结构设计[cpp] vi转载 2017-06-23 14:53:31 · 2467 阅读 · 2 评论 -
哈希表和完美哈希
我们知道,通过对数组进行直接寻址(Direct Addressing),可以在 O(1) 时间内访问数组中的任意元素。所以,如果存储空间允许,可以提供一个数组,为每个可能的关键字保留一个位置,就可以应用直接寻址技术。哈希表(Hash Table)是普通数组概念的推广。当实际存储的的关键字数比可能的关键字总数较小时,这时采用哈希表就会比使用直接数组寻址更为有效。因为哈希表通常采用的数组尺寸与转载 2017-06-23 15:07:52 · 516 阅读 · 0 评论 -
一致性哈希算法(consistent hashing)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2转载 2017-07-03 15:31:11 · 175 阅读 · 0 评论 -
两个有序数组的中位数
[LeetCode] Median of Two Sorted Arrays 两个有序数组的中位数 There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time转载 2017-08-26 13:55:20 · 410 阅读 · 0 评论