![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 91
m0_46598535
这个作者很懒,什么都没留下…
展开
-
hash
平均查找长度主要与什么有关:算法如下: 首先要先知道有几个排序数, 然后将这些排序数列出来,标出每个排序数按哈希函数查找后需要几次才能查找到的次数,然后将这些次数相加后的总和除以排序数的个数就是散列表的平均查找长度。 查找不成功的就是将除以排序数个数变成除以表长就行了。装载因子:是指所有关键子填充哈希表后饱和的程度,它等于 关键字总数/哈希表的长度。散列的堆积现象:是因为冲突的解决方式不是太妥当造成的,比如线性探查解决冲突,使得不仅散列到同一个桶的发生冲突,并且和不是散列到同一个位置的其他关键字也发生原创 2020-05-29 21:22:24 · 117 阅读 · 0 评论 -
二叉树的性质
二叉树的性质性质是从概念观察、思考得来,我们此处总结归纳一些有用的性质:性质1:二叉树的第n层,最多有2^(n-1)个节点n=1,第一层,最多1个节点,2^(1-1)=1n=2,第二层,最多2个节点,2^(2-1)=2n=3,第三次,最多4个节点,2^(3-1)=4性质2:深度为n的二叉树,最多有2^n-1个节点第一层最多有:2^0第二层最多有:2^1第三层最多有:2^2所以深度为h的二叉树,当其为满二叉树时候,最多有:2^0 + 2^1 + 2^2 +…+2^(h-1) 个节点,根原创 2020-05-29 20:56:13 · 1216 阅读 · 0 评论 -
原码、反码、补码
原码、反码、补码知识详细讲解(此作者是我找到的讲的最细最明白的一个)原创 2020-05-29 10:08:04 · 97 阅读 · 0 评论 -
INT_MAX和INT_MIN
INT_MIN在标准头文件limits.h中定义。#define INT_MAX 2147483647#define INT_MIN (-INT_MAX - 1)//数字反转考虑溢出class Solution {public: int reverse(int x) { int flag=0; int y=0; while(x){ int pop=x%10; if (y > INT_MAX原创 2020-05-29 09:47:31 · 246 阅读 · 0 评论 -
海量日志数据,提取出某日访问百度次数最多的那个IP----哈希表
1、海量日志数据,提取出某日访问百度次数最多的那个IP。此题,在我之前的一篇文章算法里头有所提到,当时给出的方案是:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。再详细介绍下此方案:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再原创 2020-05-24 11:41:00 · 409 阅读 · 0 评论 -
哈希表(undered_map)、红黑树(map、set)、B树适用范围区别
区别:红黑树是有序的,Hash是无序的,根据需求来选择。红黑树占用的内存更小(仅需要为其存在的节点分配内存),而Hash事先就应该分配足够的内存存储散列表(即使有些槽可能遭弃用)。**平衡二叉树、b树、红黑树查找和删除的时间复杂度都是O(logn),Hash查找和删除的时间复杂度都是O(1)。**n个节点的平衡二叉树时间复杂度logn,其高度H=logn:推导:n是n个节点,高度为0的最少1个结点。高度为1的的最少是2个结点。而高度为h的最少是f(h-1)+f(h-2)+1个节点m。所以原创 2020-05-24 11:39:39 · 1166 阅读 · 0 评论 -
哈希表,哈希冲突
什么是哈希表?哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。关键字——散列函数(哈希函数)——散列地址优点:一对一的查找效率很高;缺点:一个关键字可能对应多个散列地址;需要查找一个范围时,效果不好。散列冲突:不同的关键字经过散列函数的计算得到了相同的散列地址。好的散列函数=计算简单+分布均匀(计算得到的散列地址分原创 2020-05-23 23:29:12 · 214 阅读 · 0 评论 -
选择、插入、冒泡排序及实现
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。算法步骤:1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。3)针对所有的元素重复以上的步骤,除了最后一个。原创 2020-05-23 01:07:53 · 162 阅读 · 0 评论 -
堆排序算法以及代码实现
堆的一些知识点回顾堆是一个完全二叉树完全二叉树即是:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。堆满足两个性质: 堆的每一个父节点数值都大于(或小于)其子节点,堆的每个左子树和右子树也是一个堆。堆分为最小堆和最大堆。最大堆就是每个父节点的数值要大于孩子节点,最小堆就是每个父节点的数值要小于孩子节点。排序要求从小到大的话,我们需要建立最大堆,反之建立最小堆。堆的存储一般用数组来实现。假如父节点的数组原创 2020-05-22 22:19:07 · 711 阅读 · 0 评论 -
手写快排---递归实现、栈迭代实现
快排思想:选取一个记录作为枢轴,经过一趟排序,将整段序列分为两个部分,其中一部分的值都小于枢轴,另一部分都大于枢轴。然后继续对这两部分继续进行排序,从而使整个序列达到有序。实现:算法:1.选取一个中枢key,2.将数组,小于key的放左边,大于key的放右边3.最后将key放到这个分成2组的中间4.那么这个key的顺序位置就确定了,接下来继续对除了key的左右两组分别继续这样排序。#include <iostream>#include<stack>using nam原创 2020-05-22 20:18:13 · 189 阅读 · 0 评论 -
经典排序算法原理及稳定性判断
各大排序链接1各大排序链接2时间复杂度nlogn:归并(稳定)、堆(不稳)、快速排序(不稳)稳定排序的定义是:在排序过程中,如果两个键的值相同,那么他们的相对位置不发生变化。不符合该规则的排序算法不是稳定排序算法。稳定:归并、冒泡、直接插入、基数...原创 2020-05-22 17:58:17 · 195 阅读 · 0 评论 -
数据结构与算法:队列在有限资源池的应用
参考链接队列有哪些常见的应用?1.阻塞队列1)在队列的基础上增加阻塞操作,就成了阻塞队列。2)阻塞队列就是在队列为空的时候,从队头取数据会被阻塞,因为此时还没有数据可取,直到队列中有了数据才能返回;如果队列已经满了,那么插入数据的操作就会被阻塞,直到队列中有空闲位置后再插入数据,然后在返回。3)从上面的定义可以看出这就是一个“生产者-消费者模型”。这种基于阻塞队列实现的“生产者-消费者模型”可以有效地协调生产和消费的速度。当“生产者”生产数据的速度过快,“消费者”来不及消费时,存储数据的队列很快就原创 2020-05-22 10:50:24 · 120 阅读 · 0 评论 -
数据结构与算法:栈的应用场景
栈的应用场景:1、函数调用中的应用操作系统会给每个线程分配一块内存空间,这块内存被组织成栈结构,每进入一个函数,都会将临时变量作为栈帧入栈;当被调用函数执行完成返回后,将这个函数对应的栈帧出栈。2、栈在表达式求值中的应用编译器通过两个栈来实现,一个栈用来保存操作数,一个栈用来保存运算符。从左到右遍历表达式,当遇到数字,压入操作数栈,当遇到运算符,与运算符栈栈顶进行比较如果比运算符栈顶元素优先级高,就将当前运算符压入栈。否则从运算符栈中取栈顶运算符,从操作符栈中取两个数进行计算,把运算结果压入操原创 2020-05-22 10:44:21 · 594 阅读 · 0 评论