log2

RabbitMQ介绍及安装部署

半城伤御伤魂 提交于 2020-03-07 07:46:08
本节内容: RabbitMQ介绍 RabbitMQ运行原理 RabbitMQ重要术语 三种ExchangeType RabbitMQ集群种类 集群基本概念 镜像模式部署集群 一、RabbitMQ介绍 消息系统通过将消息的发送和接收分离来实现应用程序的异步和解偶。 或许你正在考虑进行数据投递,非阻塞操作或推送通知。或许你想要实现发布/订阅,异步处理,或者工作队列。所有这些都属于消息系统的模式。 RabbitMQ是一个消息代理,一个消息系统的媒介。它可以为你的应用提供一个通用的消息发送和接收平台,并且保证消息再传输过程中的安全。 RabbitMQ是一个在AMQP协议标准上完整的、可复用的企业消息系统。它遵循Mozilla Public License开源协议,采用Erlang语言实现的工业级的消息队列。 二、RabbitMQ运行原理 RabbitMQ的两大核心组件是Exchange和Queue,以下是它的运行原理图: 三、RabbitMQ重要术语 Server(broker): 接受客户端连接,实现AMQP消息队列和路由功能的进程。 Vitual Host: 这是一个虚拟概念,类似于权限控制组,一个Vitual Host里面可以有若干个Exchange和Queue,但是权限控制的最小粒度是Vitual Host。 Exchange: 接收生产者发送的消息

树链剖分详解

给你一囗甜甜゛ 提交于 2020-02-22 06:44:30
  问题是这样的:对于一株树(无向无环连通图),为每个结点分配对应的权重。要求能高效计算任意两个结点之间的路径的各类信息,其中包括路径长度(路径上所有结点的权重加总),路径中最大权重,最小权重等等。到这里一切都还是比较简单的,我们可以利用Tarjan的LCA算法在线性时间复杂度内快速求解。但是如果还要求允许动态修改任意结点的权值,那么问题就不简单了。很容易发现这有些类似于线段树的问题,但是线段树是作用在区间上,而我们的问题是发生在树上的,因此线段树并不适用。而树链剖分则是可以用于求解这类问题的高效算法,其更新权值的时间复杂度为O(log2(n)),而统计路径信息的时间复杂度为O((log2(n))^2)。下面对树链剖分进行讲解。   对于任意一株树,我们记r.size表示以结点r为根的子树中的结点总数,称为r的大小。记r.next表示r的所有子结点中size属性最大的一个结点(如果没有子结点允许留空),称为r的重孩子,而其余子结点称为r的轻孩子,与重孩子相连的边称为重边,而与轻孩子相连的边称为轻边。利用深度优先搜索算法可以在O(n)时间复杂度内计算所有结点的size和next属性。   很容易发现通过将每个结点与其重孩子通过一条特殊的链条连接,那么我们就在图中建立了多条互不相交的链路,每个结点都处于一个链路中(链路可能只有一个结点),这些链路称为重链。每一条重链中所有结点深度不同

linux指令-mv

旧时模样 提交于 2020-02-05 12:29:57
移动文件、目录;修改文件名或目录名 mv test.log test1.txt 将文件 test.log 重命名为 test1.txt mv llog1.txt log2.txt log3.txt /test3 将文件 log1.txt,log2.txt,log3.txt 移动到 /test3 目录中 mv -i log1.txt log2.txt 将文件 log1.txt 改名为 log2.txt,如果 log2.txt 已经存在,则询问是否覆盖 mv * ../ 移动当前文件夹下的所有文件到上一级目录 【Java面试题与答案】整理推荐 基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linux MySQL Oracle Redis Dubbo 来源: CSDN 作者: ConstXiong 链接: https://blog.csdn.net/meism5/article/details/104178573

通信基础笔记 ----奈奎斯特和香农定理

纵饮孤独 提交于 2020-01-20 08:03:36
奈奎斯特和香农定理 信道容量概念: 信道容量是在一定条件下给定通信路径(信道上)所能达到的最大数据传输速率。 1)在无噪声理性情况下 适用于 奈奎斯特准则:即其信道传输速率为 C=2W log2 M C:传输速率/信道容量 W:信道带宽 M:电平个数 例1:3000HZ带宽下,无噪声,8电平传输,求信道容量 C=2W log2 8 =2x3000x3=18kbit/s 例2:4000HZ带宽,256相调制技术,求信道容量: C=2W log2.256=2x4000x8=64kbit/s 2)在有噪声情况下,信道的极限信息传输速率,适用于香农定理: C=W log2(1+S/N) C:信道容量/传输速率 W:信道带宽 S/N:信噪比 即信号功率/噪声功率 (db)=10 log10(S/N) 上公式中如果是db形式,需转换成倍数带入…切记 例3: 20db信噪比,带宽3kHz,求信道容量 C=W.log2(1+S/N)=3000xlog2(1+100)=3000x6.66=19.98kbit/s 20db=10log10(100) 来源: CSDN 作者: 真正的能量来自内心 链接: https://blog.csdn.net/weixin_45547778/article/details/103757137

麻省理工公开课算法导论(二):Insertion Sort and Merge Sort

放肆的年华 提交于 2020-01-16 07:13:22
文章目录 Introduction Insertion Sort and Merge Sort Why Sorting? Insertion Sort Binary Insertion Sort Merge Sort Summary Introduction 本篇来自于笔者学习MIT的公开课算法导论的学习笔记,仅仅是我个人接受课程教育后,进行的学习笔记,可能理解并不到位,仅供参考。 课程视频地址: Lecture 3: Insertion Sort and Merge Sort Insertion Sort and Merge Sort Why Sorting? 首先让我们思考一个问题,为什么我们需要排序? 在日常生活中的很多场景,例如管理MP3的歌曲列表、维护手机通讯录等等,针对这些场景,排序可以将问题变得更加的简单。 Insertion Sort 接下来我们介绍一种排序算法,叫做 插入排序(Insertion Sort) 。 假定给定有序数组A[1…j-1],我们希望将元素A[j]插入有序数组数组中,如下图: 当然,这是非常理想的情况,我们只需要遍历数组,通过前后元素大小比较,找到A[j]应该插入到的位置,在该种情况下,时间复杂度为 O(n) 。 但是情况往往不可能会这么好,假定给定数组A[1…j-1],其中元素是乱序,我们希望将元素A[j]插入有序数组数组中,如下图:

Moq基础(二)

♀尐吖头ヾ 提交于 2020-01-10 11:04:51
Moq基础(二) 上一章介绍了手动创建单元测试依赖,和 Moq 的小demo 这一章我们看一下 Moq 的使用。 不过,at the vary beginning,我想再和大家确认两个概念问题—— Stub (存根)和 Mock (模拟) Stub 和 Mock 都是测试方法依赖隔离的 伪造对象 ,不同之处是 Stub 是测试方法运行所需要的依赖, Mock 是测试方法验证说需要的依赖。 听懂了么?没有懂对不对。没关系,我们上代码。 public class Foo2 { private ILog _log1; private ILog _log2; public Foo2(ILog log1,ILog log2) { _log1 = log1; _log2 = log2; } public void DoB() { //do something var text = _log1.Read(); _log2.Write(text); } } 还是之前的日志系统的例子,不过这次我们做的是从日志系统1中读取内容,存入到日志系统2中。 看一下我们的测试代码 [TestMethod] public void TestMethod3() { var fakeLog1 = new Mock<ILog>(); var fakeLog2 = new Mock<ILog>(); fakeLog1

RMQ(ST算法)

廉价感情. 提交于 2019-12-18 17:36:29
RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列a,回答若干询问RMQ(A,i,j)(i, j<=n),返回数列a中下标在i,j之间的最小/大值。如果只有一次询问,那样只有一遍for就可以搞定,但是如果有许多次询问就无法在很快的时间处理出来。在这里介绍一个在线算法。所谓在线算法,是指用户每输入一个查询便马上处理一个查询。该算法一般用较长的时间做预处理,待信息充足以后便可以用较少的时间回答每个查询。ST(Sparse Table)算法是一个非常有名的在线处理RMQ问题的算法,它可以在O(nlogn)时间内进行预处理,然后在O(1)时间内回答每个查询。 步骤如下: 假设a数组为: 1, 3, 6, 7, 4, 2, 5 1.首先做预处理(以处理区间最小值为例) 设mn[i][j]表示从第i位开始连续2^j个数中的最小值。例如mn[2][1]为第2位数开始连续2个的数的最小值,即3, 6之间的最小值,即mn[2][1] = 3; 之后我们很容想到递推方程: mn[i][j] = min(mn[i][j - 1], mn[i + (1 << j - 1)][j - 1]) 附上伪代码: for(int j = 0; j < 20; j ++) for(int i = 1; i + (1 << j) <= n + 1; i

UVA529 Addition Chains (IDA*)

被刻印的时光 ゝ 提交于 2019-12-15 18:30:38
UVA529 Addition Chains (IDA*) 题目描述 传送门 这道题用了IDA*, ( 虽然我不太会 ) (PS: 思路来源: 李煜东《算法竞赛进阶指南》CD附带代码) 可以发现一个很好的性质, 就是: 当前数列末尾数为a时, 凑成b至少需要 l o g 2 ( b / a ) log_2(b/a) l o g 2 ​ ( b / a ) 步. 因为用a凑b的话, 可以看成凑成 2 n a = b 2^na = b 2 n a = b , 因为每次可以增大a的 2 n 2^n 2 n (n为第几次), 所以n就是就是最小步数, 等于 l o g 2 ( b / a ) log_2(b/a) l o g 2 ​ ( b / a ) , 所以估价函数就可以利用这个性质 (1,2 无法算出正确值, 只好打表了) 上代码(本人比较喜欢重载, 码风有点丑, 敬请原谅): # include <iostream> # include <cstdio> # include <algorithm> # include <cmath> # include <cstring> # include <cstdlib> using namespace std ; # define rep(i,j,k) for(int i=j;i<=k;i++) # define per(i,j,k)

【封装工程】OI/ACM常用封装

这一生的挚爱 提交于 2019-12-04 06:58:09
【ST表(静态RMQ)】 // program at 2019-11-12 template <class T, int N, int M> struct ST { T f[N + 5][M + 1]; int log2[N]; T compare(T x, T y) { return x < y ? x : y; } void init(int* a) { log2[0] = -1; for (int i = 1; i <= N; i++) f[i][0] = a[i], log2[i] = log2[i >> 1] + 1; for (int j = 1; j <= M; j++) for (int i = 1; i + (1 << j) - 1 <= N; i++) f[i][j] = compare(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]); } T query(int l, int r) { int k = log2[r - l + 1]; return compare(f[l][k], f[r - (1 << k) + 1][k]); } }; 来源: https://www.cnblogs.com/chhokmah/p/11844955.html

[BZOJ3277/BZOJ3473] 串 - 后缀数组,二分,双指针,ST表,均摊分析

泄露秘密 提交于 2019-12-03 10:52:51
[BZOJ3277] 串 Description 现在给定你n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串(注意包括本身)。 Solution 首先将所有串连接起来,预处理出后缀数组和高度数组。 显然直接主席树可以很容易做到 \(O(n \log^2 n)\) 。对于每一个后缀的位置,二分一个 LCP 长度,找到这个 LCP 长度对应的区间,检查这个区间是否合法来调节二分边界。 注意在这个做法里,瓶颈不在于主席树,因为主席树的功能完全可以用双指针预处理一个数组来替代。瓶颈在于,实质上使用了一个二分套二分的做法。 但我们有更好的做法。 引理:按照原始顺序,如果第 \(i\) 个后缀有 \(x\) 个前缀能被 \(k\) 个串包含,那么第 \(i+1\) 个后缀至少有 \(x-1\) 个前缀能被 \(k\) 个串包含。 那么我们先用双指针预处理 \(jmp[i]\) 代表按照后缀排序,最大的 \(j\) 使得 \([j,i]\) 这个后缀区间合法。 到第 \(i\) 个后缀的时候我们就从后缀 \(i-1\) 的答案开始向上枚举,用二分+ST表找出它左右边第一个高度比当前枚举值小的位置,判断这个区间的合法性来决定是否继续枚举,均摊时间复杂度 \(O(nlogn)\) 。 \(O(\log n)\) 解法 #include <bits/stdc++