算法
文章平均质量分 91
hongmingover
。。。。。。。
展开
-
一致性哈希算法的理解与实践
一致性哈希算法的理解与实践过往记忆大数据2019-03-05本文原文(点击下面 阅读原文即可进入):https://yikun.github.io/2016/06/09/一致性哈希算法的理解与实践/在维基百科中,是这么定义的一致哈希是一种特殊的哈希算法。在使用一致哈希算法后,哈希表槽位数(大小)的改变平均只需要对 K/n个关键字重新映射,其中K是关键字的数量, n是槽位数量。然而在传统的哈希表中,添加或删除一个槽位的几乎需要对所有关键字进行重新映射。引出我们在上文中已经介绍了一致性.原创 2021-03-28 22:13:04 · 155 阅读 · 0 评论 -
leetcode回溯算法
LeetCode--回溯法心得武汉大学 软件工程硕士在读关注他206 人赞同了该文章这两天在刷LeetCode37题解数独时,被这个回溯法折腾的不要不要的,于是我疼定思疼发誓一定要找个能解决这类回溯法的套路出来,方便以后快速解决此类题目。于是我在网上找了两个很经典的回溯法题目--八皇后问题和迷宫问题,认真总结了一番,发现其中还真的有一些共同之处,我会...转载 2020-04-28 16:03:09 · 307 阅读 · 1 评论 -
堆排序
堆排序之前的随笔写了栈(顺序栈、链式栈)、队列(循环队列、链式队列)、链表、二叉树,这次随笔来写堆1、什么是堆?堆是一种非线性结构,(本篇随笔主要分析堆的数组实现)可以把堆看作一个数组,也可以被看作一个完全二叉树,通俗来讲堆其实就是利用完全二叉树的结构来维护的一维数组按照堆的特点可以把堆分为大顶堆和小顶堆大顶堆:每个结点的值都大于或等于其左右孩子结点的值小顶堆:每个结点的值...转载 2020-01-20 11:40:10 · 866 阅读 · 0 评论 -
最长公共子序列
动态规划+优化,双100%思路1、考虑从后往前推导,随着字符串的变长,两个字符串的最后一个字符相同或者不同,对最长公共子序列的长度影响。2、使用arr[i][j]表示text1的前i个字符和text2的前j个字符的最长公共子序列长度,得到以下状态转移方程: 若text1的第i个字符和text2的第j个字符相同,则 arr[i][j] = arr[i - 1][j - 1] ...原创 2020-01-17 13:17:32 · 174 阅读 · 0 评论 -
什么是动态规划?
什么是动态规划?动态规划(Dynamic Programming)是一种分阶段求解决策问题的数学思想,它通过把原问题分解为简单的子问题来解决复杂问题.动态规划在很多领域都有着广泛的应用,例如管理学,经济学,数学,生物学.动态规划适用于解决带有最优子结构和子问题重叠性质的问题.最优子结构: 即是局部最优解能够决定全局最优解(也可以认为是问题可以被分解为子问题来解决),如果问题的最...转载 2020-01-13 14:11:04 · 8943 阅读 · 1 评论 -
什么是动态规划
作者:阮行止链接:https://www.zhihu.com/question/23995189/answer/613096905来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。0. intro 很有意思的问题。以往见过许多教材,对动态规划(DP)的引入属于“奉天承运,皇帝诏曰”式:不给出一点引入,见面即拿出一大堆公式吓人;学生则死啃书本,然后突然...转载 2020-01-13 12:09:24 · 327 阅读 · 0 评论 -
[图解] 归并排序
[图解] 归并排序1. 图示过程(1) 归并排序的流程(2) 合并两个有序数组的流程2. 动图展示3. Java代码实现public static void mergeSort(int[] arr) { sort(arr, 0, arr.length - 1);}public static void sort(int[] arr, int ...原创 2020-01-06 14:45:32 · 96 阅读 · 0 评论 -
手摇算法-----字符串
手摇算法怎样实现字符串倒置呢。直接用头尾两个指针从两边向中间扫。而且不断交换两个指针的内容。void reverse(int a[], int n){ if(n < 2) return; for(int i = 0; i <= n;) swap(a[i++], a[--n]);}然后,如果要实现字符串反转呢,比方,有字符串abcdefg。如果...转载 2020-01-06 11:48:50 · 99 阅读 · 0 评论 -
LeetCode-3 无重复字符的最长子串
LeetCode-3 无重复字符的最长子串题目:3. 无重复字符的最长子串 难度:中等 分类:字符串 解决方案:双指针、滑动窗口<!-- more -->LeetCode前几道题都是经典题,今天我们学习第3题无重复字符的最长子串,这道题在秋招面试中遇见过,再次相遇,如此亲切。下面我们看看这道题的题目描述。题目描述给定一个字符串,请你找出其中不含有重复...原创 2019-12-16 21:19:23 · 100 阅读 · 0 评论 -
布隆过滤器实战【防止缓存击穿】
布隆过滤器实战【防止缓存击穿】为什么引入我们的业务中经常会遇到穿库的问题,通常可以通过缓存解决。 如果数据维度比较多,结果数据集合比较大时,缓存的效果就不明显了。 因此为了解决穿库的问题,我们引入Bloom Filter。适合的场景 数据库防止穿库 Google Bigtable,Apache HBase和Apache Cassandra以及Postgresql 使用Blo...原创 2019-11-19 16:06:43 · 154 阅读 · 0 评论 -
限速请求
//-------------------------------限流的逻辑---------------------while(true) { $redisMutex = $objCache->setnx($setnx, time()+1); if ($redisMutex || (time()>$objCache->get($setnx) &&am...原创 2019-11-11 15:45:17 · 173 阅读 · 0 评论 -
php脚本多进程请求api的限流
$leftime = $objCache->ttl($questratekey);if ($leftime <= 0) { $objCache->set($questratekey,0); $objCache->expire($questratekey, 1);}foreach ($answerInfo as $aresult) { Uti...原创 2019-10-25 14:07:39 · 288 阅读 · 0 评论 -
算法基础:生动理解BitMap算法
算法基础:生动理解BitMap算法17-09-2316:08BitMap?BitMap你可能会想到位图文件,但在算法中也有个叫BitMap的数据结构,常利用在压缩、爬虫系统中url除重、解决全组合问题,经常被用在解决海量数据寻找重复数据或者判断数据是否存在该集合的问题。一道经常出现的面试题面试经常会问:给一台配置是2G内存,要处理一个包含40亿个不重复并且没有排过序的...转载 2019-04-15 23:39:39 · 123 阅读 · 0 评论 -
布隆过滤器(bloom filter)介绍以及php和redis实现布隆过滤器实现方法
布隆过滤器(bloom filter)介绍以及php和redis实现布隆过滤器实现方法引言在介绍布隆过滤器之前我们首先引入几个场景。场景一在一个高并发的计数系统中,如果一个key没有计数,此时我们应该返回0,但是访问的key不存在,相当于每次访问缓存都不起作用了。那么如何避免频繁访问数量为0的key而导致的缓存被击穿?有人说, 将这个key的值置为0存入缓存不就行了吗?确实,这...转载 2019-04-15 20:51:50 · 1536 阅读 · 0 评论 -
跳跃表 SkipList【数据结构】原理及实现
跳跃表 SkipList【数据结构】原理及实现版权声明:转载请注明出处。 https://blog.csdn.net/u014427196/article/details/52454462为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗?...转载 2019-03-10 13:36:53 · 135 阅读 · 0 评论 -
位运算之——按位与(&)操作——(快速取模算法)
位运算之——按位与(&)操作——(快速取模算法)学习redis 字典结构,hash找槽位 求槽位的索引值时,用到了 hash值 & sizemask操作,其后的scan操作涉及扫描顺序逻辑,对同模的槽位 按一定规则扫描!其中涉及位运算 & 和 %操作之间的关系!故整理学习资料如下:原文引自:http://blog.sina.com.cn/s/blog_7b...转载 2019-03-09 22:08:50 · 816 阅读 · 0 评论 -
动画:什么是散列表?
动画:什么是散列表?作者:五分钟学算法 程序员小吴(本文来自作者投稿)散列表散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。散列函数散列函数,顾名思义,它是一个函数。如果...转载 2019-02-22 16:24:37 · 166 阅读 · 0 评论 -
哈希算法和解决哈希冲突的四种方法
哈希算法和解决哈希冲突的四种方法 http://blog.csdn.net/qq_27093465/article/details/52269862哈希函数有五种实现方式:A. 直接定址法:取关键字的线性函数值作为哈希地址。B. 数字分析法:取关键字的中的若干位作为哈希地址。C. 平方取中法:取关键字平方后的中间几位作为哈希地址。D. 折叠法:将关键字分割成位数相同的几部分(最后...转载 2019-01-14 10:45:48 · 3106 阅读 · 0 评论 -
用拉链法和线性探测法解决哈希冲突
用拉链法和线性探测法解决哈希冲突转自:http://www.tuicool.com/articles/QNjAbaf 前言前面学习到的几种算法比如 红黑树 , 二叉搜索树 ,查找插入 时间复杂度 最快也只能到 O(logn) .现在介绍一种算法可以使查找插入 时间复杂度 达到常数级别。散列表(Hash table)也称为 哈希表 。是字典的一种抽象。比如说你要查一个字,通过...转载 2019-01-14 10:29:11 · 1320 阅读 · 0 评论 -
前缀、中缀、后缀表达式(逆波兰表达式)
前缀、中缀、后缀表达式(逆波兰表达式)介绍前缀表达式、中缀表达式、后缀表达式都是四则运算的表达方式,用以四则运算表达式求值,即数学表达式的求职中缀表达式简介中缀表达式就是常见的运算表达式,如(3+4)×5-6前缀表达式简介前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前比如:- × + 3 4 5 6前缀表达式的计算机求值...转载 2019-01-13 15:06:07 · 202 阅读 · 0 评论 -
算术表达式的前缀表达式,中缀表达式和后缀表达式
算术表达式的前缀表达式,中缀表达式和后缀表达式这里所谓的前缀,中缀,后缀是根据操作符的位置来定的,如果操作符在操作数前面,则称为前缀表达式,例如“- + 1 × + 2 3 4 5”;如果操作符在操作数之间,则称为中缀表达式,例如“1+((2+3)×4)-5”;如果操作符在操作数后面,则称为后缀表达式,例如“1 2 3 + 4 × + 5 -”。 虽然中缀表达式符合人类的日常思维习...转载 2019-01-13 15:02:22 · 1066 阅读 · 0 评论 -
理解BitMap算法的原理
理解BitMap算法的原理文章来源:企鹅号 - 我是攻城师前言位图:一种常用的数据结构,代表了有限域中的稠集(dense set),每一个元素至少出现一次,没有其他的数据和元素相关联。在索引,数据压缩,海量数据处理等方面有广泛应用。BitMap 的思想的和原理是很多算法的基础,比如 Bloom Filter、Counting Bloom Filter。BitMap的原理...转载 2019-04-18 15:45:46 · 357 阅读 · 0 评论 -
理解递归的本质:递归与栈
理解递归的本质:递归与栈2018年04月11日 09:34:08 bobbypollo 阅读数:3464 版权声明:本BLOG上原创文章未经本人许可,不得用于商业用途及传统媒体。网络媒体转载请注明出处,否则属于侵权行为。 https://blog.csdn.net/bobbypollo/article/details/79891556递归的基本思想所谓递归,就是有去有回。递归的...转载 2019-01-18 14:29:32 · 418 阅读 · 0 评论 -
数据结构——bitmap
数据结构——bitmap 近期在看《编程珠玑》这本书。 第1章中引入了bitmap(位图)的数据结构。曾经没有接触过, 抽出时间研究了一下,记录下来。 书中描写叙述的情景: 1. 最多1000万个7位数电话号码(号码不反复,实际大概800万个),保存在文本中 2. 每隔一段时间要对号码进行排序 ...转载 2019-04-15 23:42:22 · 154 阅读 · 0 评论 -
分布式缓存击穿(布隆过滤器 Bloom Filter)
分布式缓存击穿(布隆过滤器 Bloom Filter)2018-07-03 04:19:56原创分布式系统共1249人围观0个不明物体前面的文章介绍了缓存的分类和使用的场景。通常情况下,缓存是加速系统响应的一种途径,通常情况下只有系统的部分数据。当请求了缓存中没有的数据时,这时候就会回源到DB里面。此时如果黑客故意对上面数据发起大量请求,则DB有可能会挂掉,这就是缓存击穿...转载 2019-04-15 23:50:35 · 165 阅读 · 0 评论 -
【程序员面试宝典】有1千万条短信,找出重复出现最多的前10条
【程序员面试宝典】有1千万条短信,找出重复出现最多的前10条 (转载▼ 题目:有1千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。请用5分钟时间,找出重复出现最多的前10条。解析:对于本题来说,某些面试者想用数据库的办法来实现:首先将文本导入数据库,再利用select语句某些方法得出前10条短信。但实际上转载 2017-10-10 11:48:14 · 1105 阅读 · 0 评论 -
php哈希分表过程中出现大整型数据溢出问题的解决
php哈希分表过程中出现大整型数据溢出问题的解决背景:python脚本监控数据进行哈希分表,方案如下: ``` def gethashcode(str): import hashlib m = hashlib.md5() m.update(str) ...原创 2019-04-25 16:48:50 · 344 阅读 · 0 评论 -
关于PHP中token的生成的解析
关于PHP中token的生成的解析。背景很多时候我们需要用 token 来作为一些标识, 比如: 一个用户登录后的认证标识.实现方式md5 的方式: 1 2 3 4 $v = 1; // 自己定义的 需要hash 的value 值 $key = mt_rand(); // 这里用 随机串作为key $...转载 2019-04-25 16:36:23 · 2934 阅读 · 0 评论 -
Redis中bitmap的妙用
Redis中bitmap的妙用redis php bitmap23k 次阅读 · 读完需要 12 分钟62在Redis中我们经常用到set,get等命令,细心的你有没有发现,还有几个相似的命令叫setbit,getbit,它们是用来干嘛的?BitMap是什么就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。我们知道8...转载 2019-04-18 15:14:13 · 119 阅读 · 0 评论 -
Bloom Filter 的基本原理和实现
发表于木东居士的专栏订阅在这篇文章中:0x00 前言 0x01 原理 0x02 实现 0x03 误判率 0xFF 总结0x00 前言Bloom Filter 是由 Burton H. Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员。Bloom Filter 最初的论文发表在ACM,...转载 2019-04-18 14:12:11 · 160 阅读 · 0 评论 -
【算法】——Bit-Map(位图)
【算法】——Bit-Map(位图)置顶2019年02月18日 15:03:20Teingi阅读数:51 所谓的BitMap就是用一个bit位来标记某个元素所对应的value,而key即是该元素,由于BitMap使用了bit位来存储数据,因此可以大大节省存储空间。一、Bit-map的基本思想 32位机器上,对于一个整型数,比如int a=1 在内存中占32bit位,这...转载 2019-04-18 11:12:15 · 248 阅读 · 0 评论 -
算法系列-bitmap算法详解和实现
算法系列-bitmap算法详解和实现版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tiankong_/article/details/776510761.什么是bitmap?我们可以将bitmap看成是一种数据结构,所谓的Bit-map就是用一个(或几个)bit位来标记某个元素对应的state(value)。最基本的情况,使用1bit...转载 2019-04-17 19:25:36 · 205 阅读 · 0 评论 -
redis使用watch完成秒杀抢购功能(转)
redis使用watch完成秒杀抢购功能:使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表。它的优点如下:1. 首先选用内存数据库来抢购速度极快。2. 速度快并发自然没不是问题。3. 使用悲观锁,会迅速增加系统资源。4. 比队列强的多,队列会使你的内存数据库资源瞬间爆棚。5. 使用乐观锁,达到...转载 2019-04-16 11:38:01 · 206 阅读 · 0 评论 -
递归的基本原理
递归的基本原理2017年03月09日 20:35:52 JimmieZou 阅读数:6592 标签: C-C++递归八皇后n皇后全排列 更多个人分类: C/C++《算法笔记》学习笔记版权声明:转载请注明出处(http://blog.csdn.net/daniel960601),蟹蟹~ https://blog.csdn.net/Daniel960601/article/details/...转载 2019-01-18 14:21:25 · 259 阅读 · 0 评论 -
go语言实现--二叉树
go语言实现--二叉树 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tuobicui6522/article/details/80502130二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。 二叉树的...转载 2019-01-17 15:26:49 · 157 阅读 · 0 评论 -
链表(上:链表反转)
链表(上:链表反转)1. 逆序打印链表(单链表)给定单链表,从尾到头打印每个节点的值,不同的值之间用空格隔开。比如:1>2>3>4>5输出:5 4 3 2 1用非递归以及递归两种算法实现。非递归思路示例代码:时间空间都为O(n)递归思路其实就是通过函数栈,不断地递归调用递归函数并把p-next传进去,等p-next=null开始弹函数栈。达到逆序输出的结果:2. 链表的最大...转载 2018-04-15 14:42:34 · 199 阅读 · 0 评论 -
Gopher面试中的Coding
Gopher面试中的Coding从四月份下半月开始,陆陆续续面试了几家公司,都是golang的岗位。每一次面试,侧重点都会有不同,有的会直接给过来一道试题, 然后边解题,边讲述自己的思路,然后面试官根据你的思路和你交流沟通;有的呢,让讲述自己最近做过的项目,遇到的难点, 自己怎么解决的问题思路,而无独有偶的呢,这样的面试中,都要需要展示编码能力。这篇文章就把自己最近面试中遇到的每一个编程问题, 分...转载 2018-04-08 16:13:14 · 162 阅读 · 0 评论 -
判断两个链表是否相交并找出交点
判断两个链表是否相交并找出交点转载 2016年03月27日 10:01:278369问题描述:一个比较经典的问题,判断两个链表是否相交,如果相交找出他们的交点。第一种情况:两个链表均不含有环思路:1、直接法采用暴力的方法,遍历两个链表,判断第一个链表的每个结点是否在第二个链表中,时间复杂度为O(len1*len2),耗时很大。2、hash计数法如 果 两个链表相交,则两个链表就会有共同的结点;而结...转载 2018-03-30 10:35:58 · 495 阅读 · 0 评论 -
程序员小灰2017年原创汇总
程序员小灰2017年原创汇总2017年12月27日 00:00:003526人阅读 评论(4) 收藏 举报版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bjweimengshu/article/details/78909127点击上方“程序员小灰”,选择“置顶公众号”有趣有内涵的文章第一时间送达!这一年多时间里,小灰总共创作了40多篇漫画文章。...转载 2018-03-30 10:09:06 · 384 阅读 · 0 评论 -
php 巧用str_shuffle()函数 生成每次都不一样的字符串
php 巧用str_shuffle()函数 php 巧用str_shuffle()函数str_shuffle():随机打乱字符串的顺序。可以通过str_shuffle()函数与substr()函数的组合,生成每次都不一样的字符串。以下是str_shuffle()函数的两个示例:示例一:随机生成长度为10位数字的字符串。转载 2017-12-27 12:38:12 · 1351 阅读 · 0 评论