- 博客(77)
- 收藏
- 关注
原创 算法-凸包
算法-凸包凸包凸包边界点问题1. 2021-4-21 andrew逆时针左拐凸包凸包边界点问题1. 2021-4-21 andrew逆时针左拐leetcode48题目:在一个二维的花园中,有一些用 (x, y) 坐标表示的树。由于安装费用十分昂贵,你的任务是先用最短的绳子围起所有的树。只有当所有的树都被绳子包围时,花园才能围好栅栏。你需要找到正好位于栅栏边界上的树的坐标。思路:核心是维护一个栈,Points经过了排序。st[tmp],tmp是栈中当前指针。vis标记的是当前Points的i
2021-04-22 13:54:46 209
原创 算法-树
算法-树算法-树BSTBST节点模板1. 2021-4-18 不同的二叉搜索树 II2. 2021-4-18 恢复二叉搜索树3. 2021-4-18 先序中序构造BST 后序中序构造BST二叉树结构问题1. 2021-4-18 二叉树展开成链表2. 2021-4-18 二叉树最近公共祖先3. 2021-4-18 满二叉树的next指针4. 2021-4-18 一般二叉树的next指针算法-树BSTBST节点模板struct TreeNode{ int val; TreeNode *left,*r
2021-04-18 10:24:55 240
原创 算法-数组
算法-数组数组数组转置1. 2021-4-16 旋转图像数组数组转置1. 2021-4-16 旋转图像leetcode48题目:给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例提示matrix.length == nmatrix[i].length == n1 <= n <= 20-1000 <= matrix[i
2021-04-17 09:08:19 196
原创 算法-BFS
算法-BFSBFSbfs在二维数组1. 2021-4-10 十字路口最优解BFSbfs在二维数组1. 2021-4-10 十字路口最优解题目:在小美和小团生活的城市中,有n行m列共计n*m个十字路口,第i行j列的十字路口有两个属性aij,bij。当行人处在i行j列的路口,对于任意非负整数k:当时间处在[k x aij+k x bij), (k+1) x aij+k x bij)时,行人可以选择走到i±1行j列的路口。当时间处在[(k+1) x aij+k x bij), (k+1) x
2021-04-17 08:52:20 567 1
原创 算法-线段树
算法-线段树线段树单点更新 区间查询1. 2021-4-9 hdu1166 求区间和2. 2021-4-9 hdu1754 求区间最大值线段树线段树原理单点更新 区间查询1. 2021-4-9 hdu1166 求区间和hdu1166思路最简单的单点更新,区间查询,用的是非递归的做法。容易出错的点有<<1和<<2的区别。如何识别一行的字符串和多个int呢,可以通过char ch[10],int a,int b。scanf(%s%d%d)实现。另外本题读到End是要
2021-04-17 08:51:41 107
原创 算法-DFS
算法-DFSDFS暴力回溯1. 2021-4-7 两次回溯2. 2021-4-8 无向图转有向图DFS暴力回溯1. 2021-4-7 两次回溯题目:现在有n个物品,每一个物品都有一个价值,现在想将这些物品分给两个人,要求这两个人每一个人分到的物品的价值总和相同(个数可以不同,总价值相同即可),剩下的物品就需要扔掉,现在想知道最少需要扔多少价值的物品才能满足要求分给两个人。输入描述:第一行输入一个整数 T,代表有 T 组测试数据。对于每一组测试数据,一行输入一个整数 n ,代表物品的个数。
2021-04-17 08:50:30 346
原创 算法-字符串
算法-字符串算法-字符串匹配1.2021-4-8 单模匹配 kmp hdu17112.2021-4-7多模匹配 AC自动机 hdu22223. 2021-4-14 计算器匹配回文1. 2021-3-29 最短回文1.2021-4-10 Manacher hdu3294两个字符串比较1.2021-4-12 LCS最大公共子序列1.2021-4-12 LIS最大递增子序列1.2021-4-13 LCIS最大公共递增子序列算法-字符串匹配1.2021-4-8 单模匹配 kmp hdu1711hdu1711
2021-04-17 08:48:55 207
原创 算法-查找
算法-查找查找环形数组1. 2021-4-3 约瑟夫环二分法1.2021-3-30 构建二分法2.2021-4-5 看起来是二叉,但是是二分查找查找环形数组1. 2021-4-3 约瑟夫环题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。输入描述:一行,一个正整数n(1<=n<=1000000)。输出描述:输出答案。示例1输入5输出4说明出局的编号依次为3,1,5,2,最后留下的是4
2021-04-17 08:47:29 390
原创 算法-图论
算法-图论图论强联通分量1. 2021-4-6 tarjan算法最短路径1. 2021-4-1 dijsktra最短路径最大值二分图1. 2021-3-31 二分图最大匹配2. 2021-4-1 二分图最小点覆盖图论强联通分量1. 2021-4-6 tarjan算法题目:在一次聚会中,教授们被要求写下自己认可哪位教授的学术成果(也可以写自己,且可能出现重复)。已知,如果教授 A 认可教授 B ,且教授 B 认可教授 C,那么即可视为教授 A 也认可教授 C。现在我们想知道有多少对教授是两两互相认可
2021-04-17 08:46:44 863 2
原创 算法-分治
算法-分治分治子问题分类讨论1.2021-4-2 洪水淹发电厂分割分治子问题分类讨论1.2021-4-2 洪水淹发电厂分割题目:伞屉国是一个以太阳能为主要发电手段的国家,因此他们国家中有着非常多的太阳能基站,链接着的基站会组合成一个发电集群。但是不幸的是伞屉国不时会遭遇滔天的洪水,当洪水淹没基站时,基站只能停止发电,同时被迫断开与相邻基站的链接。你作为伞屉国的洪水观察员,有着这样的任务:在洪水到来时,计算出发电集群被洪水淹没后被拆分成了多少个集群。由于远古的宇宙战争的原因,伞屉文明是一个二维世界
2021-04-17 08:45:37 139
原创 算法-滑动窗口
算法-滑动窗口滑动窗口双指针1.2021-4-2 替换两个字符最长连续子序列滑动窗口双指针1.2021-4-2 替换两个字符最长连续子序列题目:小A很喜欢字母N,他认为连续的N串是他的幸运串。有一天小A看到了一个全部由大写字母组成的字符串,他被允许改变最多2个大写字母(也允许不改变或者只改变1个大写字母),使得字符串中所包含的最长的连续的N串的长度最长。你能帮助他吗?输入描述:输入的第一行是一个正整数T(0 < T <= 20),表示有T组测试数据。对于每一个测试数据包含一行大写字
2021-04-16 15:12:50 87
原创 算法-C++相关
算法-C++相关C++相关小数点精度1.2021-4-3 精度保留小数点后6位%和/1.2021-4- 10取一个数每个位数的数C++相关小数点精度1.2021-4-3 精度保留小数点后6位思路cout.setf(ios::fixed);cout.setprecision(6);随后输出即可,如果忘记了,直接用C输出:printf("%lf",);%和/1.2021-4- 10取一个数每个位数的数题目:小团想要编写一个程序,希望可以统计在M和N之间(M<N,且包含M和N)有
2021-04-16 15:12:04 223
原创 算法-DP
算法-DP状压DP问题1.2021-4-15 用异或性质判断 奇偶性质2.2021-4-15 判断连续1 相邻1一维DP问题1.2021-4-4 字符串字符结合分析2. 2021-4-4 分类讨论前进的1维DP3. 2021-4-6 考虑时间的1维DP4. 2021-4-8 环形数组1维DP青蛙跳台阶问题1.2021-3-30 3种跳法2.2021-3-30 2种跳法,去掉一次跳一阶的跳法背包问题1. 2021-3-29 01背包树形DP1. 2021-4-7 中序序列的dp问题状压DP问题1.202
2021-04-16 15:11:02 382
原创 算法-缓存置换
算法-缓存置换缓存置换LRU1.2021-4-15 实现LRU缓存置换LRU1.2021-4-15 实现LRU题目:运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如
2021-04-16 15:07:43 138
原创 算法-链表
算法-链表链表单链表1.2021-4-14 指定区间单链表节点反转2.2021-4-15 K 个一组翻转链表链表单链表1.2021-4-14 指定区间单链表节点反转题目:给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。示例输入head = [1,2,3,4,5], left = 2, right = 4输出[1,4,3,2,5]思路:两个
2021-04-16 15:05:36 121
原创 mysql索引
mysql索引索引B- B+B-B+为什么要用B+索引主存存取原理磁盘存取原理局部性原理与磁盘预读B-/+Tree索引的性能分析mysql索引实现MyISAM 索引实现InnoDB 索引实现聚簇索引与非聚簇索引索引索引(Index)是帮助MySQL高效获取数据的数据结构。最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,有更好的二分查找(binary search)、二叉树查找(binary tree search)等可以代替。但每种
2021-04-06 11:11:08 257 1
转载 算法-单调栈
算法总结排序字符串回文DP背包问题01背包排序2021-3-29 双指针题目:给定长度为 m 的序列 T ,求一个长度为 n 且字典序最小的排列.并且要求序列 T 为所求排列的子序列.题目保证这样的排列一定存在.S 是 T 的子序列,当且仅当 S 是 T 通过删除任意数量元素所得到的.字典序是单词在字典中的排列顺序,先比较第一个字母,然后比较第二个字母,依次类推。输入描述:第一行输入两个正整数 n 和 m.第二行输入 m 个数,表示输入序列 T1<= m <= n <
2021-03-30 13:00:19 213
原创 基于查询热度和关联度的负载均衡
基于查询热度和关联度的负载均衡MongoDB auto-sharding机制auto-sharding机制auto-sharding的问题基于查询热度和关联度的负载均衡方案定义queryinsert等其他操作数据迁移时机从文档对象热度的高低选择需要迁移的文档根据建模时的关联度选择需要迁移的文档将文档对象关联度和文档对象热度结合MongoDB auto-sharding机制auto-sharding机制MongoDB Sharding 是在 Collection 即集合层面来分布存储数据的。Shar
2021-03-29 14:00:32 225
原创 MongoDB负载均衡优化
这里写目录标题参考context负载均衡优化平衡的三个步骤问题相关工作参考mongodb官网分片及负载均衡方案《基于 FODO 算法 MongoDB 自动分片的改进》《基于 DBAF算法的 MongoDB负载均衡策略》《基 于 冷 热数 据 的 MongoDB 自 动分 片 机 制》context单机INM语法层移植不完全,但部分数据可以被存入MongoDB。在进行移植的同时,考虑DPINM的架构。出于DPINM1.0并发读写性能的低效,优先考虑分片以及负载均衡问题。由于当前INM底层替
2021-03-28 20:06:16 1047 2
原创 第一周上课内容
数据库基础关系型数据库与非关系型数据库关系型数据库非关系型数据库mysql与oracle关系型数据库与非关系型数据库关系型数据库简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。常用概念关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名。元组:可以理解为二维表中的一行,在数据库中经常被称为记录。属性:可以理解为二维表中的一列,在数据库中经常被称为字段。域:属性的取值范围,也就是数据库中某一列的取值限制。关键字:一组
2021-03-22 15:23:34 213 1
原创 DPINM2.0进度与思考
DPINM2.0进度与思考问题与思路DPINM1.0的问题改进的思路目前进度论文方向之前工作当前问题问题与思路DPINM1.0的问题张剑师兄的DPINM基于原有的单机INM上进行开发,在一致性算法上采用了优化版本的二阶段提交算法,在数据分片上采用了一致性哈希。但碍于底层存储引擎Berkeley DB(提供键-值类型的数据存取功能: 每个对象都将所有的数据序列化后存放在一个键值对中,键是系统分配的 ID)。其序列化喝反序列化操作非常耗时,导致原有单机INM的速度非常缓慢,在分布式后表现也不尽如人意。
2021-03-16 11:14:08 173
原创 libevent事件处理框架 event_base
本文讲解的部分对应于Reactor 框架组件。在libevent中,Reactor 框架组件表现为event_base结构体,结构体声明如下,它位于event-internal.h 文件中:struct event_base {const struct eventop * evsel ;void * evbase;int event_count ; /* counts number of total events /int event_count_active ; / counts number
2021-01-31 20:49:31 249 1
原创 C++ Libevent 高级事件bufferevent
bufferevent 相比于 event 比较高级的事件bufferevent有 三个事件当数据从底层的缓冲区 拷贝到应用层缓冲区,触发读回调(事件)当应用层缓冲区写入到底层缓冲区,触发写回调当你的连接 连接与断开,会触发事件回调总结1个文件描述符2个缓冲区(应用层)3个事件回调普通event0个缓冲区1个回调, 不管读写,触发的都是一个回调函数buffevent 常用的 api1.bufferevent_socket_newstruct bufferevent
2021-01-17 20:27:36 222
原创 libevent-bufferevent模块
bufferevent简单介绍一般通过libevent进行网络编程,都是将一个socket的fd与一个event进行绑定,并自行维护一个buffer用于存储从socket上接收的数据,同时可能也用于待发送数据的缓存。然后通过可读可写事件从socket上收取数据写入缓存并进行相应处理,或者将缓存中的数据通过socket发送。libevent为这种带缓存的IO模式提供了一种通用的机制,那就是bufferevent。一个bufferevent包含了一个底层...
2021-01-10 15:02:34 198
原创 ANTLR4(十四) 调用在隐藏Channel里的信息
写在之前我们曾经介绍过这样一种情况:忽略空白和注释,但在必要的时候也能调用他们。我们的处理方法是:将不需要的注释和空白放到 channel HIDDEN中。那么这次,我们尝试将空白和注释放在多个Channel中。之后我们会用一个例子演示如何读取在隐藏Channel中的信息。将空白和注释放到不同的Channel中注意在最新的版本中,以下这种方法已经过时了。@lexer::members { public static final int WHITESPACE = 1; publ
2020-09-06 13:20:04 4031
原创 ANTLR4(十三)解决歧义性总结
写在之前之前我们已经通过两个例子尝试着解决过歧义性的问题:运算符优先性我们通过语法分析器优先匹配靠前的规则这一准则,将乘法设置在加法规则之前,来解决这个问题。但问题是,这种优先性的歧义是在语法分析树遍历时产生的,如果我们在词法分析或者语法分析过程就遇到歧义的规则呢?词法分析时的歧义在Keywords.g4中,我们设置了IF、WHILE等多个关键字。但在词法分析过程中,它们会与ID:[a-zA-z] 这种常见的标识符词法规则产生歧义。后来我们通过在ID规则的内嵌动作中多添加了一次判定,判
2020-09-05 16:32:55 1520
原创 ANTLR4(十二) 内嵌代码之关键字类型替换
写在之前我们在编写语言的时候常会碰到这样一个问题:在用ID:[a-zA-z]+这样的词法规则作为标识符时,类似于if while这样的关键字匹配就会发生歧义。前几篇博客中,我们已经介绍了如何在文法规则中内嵌动作。这次,我们试着只在词法规则中内嵌动作。预期效果i这样的字符会被识别成标识符,而碰到if这样的关键字,其词法符号类型会被转换成对应关键字类型。内嵌代码我们拿一个简单的关键字识别语法文件为例。语法文件BEGIN、END、IF、WHILE、THEN作为我们的关键字。grammar Ke
2020-09-05 14:30:06 1229
原创 ANTLR4(十一) 内嵌代码之CSV文件解析
写在之前加载CSV数据(Listener模式)原有语法文件grammar CSV;file : hdr row+ ;hdr : row ;row : field (',' field)* '\r'? '\n' ;field : TEXT | STRING | ;TEXT : ~[,"\n\r]+ ;ST
2020-09-05 10:48:55 410
原创 ANTLR4(十) 内嵌代码之计算器
写在之前采用访问器的计算器语法文件:grammar Expr; prog: stat+ ;stat: expr NEWLINE | ID '=' expr NEWLINE | CLEAR NEWLINE | NEWLINE ;expr: expr op=('*'|'/') expr | ex
2020-09-04 14:14:20 756 1
原创 ANTLR4(九) 修改错误信息
@[TOC](ANTLR4(九) 修改错误信息)写在之前先来回顾一下ANTLR4是如何处理并分析输入流的。语法文件一个简单的类分析语法文件。grammar Simple;prog: classDef+ ; // match one or more class definitionsclassDef : 'class' ID '{' member+ '}' // a class has one or more members {System.out.print
2020-09-03 14:28:56 2243
原创 ANTLR4(八) 将JSON翻译成XML
ANTLR4(八) 将JSON翻译成XML预期效果原有语法文件我的思考具体流程运行结果预期效果输入t.json:输出t.xml:原有语法文件// Derived from http://json.orggrammar JSON;json: object | array ;object : '{' pair (',' pair)* '}' | '{' '}' ;pair:
2020-09-02 14:04:31 662
原创 ANTLR4(七) 加载CSV数据
加载CSV数据需求初步构想语法部分应用程序部分实际实现语法部分应用程序部分需求目标:将.csv文件的第一行作为列名,将接下来的每行的信息提取出来并打印。输入t.csv :输出:初步构想我们将语法和应用程序部分解耦合。语法部分由于首行作为列名,我们需要将它与普通的行区分开。每行的元素可以是String、text、甚至是空。应用程序部分保存首行的值作为列名。创建一个保存所有行信息的List。在进入改行时,每一行建立一个map,将首行的列名与值一个一个对应起来输入。在离开该行时,将
2020-09-01 14:08:02 484 1
原创 MongoDB源码阅读之通信协议(一)
MongoDB wire protocolMongoDB通过一种特殊的client/server 之间的协议:wire protocol。它是一种基于socket的request/response之间的通信协议。用户通过mongo shell或者driver API, 进行创建、删除、更新以及执行管理操作的命令, 都会产生一个Message, 用来表示该操作需要的信息。 每一个消息, 都有一些公共的部分, 被称作MsgHeader, 它分别记录了消息体的长度, 当前消息的requestId, 目的端的da
2020-09-01 13:18:51 619
原创 Mongodb源码分析之cursor(四)
查询部分:1. mongo客户端的请求2. mongod配置服务器端对数据库的加载3. mongod query中cursor操作4. mongod对于document的匹配mongod query中cursor操作几个关于mongodb的游标概念:basicCursor: 直接扫描整个collection的游标,可设置初始的扫描位置,扫描为顺序扫描.ReverseCursor: 反向扫描游标,相对于顺序扫描,这里是反向扫描.GeoCursorBase: 空间地理索引游标的基类.
2020-09-01 13:18:14 548
原创 Mongodb源码分析之查询请求(三)
查询部分:mongo端的请求mongod端的数据库的加载mongod query的选取mongod文档的匹配与数据的响应mongo端的请求:首先进入mongo的查询请求部分:将请求分装成一个Message结构,然后将其发送到服务端,等待服务端的相应数据,取得数据最后显示结果.下面来看具体流程分析:当我们点击db.coll.find({x:1})时,首先来到了mongo/shell/dbshell.cpp if ( ! wascmd ) { try
2020-09-01 13:17:54 481
原创 Mongodb源码分析之插入操作(二)
本文我们分析mongodb中数据的插入流程.插入的简单流程可以归结于如下:如果存在对应collection则从collection中分配空间,然后将数据保存到分配的空间中,不存在则先从database中分配对应的collection,若database不存在则分配database,建立xx.ns和xx.0 等文件.根据插入数据更新collection中的索引.下面来看代码,根据前面的分析我们知道插入操作的入口函数为:receivedInsert. void receivedInse
2020-09-01 13:17:39 190
原创 mongodb的存储管理
mongodb中能够保存的最大collection数目.mongodb官网(Using a Large Number of Collections,)的信息如下:By default MongoDB has a limit of approximately 24,000 namespaces per database. Each namespace is 628 bytes, the .n...
2020-09-01 13:16:40 603
原创 ANTLR4(六) 返回值 传参
ANTLR4 返回值及传参的几种方式写在之前标签的Visitor语法文件自定义Visitor运行结果自定义的栈自定义Listener运行结果ParseTreeProperty自定义Listener运行结果对比写在之前我们已经熟知了ANTLR4的Listener以及Visitor模式。虽然我们用java来编写应用程序,但是我们想将语法文件和应用文件解耦合出来,因此暂时不用内嵌动作。接下来我们会介绍三种方式:带标签的Visitor模式(java自带函数栈)、自定义的栈、ANTLR4辅助数据结构Parse
2020-09-01 10:07:57 1330
原创 ANTLR4(五) 解析JSON
ANTLR4 解析JSON解析JSON从JSON参考手册中提取关键信息根据信息编写语法文件json文件对象键值对数组值字符串转义字符UNICODEHEX数字无符号整数指数符号空白字符通过语法分析树检验解析JSON这次我们试着用新学的语法和词法知识来解析json。从JSON参考手册中提取关键信息一个典型的json文件:我们从json的参考手册和官方语法解释得出以下:一个json文件可以是一个对象,或者是一个由若干值组成的数组。一个对象是一组无序的键值对集合;一个对象以一个{开始,并以一个}结
2020-08-31 11:01:00 1321 1
原创 ANTLR4(四) 基础设计语法
ANTLR4基础设计语法写在之前语言模式序列选择词法符号依赖嵌套处理优先级、结合性、左递归优先级结合性左递归核心语法标记总结词法结构匹配标识符匹配数字匹配字符串常量匹配注释和空格核心词法规则总结写在之前对于ANTLR的.g4文件来说,它的格式一般如下://xx.g4grammar xx文法1:文法2:文法...词法规则词法1:词法2:...注意的几点:文件名和grammar关键字后跟的语法名应该一致。文法规则和词法规则可以同时存在一个文件中,但文法以小写开头,词法以大写
2020-08-30 13:54:18 7224 4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人