用算法来学计算机
文章平均质量分 60
之前已经有过对算法的学习,总结了一些个人理论,这次重新做算法题是为了将理论付诸于实践,然后从实践中对理论知识进一步归纳得出新的知识。
liangdu_Zuker
这个作者很懒,什么都没留下…
展开
-
一图了解原码、反码、补码的演进历史
我们可以理解反码的问题是“编码重复性”引起的(即存在多个 编码对应 1个值,类似人们身份证的重名。)补码通过移动(反码+1)解决了这个问题,补码的设计思路,个人理解,类似我们写算法处理边界问题时采用“哨兵模式”。当然我觉得解决“编码重复性”问题的方法,还是有很多种的,比如 “ case by case ” 就是一种粗暴的手段。......原创 2022-08-06 15:57:57 · 918 阅读 · 0 评论 -
Netty线程池中的位运算
位运算取余数要求 ** 除数最好是 2的n次方 ** ( 9 % 4 = 1, 4 就是除数, 1是余数)具体可以参考: https://blog.csdn.net/lonyw/article/details/80519652。位运算取余数公式为 val & (n - 1) 等于 val % n (n是被除数,val是被除数)调度器从任务队列拿到任务后,就会从线程组中选择执行任务的线程。Netty线程池由 3 部分组成,任务队列和线程组、调度器。调度器分配任务的最常用的算法是。.原创 2022-08-06 14:12:25 · 131 阅读 · 0 评论 -
读《凤凰架构》- 从HTTP/1.0到QUIC
引用《凤凰架构》-周志明。原创 2022-07-21 00:36:46 · 427 阅读 · 0 评论 -
2小时1000人吃饭,要多少台座椅?
并发数: 指在确保延迟最低(服务质量最好)的情况下,系统能够同时服务的请求数(或者服务的用户数)这个值通常等于线程数,这个值需要根据系统的同时在线用户峰值计算出来(就好比餐厅有多少用餐座位)。最低平均延迟(没有明说,“延迟”都指这个):指在确保延迟最低(服务质量最好)的情况下,平均的延迟(就好比餐厅中食客平均用餐时间)。QPS : 这个是为了系统之间横向对比而造的概念, QPS = 并发数 / 最低平均延时(我们常说的吞吐量,可以理解就是用于横向对比的QPS)。(了解了这些概念你就会开餐厅了)知道并发数,原创 2022-07-14 09:50:20 · 282 阅读 · 0 评论 -
LSM-tree(Log Structured-Merge Tree)的理解
0.术语:WAL (write ahead log) 是一个追加写日志,用来做简单的流水记录和备份。LSM-tree (Log Structured-Merge Tree), 被称为谷歌三驾马车之一,也是一种追加写的日志文件,但是相比粗暴的 WAL, 他将日志分割成本多段,并且每一段都做了查询索引(每一段的查询性能是 Ologn )。SStables (Sorted Strings Table) 可以看成是一张map表,但是他的查询依赖树形索引,查询的复杂度是 Ologn, 他把 key-value.原创 2022-04-11 18:05:20 · 401 阅读 · 0 评论 -
以go语言为例类比侦探推理来讲解【性能分析】
pprof 对go语言进行性能分析pprof 提供一个探针包,需要引入到被【检测程序 Main】 中,然后探针生成的文件,可以被pprof提供的分析工具读取分析。注意:探针监控的指标越多,对 Main 的资源的占用会变多。流程简要:【探针包】"runtime/pprof"然后就是创建【剖析文件】profile, _ := os.Create("cpu_profile")cpu_profile 是剖析文件的自定义名称启动 pprof 【剖析程序】,并产生文档到指定【剖析文件】_ =原创 2021-07-15 10:09:46 · 198 阅读 · 0 评论 -
第一类错误离我们有多远
太久没发博客了,想发又不知道发哪个好。那就随便吧。引用 【数据分析必备技能|正确解读你的AB实验】https://cloud.tencent.com/developer/article/1618910数据分析的思维:当你想分析一个事物并得出结论,就得寻找指标。当这不算数据分析思维,数据分析思维应该是思考怎么证明指标可靠性,比如说,我想证明吃巧克力影响人的心情,就得针对巧克力做ab测试,但我还得证明巧克力跟实验结果构成相关性,即【怎样衡量一个指标是否有显著变化】下一步我就得分析人们心.原创 2021-07-02 23:32:11 · 359 阅读 · 0 评论 -
zookeeper的zab协议解决的问题与设计方案
故事的开始如果从 Lamport 的 basic paxos算法开始捡起来还是有点复杂。我建议从单机开始讲起,对产品不停地迭代。最简单的场景假如,现在我们有一套5个人,需要修改一个变量的值,那就存在竞争问题了。每个人修改值都会做3件事情,那就是读\计算\写。那么就存在一个问题,如果5个人同时对这个变量读写该以谁为准呢?。(我们为了不复杂化我们的系统设计,所以第一个版本,我们【把变量寄放在一块共享内存】)第一个游戏规则如果5个人同时对这个变量读写该以谁为准呢?为了简单粗暴,我们会以最大的为准原创 2020-12-22 18:15:26 · 233 阅读 · 2 评论 -
用树形算法思想去使用思维导图\树形图\鱼骨图
用树形算法思想去使用思维导图\树形图\鱼骨图在过去,我很不喜欢思维导图这种深度很高的图示。因为一旦深度提高了,那么根部和叶子部位之间或者是祖孙关系比较长的节点就会变得晦涩,就好比,虽然你很尊重你的祖先,但是可能连他怎么称呼都忘记了,但是却可以轻易记住你父亲脸上是否有颗痣。为什么会有这种不公平的对待呢?万恶之源正是关系树太深了。正因此,很多时候我是不喜欢去用这种形如鸡肋的图来归纳我的知识库。但我并不打算放弃他,因为他充满美感,因为他随处可见,我试图用各种方式解读他使用它。然而我找到了我认为最佳的理解方式原创 2020-11-30 20:44:09 · 913 阅读 · 1 评论 -
围棋能力概念与软件开发能力概念的对应
围棋几个有用的概念:死活题:这个就类似于面试题,或者是算法题手筋定式:这个就类似于一些计算机基础知识原理,比如iptables的表链形成的过滤拓扑图,以及SSL或者SSH的加密通讯方案。数据库存储引擎的文件缓存管理原理,reactor原理,以及动态代理技术。布局:这个就是架构图设计,以及一些系统设计理论,又或者是代码框架选型使用理论。围棋术语和收官技巧:计算机基础知识,操作系统原理和计算机原理,编程语言特性。主流新手筋和新布局:新技术和研究和发展。子效判断:实战经验和理解。...原创 2020-11-28 11:22:00 · 137 阅读 · 0 评论 -
找众数算法-摩尔投票法
背景假设有N个选票需要统计。当候选人数固定为K人,可以进行K轮统计,每轮需要N个票。所以复杂度是O(n)当候选人数不固定,那么最坏的情况就是O(n^2)。即 候选人有n位,每位都要读n票。当选票号码是有序时。那么候选人的票号就会聚合,这个时候只需要O(n)即可统计每位候选人的票数。如果给定一组数组,我们只针对该数字的某一个范围做一次求解,那么摩尔算法显然是比较合适的,毕竟只需要O(n)即可求解候选人未知且无序的选票中找到众数。但如果我们需要多次再给定数组中做查询,那么先用复杂度高的索引算法建立索原创 2020-11-10 11:50:37 · 618 阅读 · 0 评论 -
【翻文+导读】《Writing a C Compiler》从0开始写C编译器
【翻文+导读】《Writing a C Compiler》从0开始写C编译器前言据说,这是学习做编译器必读优秀文章,所以就做一下翻译以及导读,顺便自己也学习一下。作者Nora Sandler 也很用心,涉及一些如何从0开发编译器的实施计划和方法论 (Abdulaziz Ghuloum 的 增量开发的方式)。转载请留言申请即可翻译《Writing a C Compiler, Part 1》https://norasandler.com/2017/11/29/Write-a-Compiler.html原创 2020-09-15 17:27:44 · 2650 阅读 · 0 评论 -
讲解KMP算法的核心【套娃】思想
引用一段别人的答案KMP 算法(Knuth–Morris–Pratt algorithm)的基本思想 阅读本文之前,您最好能够了解 KMP算法解决的是什么问题,最好能用暴力方式(Brute Force)解决一下该问题。 KMP 算法主要想解决的是文本搜索的问题:给定一个模式字符串 p 和一个子串 t, 找出 p 串出现在 t 串中的位置。术语定义“abc”(引号中的字符串): 代表字符...原创 2020-05-03 23:38:28 · 1287 阅读 · 0 评论 -
非单调性解空间的二分查找
167. 两数之和 II - 输入有序数组给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbe...原创 2020-05-03 16:22:52 · 716 阅读 · 0 评论 -
树与图在索引上的区别
树与图在索引上的区别以下内容来源于,利用并查集求解图是否有环,这道算法题的理解。声明:树是图的一个子概念,因此,这里声明下文的图是指非树的图,就是特指不是树的图。树与图在节点与路径上的区别。树和图的区别体现在节点特征上,树节点自顶向下角度看,只会被一个父节点指向,自底向上角度看,只会被指向只一个父节点。而图节点无论如何都可以是一个以上。用哈希表来表示树树的结构可以用哈希表表示,利...原创 2020-04-22 18:35:11 · 923 阅读 · 0 评论 -
防御性编程的两种手段之一篡改用户输入
非防御性编程:不做边界判断,不假设用户输入会出现极端情况。说白一点就是写代码没有考虑边界。防御性编程:考虑代码有极端情况,以及有边界存在。防御性有两种手段:1.一个是利用if语句将外部用户输入进行检查,或者实时对用户变量进行检查,确保任何参与外部数据计算的过程变量都是合法的。这种做法就是会产生很多if。2.另一种手段,就是修改输入,使其不再可能出现异常情况,常见的做法就是拷贝用户输入,然后...原创 2020-04-20 19:58:23 · 257 阅读 · 0 评论 -
【极小化极大的应用】如何求解象棋游戏最快赢法
写在前面本文为个人手记,是对设计各种【极小化极大算法类型博弈游戏】的设计思路的一个白话总结。开始自言自语由于象棋的步数比较多,走法也比较多,所以无法把所有走法都枚举。只能在给定的棋局里面,遍历可能的走法,遍历的深度会受限于计算力,所以通常都会固定为7层或者14层(根据算力决定)。然后利用极小化极大算法,再7步里面找出评分最高的那一步。(评分规则决定了算法的智慧程度,这种评分一般都由象棋高...原创 2020-04-18 16:06:05 · 674 阅读 · 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 评论 -
观李永乐老师《双蛋问题》解题后感
观李永乐老师《双蛋问题》解题后感题目开始前,随便说几句。随便说几句,就是随随便便说的,看不懂没关系。随便说,可能会表达得不好,当作阅读前的热身 。李永乐老师双蛋问题,大概就是讲,给你两个钛合金鸡蛋,在100层楼中去测试鸡蛋的耐摔度,就是摔碎鸡蛋的临界点。问你最少要试扔多少次(不是多少个,是扔多少次),这两个鸡蛋是你的科研经费能买到的唯一物质。之后, 李永乐老师,把问题难度提高,给...原创 2020-03-22 14:36:16 · 3514 阅读 · 0 评论 -
589. N叉树的前序遍历-用写CPU指令执行器的方式写递归遍历
做题目前随便说点树是一种抽象数据类型,一种具有树结构形式的数据集合。节点个数确定,有层次关系。有根节点。除了根,每个节点有且只有一个父节点。没有环路。所有数据结构都可以用链表表示或者用数组表示,树也一样。589. N叉树的前序遍历给定一个 N 叉树,返回其节点值的前序遍历。例如,给定一个 3叉树 :1| \ 3 2 4...原创 2020-03-09 09:29:14 · 127 阅读 · 0 评论 -
32 - II. 从上到下打印二叉树 II-为什么利用队列进行二叉树广度遍历
做题目前随便说点树是一种抽象数据类型,一种具有树结构形式的数据集合。节点个数确定,有层次关系。有根节点。除了根,每个节点有且只有一个父节点。没有环路。所有数据结构都可以用链表表示或者用数组表示,树也一样。32 - II. 从上到下打印二叉树 II从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树:&nbs...原创 2020-03-09 09:28:40 · 473 阅读 · 0 评论 -
68 - I. 二叉搜索树的最近公共祖先-深入理解二叉搜索树前序遍历
做题目前随便说点树是一种抽象数据类型,一种具有树结构形式的数据集合。节点个数确定,有层次关系。有根节点。除了根,每个节点有且只有一个父节点。没有环路。所有数据结构都可以用链表表示或者用数组表示,树也一样。68 - I. 二叉搜索树的最近公共祖先给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T...原创 2020-03-09 09:27:48 · 238 阅读 · 0 评论 -
68 - II. 二叉树的最近公共祖先-利用后续遍历的回溯法查找3个节点。
做题目前随便说点树是一种抽象数据类型,一种具有树结构形式的数据集合。节点个数确定,有层次关系。有根节点。除了根,每个节点有且只有一个父节点。没有环路。所有数据结构都可以用链表表示或者用数组表示,树也一样。68 - II. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两...原创 2020-03-09 09:26:04 · 346 阅读 · 0 评论 -
669. 修剪二叉搜索树-剪枝与回溯法应用或者分治法与回溯迭代法的应用
做题目前随便说点树是一种抽象数据类型,一种具有树结构形式的数据集合。节点个数确定,有层次关系。有根节点。除了根,每个节点有且只有一个父节点。没有环路。所有数据结构都可以用链表表示或者用数组表示,树也一样。669. 修剪二叉搜索树给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]...原创 2020-03-09 09:25:27 · 247 阅读 · 0 评论 -
938. 二叉搜索树的范围和-前序遍历双剪支的应用
做题目前随便说点树是一种抽象数据类型,一种具有树结构形式的数据集合。节点个数确定,有层次关系。有根节点。除了根,每个节点有且只有一个父节点。没有环路。所有数据结构都可以用链表表示或者用数组表示,树也一样。938. 二叉搜索树的范围和给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。二叉搜索树保证具有唯一的值。示例 1:...原创 2020-02-23 22:57:48 · 133 阅读 · 0 评论 -
257. 二叉树的所有路径-利用堆栈跟踪二叉树前序遍历的过程。
做题目前随便说点树是一种抽象数据类型,一种具有树结构形式的数据集合。节点个数确定,有层次关系。有根节点。除了根,每个节点有且只有一个父节点。没有环路。所有数据结构都可以用链表表示或者用数组表示,树也一样。27. 二叉树的镜像请完成一个函数,输入一个二叉树,该函数输出它的镜像。解题:审题:“请完成一个函数”也就是说,答案是一个函数。输入的是一个二...原创 2020-02-23 14:40:11 · 258 阅读 · 0 评论 -
面试题 04.02. 最小高度树-用游标将数组切割成虚拟数组。
做题目前随便说点树是一种抽象数据类型,一种具有树结构形式的数据集合。节点个数确定,有层次关系。有根节点。除了根,每个节点有且只有一个父节点。没有环路。所有数据结构都可以用链表表示或者用数组表示,树也一样。04.02. 最小高度树给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。给定一个数组,也就是给定一个支...原创 2020-02-23 14:42:02 · 166 阅读 · 0 评论 -
面试题55 - I. 二叉树的深度-动态规划递推回溯
做题目前随便说点树是一种抽象数据类型,一种具有树结构形式的数据集合。节点个数确定,有层次关系。有根节点。除了根,每个节点有且只有一个父节点。没有环路。所有数据结构都可以用链表表示或者用数组表示,树也一样。55 - I. 二叉树的深度输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深...原创 2020-02-23 14:40:53 · 444 阅读 · 0 评论