sin

Redis(七):set/sadd/sismember/sinter/sdiffstore 命令源码解析

て烟熏妆下的殇ゞ 提交于 2020-02-01 10:56:06
  上两篇我们讲了hash和list数据类型相关的主要实现方法,同时加上前面对框架服务和string相关的功能介绍,已揭开了大部分redis的实用面纱。   现在还剩下两种数据类型: set, zset.   本篇咱们继续来看redis中的数据类型的实现: set 相关操作实现。   研究过jdk的hashmap和hashset实现的同学,肯定都是知道,set其实就是一个简化版的map,只要将map的 k->v 的形式变为 k->1 的形式就可以了。所以set只是map的一个简单包装类。   同理,对于 redis的 hash 和 set 数据类型,我们是否可以得出这么个结论呢?(如果是那样的话,我们就只需看几个set提供的特殊功能即可)      同样,我们从功能列表开始,到数据结构,再到具体实现的这么个思路,来探索redis set的实现吧。 零、redis set相关操作方法   Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。可根据应用场景需要选用该数据类型。(比如:好友/关注/粉丝/感兴趣的人/黑白名单)   从官方的手册中可以查到相关的使用方法。 1> SADD key member1 [member2] 功能: 向集合添加一个或多个成员 返回值: 本次添加到redis的member数量

高等数学——讲透求极限两大方法,夹逼法与换元法

假装没事ソ 提交于 2020-01-31 10:50:54
本文始发于个人公众号: TechFlow 今天的文章聊聊高等数学当中的 极限 ,我们跳过极限定义以及一些常用极限计算的部分。我想对于一些比较常用的函数以及数列的极限,大家应该都非常熟悉。 大部分比较简单的函数或者数列,我们可以很直观地看出来它们的极限。比如 1 n \frac{1}{n} n 1 ​ ,当n趋向于无穷大的时候, 1 n \frac{1}{n} n 1 ​ 的极限是0,再比如当n趋向于无穷大的时候, n 2 n^2 n 2 的极限也是无穷大,等等。但是对于一些相对比较复杂的函数,我们一时之间可能很难直观地看出极限,因此需要 比较方便计算极限的方法 ,今天的文章介绍的正是这样的方法—— 夹逼法和换元法 。 夹逼法 夹逼法在数学领域其实非常常用,在中学的竞赛当中经常出现。夹逼法的原理非常简单,对于某一个函数f(x),我们知道它的表达式,但是很难确定它的范围。我们可以先找到另外两个范围比较容易确定的函数g(x)和h(x),然后证明: g ( x ) ≤ f ( x ) ≤ h ( x ) g(x)\leq f(x) \leq h(x) g ( x ) ≤ f ( x ) ≤ h ( x ) 。通过h(x)和g(x)的范围来夹逼f(x)的范围。 说白了,就是直接求解不方便的函数,我们通过 用其他容易计算的函数来替代 的方法来间接求解,类似于“曲线救国”。

617. Merge Two Binary Trees 、136. Single Number(C++、Python)

。_饼干妹妹 提交于 2020-01-31 04:04:53
617.题目链接: Merge Two Binary Trees C++ //C++ //Approach #1 Using Recursion //时间复杂度O(n),空间复杂度O(n) class Solution { public: TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { if(t1==nullptr)return t2; if(t2==nullptr)return t1; t1->val+=t2->val; t1->left=mergeTrees(t1->left,t2->left); t1->right=mergeTrees(t1->right,t2->right); return t1; } }; Python class Solution: def mergeTrees(self, t1: TreeNode, t2: TreeNode) -> TreeNode: if t1 == None: return t2 if t2 == None: return t1 t1.val+=t2.val t1.left = self.mergeTrees(t1.left,t2.left) t1.right = self.mergeTrees(t1.right,t2.right) return t1 136. 136.

【三角】和差角公式的证明与积化和差和差化积公式的推导

若如初见. 提交于 2020-01-30 00:59:22
基础三角公式 单位圆 所需基本三角公式: sin(a) = -sin(-a) cos(a) = cos(-a) 正切与正弦/余弦的和/差角公式的证明 由右图可知 sin(a+b) 和 cos(a+b) 公式,将 b 用 -b 替换即可得差角公式 由左图可知 tan(a+b) 的公式,将b用-b替换即可得差角公式。由 cot = 1/tan 可得余切的和差角公式 和差化积公式的证明 基于和差角公式得如下四组等式 cos(a+b) - cos(a-b) = cos(b)cos(a) - sin(b)sin(a) - [cos(b)cos(a) + sin(b)sin(a)] = -2sin(b)sin(a) cos(a+b) + cos(a-b) = cos(b)cos(a) - sin(b)sin(a) + cos(b)cos(a) + sin(b)sin(a) = 2cos(b)cos(a) sin(a+b) - sin(a+b) = cos(b)sin(a) + sin(b)cos(a) - [cos(b)sin(a) - sin(b)cos(a)] = 2sin(b)cos(a) sin(a+b) + sin(a+b) = cos(b)sin(a) + sin(b)cos(a) + cos(b)sin(a) - sin(b)cos(a) = 2cos(b)sin(a) PS

组播

天大地大妈咪最大 提交于 2020-01-29 01:06:05
组播 单播只能发给一个接收方,广播发给所有主机,但过多的广播会大量占用网络带宽,造成网络风暴,影响通信。 组播(多播)为折中方式,只有加入某个多播组的主机才能收到数据。 组播的IP地址:224.0.0.1 ~ 239.255.255.254(中间除去广播地址) 组播的发送 1)创建UDP套接字 2)指定目标地址与端口 3)发送数据包 1 /*udp demo */ 2 3 /* usage: 4 * ./client serv_ip serv_port 5 */ 6 #include "net.h" 7 void usage (char *s) 8 { 9 printf ("\nThis is multicast demo!\n"); 10 printf ("\nUsage:\n\t %s serv_ip serv_port", s); 11 printf ("\n\t serv_ip: udp server ip address(between 224~239 segment)"); 12 printf ("\n\t serv_port: udp server port(serv_port > 5000)\n\n"); 13 } 14 15 int main (int argc, char *argv[]) 16 { 17 int fd = -1; 18 int port =

Transformer模型学习笔记

痞子三分冷 提交于 2020-01-28 03:47:29
Transformer模型学习笔记 前言 回顾 参考资料 解读 1. High-level的看一下,transformer大致是个什么样子 2.详细看下, 具体结构,以及输入都长什么样 3.self-attention层 4.多头机制 Multi-head 5.输入语句中词的顺序(Positional Encoding) 6.剩余东西 7.解码器(Decoder) 8.最后输出层 前言 Google研究菌曰: 在transformer模型之前,我们做机器翻译等事情(论文原话: 我们做转录模型(transduction model)) 都是用循环神经网络(RNN)或者卷积神经网络(CNN)作为基本单元,搭建一个包含encoder和decoder的模型. 虽然效果不错,但是显然还有很多进步空间. 既然拿那么多钱,上班又不是996,不如整点新的东西? 于是有了transformer模型. 回顾 回顾下整体流程, 为啥会想到要去创造transformer这个东西. 做机器翻译? –>那咱们搭一个具有encoder-decoder结构的模型. 其中seq2seq是最常用的encoder-decoder模型–>模型里的小单元用基本结构的RNN或者基本结构的CNN. 训练完发现对长句记忆效果不理想,模型记不住之前的信息?发生梯度消失? –>采用RNN的变体结构LSTM 翻译效果不太好

四元数和欧拉角

空扰寡人 提交于 2020-01-23 16:28:53
来源:http://blog.csdn.net/candycat1992/article/details/41254799 四元数介绍 旋转,应该是三种坐标变换——缩放、旋转和平移,中最复杂的一种了。大家应该都听过,有一种旋转的表示方法叫四元数。按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法——矩阵旋转和 欧拉旋转 。矩阵旋转使用了一个4*4大小的矩阵来表示绕任意轴旋转的变换矩阵,而欧拉选择则是按照一定的坐标轴顺序(例如先x、再y、最后z)、每个轴旋转一定角度来变换坐标或向量,它实际上是一系列坐标轴旋转的组合。 那么, 四元数 又是什么呢?简单来说,四元数本质上是一种高阶复数(听不懂了吧。。。),是一个四维空间,相对于复数的二维空间。我们高中的时候应该都学过复数,一个复数由实部和虚部组成,即x = a + bi,i是虚数单位,如果你还记得的话应该知道i^2 = -1。而四元数其实和我们学到的这种是类似的,不同的是,它的虚部包含了三个虚数单位,i、j、k,即一个四元数可以表示为x = a + bi + cj + dk。那么,它和旋转为什么会有关系呢? 在Unity里,tranform组件有一个变量名为rotation,它的类型就是四元数。很多初学者会直接取rotation的x、y、z,认为它们分别对应了Transform面板里R的各个分量。当然很快我们就会发现这是完全不对的

积化和差与和差化积

余生长醉 提交于 2020-01-23 13:42:06
一、求证: \(\sin\alpha\cos\beta=\dfrac{1}{2}[\sin(\alpha+\beta)+\sin(\alpha-\beta)]\) 证明:因为 \[\sin(\alpha+\beta)=\sin\alpha\cos\beta+\cos\alpha\sin\beta\] \[\sin(\alpha-\beta)=\sin\alpha\cos\beta-\cos\alpha\sin\beta\] 将以上两式的左右两边分别相加,得 \[\sin(\alpha+\beta)+\sin(\alpha-\beta)=2\sin\alpha\cos\beta\] 即 \[\sin\alpha\cos\beta=\dfrac{1}{2}[\sin(\alpha+\beta)+\sin(\alpha-\beta)]\] 同理得到 \[\cos\alpha\sin\beta=\dfrac{1}{2}[\sin(\alpha+\beta)-\sin(\alpha-\beta)]\] \[\cos\alpha\cos\beta=\dfrac{1}{2}[\cos(\alpha+\beta)+\cos(\alpha-\beta)]\] \[\sin\alpha\sin\beta=\dfrac{1}{2}[\cos(\alpha+\beta)-\cos(\alpha-\beta

Skr-Eric的数据分析课堂(二)--数据可视化(Matplotlib)(上)

三世轮回 提交于 2020-01-23 05:20:48
数据可视化(Matplotlib) 1.基本绘图 plot(水平坐标, 垂直坐标) 2.线型、线宽和颜色 plot(..., linestyle=线型, linewidth=线宽, color=颜色, ...) 线型:[-]/--/:/-./o/o-/... 线宽:0-oo color:dodgerblue/orangered/limegreen/red/blue/... # -*- coding: utf-8 -*- from __future__ import unicode_literals import numpy as np import matplotlib.pyplot as mp x = np.linspace(-np.pi, np.pi, 1000) cos_y = np.cos(x) / 2 sin_y = np.sin(x) mp.plot(x, cos_y, linestyle='--', linewidth=1, color='dodgerblue') mp.plot(x, sin_y, linestyle='-.', linewidth=3, color='orangered') mp.show() 3.设置坐标范围 xlim(水平坐标最小值,水平坐标最大值) ylim(垂直坐标最小值,垂直坐标最大值) 坐标范围越大,图形越小,反而反之。 # -*-

MATLAB学习笔记(一):几个常用函数的复习(disp、line、text、figure、plot)

对着背影说爱祢 提交于 2020-01-21 01:55:47
寒暄 :终于放寒假了!昨天刚到家,论文先放一边,今天先复习一波MATLAB几个常用函数,更它一篇! 一、 disp() —— 显示文本或数组 1. 语法: disp ( argument ) ; //说明: //如果参量是数组,则显示数组的内容; //如果参量是字符串,则显示字符串文本的内容。 2. 实例: 2.1 输出数字 >> num = 1 ; >> disp ( num ) ; 输出: 1 2.2 输出字符串 >> disp ( ‘ this is string’ ) ; 输出: this is string 2.3 输出数字和字符串 >> num = 1 ; >> disp ( [ ‘num : ’ , num2str ( num ) ] ) ; 输出: num : 1 2.4 输出数组 >> a = [ 1 2 3 ] ; >> disp ( a ) ; 输出: 1 2 3 二、 figure() —— 创建/切换图窗窗口 1. 语法 //语法1:创建一个新的窗口,所有参数采用默认 figure ; //语法2:指定窗口ID,n为ID,且需为正整数,否则报错 figure ( n ) ; //语法3:可以指定窗口的某些属性 //PropertyName:所选属性名,可选的有toolbar、NumberTitle、position、name、menubar; /