算法与数据结构
文章平均质量分 88
liangdu_Zuker
这个作者很懒,什么都没留下…
展开
-
讲解KMP算法的核心【套娃】思想
引用一段别人的答案KMP 算法(Knuth–Morris–Pratt algorithm)的基本思想 阅读本文之前,您最好能够了解 KMP算法解决的是什么问题,最好能用暴力方式(Brute Force)解决一下该问题。 KMP 算法主要想解决的是文本搜索的问题:给定一个模式字符串 p 和一个子串 t, 找出 p 串出现在 t 串中的位置。术语定义“abc”(引号中的字符串): 代表字符...原创 2020-05-03 23:38:28 · 1287 阅读 · 0 评论 -
树与图在索引上的区别
树与图在索引上的区别以下内容来源于,利用并查集求解图是否有环,这道算法题的理解。声明:树是图的一个子概念,因此,这里声明下文的图是指非树的图,就是特指不是树的图。树与图在节点与路径上的区别。树和图的区别体现在节点特征上,树节点自顶向下角度看,只会被一个父节点指向,自底向上角度看,只会被指向只一个父节点。而图节点无论如何都可以是一个以上。用哈希表来表示树树的结构可以用哈希表表示,利...原创 2020-04-22 18:35:11 · 923 阅读 · 0 评论 -
链表的角度看待二叉树
链表的角度看待二叉树链表节点的本质就是一种带“一个同类指针”的对象。二叉树节点的本质就是一种带“两个同类指针”的对象。为了不干扰我们对核心问题的研究。不考虑“不允许环形指向”这个约束。我们很少为链表建立栈实现遍历,因为专门为链表建立辅助栈的利用率不高,容易造成空间O(n)的浪费。而我们经常会为二叉树,建立辅助栈,辅助栈的长度等于数的深度。我们可以把二叉树看成多个...原创 2020-04-13 10:24:09 · 143 阅读 · 0 评论 -
利用二叉树前序和后序遍历序列的相似性质巧妙实现后序遍历迭代算法
前序遍历是后序遍历的准镜像算法。无论是从递归的角度看,还是迭代的角度看。都是!我们怎么定义准镜像算法?就是通过微调原来前序遍历的定义后,再进行镜像操作。//看一下如下代码框架://递归前后序遍历// 递归前序遍历recursive(root) { if(root == null) { return ; } list.add(root.val);...原创 2020-04-13 10:22:16 · 1334 阅读 · 0 评论 -
关于排序算法的随手记
递归首先排序算法还是栈实现排序算法都存在空间复杂度问题。另外就是插入排序对于原本已经有序的数组排序效率接近n,对于乱序的排序则反而接近n^2.希尔排序(步长排序)就是先通过步长将原数组分为很多小组先调整出顺序性,然后再最后进行插入排序。其利用的就是插入排序对有序数组效率高的性质来设计的。归并排序也被叫做二叉树排序,因为他是完全二叉树自底向上的排序过程。(有点像线段树)快速排序...原创 2020-04-05 22:40:03 · 169 阅读 · 0 评论 -
从什么是althashing开始解读java的HashMap
从什么是althashing开始解读java的HashMap本文不包含一行代码,你可以读完,回头再去看代码,或者你一边看着源码,一边品味也可以。建议看完再重看一边源代码。写在前面本文的目的是搞懂Map的设计思想,HashMap的实现原理。capacity, thresholder, loadFactor究竟是什么奇淫巧计。所谓的rehash,是业界在扯淡还是真有其事?被众...原创 2020-03-26 21:16:02 · 311 阅读 · 0 评论 -
观李永乐老师《双蛋问题》解题后感
观李永乐老师《双蛋问题》解题后感题目开始前,随便说几句。随便说几句,就是随随便便说的,看不懂没关系。随便说,可能会表达得不好,当作阅读前的热身 。李永乐老师双蛋问题,大概就是讲,给你两个钛合金鸡蛋,在100层楼中去测试鸡蛋的耐摔度,就是摔碎鸡蛋的临界点。问你最少要试扔多少次(不是多少个,是扔多少次),这两个鸡蛋是你的科研经费能买到的唯一物质。之后, 李永乐老师,把问题难度提高,给...原创 2020-03-22 14:36:16 · 3514 阅读 · 0 评论 -
观李永乐《皇帝的新衣》后感以及红蓝眼悖论解题思路
观李永乐《皇帝的新衣》后感以及红蓝眼悖论解题思路前言写这篇博客不是主要的目的:不是为了提供这题目的答案。不是为了讲“共有知识”和“公共知识”的概念区别。不是为了研究这道题目的悖论。不是为了讲解这个题目怎么采用数学归纳法进行验证和解答。以上不作为本文讲解内容的部分均可在互联网上找到详细的相关文档。在看本文前需要了解,最好对上面的知识有个简单的了解或者印象,查阅一下相关资料。本文...原创 2020-02-15 23:57:43 · 8462 阅读 · 1 评论 -
递归&迭代&回溯&递推&树形递归&线性递归&尾递归概念汇总
递归&迭代&回溯&递推&树形递归&线性递归&尾递归概念汇总引用文档https://www.jianshu.com/p/32bcc45efd32 递归与迭代的区别知识储备在阅读文章前需要查询:递归的定义回溯的定义迭代的定义递推的定义树形递归的定义线性递归的定义尾递归的定义线性迭代的定义笔记......原创 2020-02-08 15:46:32 · 1770 阅读 · 0 评论 -
现有16张牌:红桃A、Q、4;黑桃J、8、4、2、7、3;草花K、Q、5、4、6;方块A、5.抽出其中一张告诉甲点数,告诉乙花色。甲说,我不知道这张牌,乙说,我知道你不知道
排除掉甲一拿到就能知道花色得牌比如排除黑桃J 8 2 7 3草花K 6这样甲就会在开局说不知道而乙说“我知道你不知道”,也就是说乙所知道的花色内的数字一定不包含被排除的哪些数字中那么乙手中的花色一定是黑桃和方块紧接着甲说知道了那么甲手中的数字肯定很特殊也就是在AQ45中找一个如果是A的话,那么甲肯定无法区分是黑桃色的还是方块色的所以甲手中...原创 2019-09-05 11:46:37 · 20876 阅读 · 0 评论 -
白话RSA算法原理
密码学研究的是加密和解密。 - 加密就是把明文通过“加密算法”变成密文。 - 解密就是把密文通过“解密算法” 变成明文。加密算法,我们可以认为就是在涉及一个算法,使得 明文变成别人看不懂的符号,同时自己有办法看得懂的算法。(从严格上来讲,只要只需要把明文变成别人看不到的符号就可以了,但这样没任何意义。)解密,则是运用各种手段把别人的密文转变为明文。解密有很多种手段,尽管我要讲的是“R原创 2017-04-20 11:13:32 · 1377 阅读 · 0 评论 -
快速排序
快速排序涉及2类处理,一个是【站队partition】,一个是【快排的坐标遍历】整个快速排序过程可以理解为:先对整理做简单的排序,然后把整理分隔成2个部分,再对部分进行简单排序,以此类推。 整个过程可以理解为是一个二叉树的中序遍历,每个节点代表一次【站队(partition)】 既然是满二叉树的遍历,我们有2种算法设计思路,一个是原创 2016-10-12 19:40:36 · 352 阅读 · 0 评论 -
缓存设计与 LRU
缓存的数据结构采用哈希表,key到value的映射。网上有些资料采用记录数据的使用时刻 实现LRU策略,此处采用双向链表 实现LRU策略。LRU Least Recently Used,MRU Most Recently Used双向链表,lruPtr头指向最近最少使用的元素,mruPtr头指向最近最多使用的元素。LRUCache tc(3); //最大三个元素tc.转载 2016-10-10 18:24:23 · 1114 阅读 · 0 评论 -
《数据结构学习总结》--表,队列,堆栈
表,队列,堆栈我们再数据结构里面的上一级抽象可以具有【实现】和【操作】抽象表的《实现》而实现是指,具体在内存空间中的表现形式在【内存空间】中分为两个【区】,分别是【栈空间】,【堆空间】 栈空间,常常用于存放基本数据类型,由系统自行管理和回收堆空间,由用户进行分配和回收管理因此,我们的抽象表在内存空间中的实现可以有两种形式,一种是栈原创 2015-02-15 18:09:45 · 552 阅读 · 0 评论 -
redis学习
redis官网redis的优点:数据类型 有string(字符串)、以及4中数据结构 list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)高性能的key-value数据库对资源操作只有一个线程,从根源保证了数据的原子性周期性的把更新的数据写入磁盘把修改操作写入追加的记录文件根据记录日志实现主从同步单层树复制从服务器采用消息/订阅机制冗余原创 2016-10-29 19:39:32 · 312 阅读 · 0 评论 -
1-20的两个数把和告诉A,积告诉B,A说不知道是多少,B也说不知道,这时A说我知道了,B说我也知道了,请你猜猜这两个数的和是多少
1~20中选2个数,把这个两个数的和告诉A,2个数的积告诉B。然后问A知道这两个数是多少吗?A说不知道,再问B知道这两个数是多少吗?B也说不知道。之后A突然推理出这两个数分别是多少了,并告诉B他知道答案了。B随后也知道了这两个数是多少了。请问他们是怎么推理的,这连个数是多少呢?拿到问题相信很多人是懵逼的,我也在,昨晚在路边等朋友,看到这个问题,就在大脑里原创 2016-12-21 16:49:53 · 29041 阅读 · 8 评论 -
开发者常犯的十大加密错误
在经历过成千上百行的代码审计以及在Stack Overflow上阅读了大量有关安全方面的帖子之后,我列出了开发人员常犯的10大加密错误。不幸地是,有问题的加密无处不在。能正确完成加密的次数远远小于不能正确完成的次数。很多问题是由如下两个原因造成的:在默认情况下,加密API是不安全的,没有完备的文档。虽然Java在这两个方面表现最差,但不仅仅只有Java在这两个方面表现最差。也许,Java应转载 2017-05-08 14:08:40 · 1172 阅读 · 0 评论 -
阿里天池中间比赛总结,即消息队列引擎设计
阿里天池中间比赛总结,即消息队列引擎设计总结题目传送门: https://code.aliyun.com/middlewarerace2017/open-messaging-demo?spm=5176.100068.555.1.76d97540zXrIuM这次比赛的任务就是:根据阿里的《Open-Messaging规范》实现消息队列引擎该规范也是阿里开源消息队列racketMq的接口规范。要求,多原创 2017-07-03 17:56:48 · 867 阅读 · 0 评论 -
【 用漫画图解贝叶斯公式】-- 我家狗叫的时候,是不是有小偷进门了?告诉我。
关注我的微博@滚打包吃鱼 http://weibo.com/u/2443436765, 持续更新 【漫画图解编程】原创 2017-07-22 13:45:18 · 1095 阅读 · 0 评论 -
字符串匹配查找算法-KMP
KMP的思路在于跳转,有效率的跳转可以减少很多不必要的比较。而用于跳转依据的表称为跳转表,也叫next[]数组next[]数组生成的依据就是“尽量可能不让步”的思想。。。例如A字符串和B字符串比较,我们会让B的开头和A的第一位比较,当遇到不一样的时候,我们不会“ 不让步”,而是让B的开头和A的第二位开始重新做匹配比较。这显然不合理。这是完全不考虑“不让步”的做法原创 2016-10-12 19:41:03 · 357 阅读 · 0 评论