num

【翻译/介绍】jump Consistent hash:零内存消耗,均匀快速简洁,来自Google

百般思念 提交于 2020-03-02 02:11:28
简介 jump consistent hash是一种一致性哈希算法, 此算法 零内存消耗 , 均匀分配 , 快速 ,并且 只有5行代码 。 此算法适合使用在分shard的分布式存储系统中 。 此算法的作者是 Google 的 John Lamping 和 Eric Veach,论文原文在 http://arxiv.org/ftp/arxiv/papers/1406/1406.2294.pdf 完整代码: JumpConsistentHash 1 2 3 4 5 6 7 8 9 int32_t JumpConsistentHash ( uint64_t key , int32_t num_buckets ) { int64_t b = - 1 , j = 0 ; while ( j < num_buckets ) { b = j ; key = key * 2862933555777941757ULL + 1 ; j = ( b + 1 ) * ( double ( 1LL << 31 ) / double (( key >> 33 ) + 1 )); } return b ; } 输入是一个64位的key,和桶的数量(一般对应服务器的数量),输出是一个桶的编号。 原理解释: 下面byron根据论文的推导过程,做个翻译: jump consistent hash的设计目标是: 平衡性

01字典树

余生长醉 提交于 2020-03-02 01:14:06
学习与: https://blog.csdn.net/zuzhiang/article/details/79872805 一.描述 1.与普通字典树相似,只不过不是插入字符,而是 插入二进制串的每一位(0或1) 2.01字典树是一棵 最多32层的二叉树 3.tree[i] 表示一个节点, tree[i][0] 和 tree[i][1] 表示节点的两条边指向的节点,val[i] 表示节点的值。 4.每个节点主要有 4个属性: 节点值、节点编号、两条边指向的下一节点的编号。 5.节点值 val为 0 时表示到当前节点为止 不能形成一个数,否则 val[i]=数值。 6.可通过贪心的策略来寻找 与x异或结果最大(最小)的数 ,即 优先找和x的二进制的未处理的最高位值不同(相同)的边对应的点 ,这样保证结果最大。 二.模板 int tot = 0 ; ll val [ 32 * maxn ] ; int tree [ 32 * maxn ] [ 2 ] ; void init ( ) { //初始化 tot = 0 ; memset ( tree , 0 , sizeof ( tree ) ) ; memset ( val , 0 , sizeof ( val ) ) ; } void insertt ( ll num ) //插入 { int root = 0 ; for ( int i

Kosaraju

半城伤御伤魂 提交于 2020-03-01 21:46:43
//Kosaraju # include <bits/stdc++.h> using namespace std ; const int NUM = 10005 ; vector < int > G [ NUM ] , rG [ NUM ] ; vector < int > S ; int vis [ NUM ] , sccno [ NUM ] , cnt ; void dfs1 ( int u ) { if ( vis [ u ] ) return ; vis [ u ] = 1 ; for ( int i = 0 ; i < G [ u ] . size ( ) ; i ++ ) dfs1 ( G [ u ] [ i ] ) ; S . push_back ( u ) ; } void dfs2 ( int u ) { if ( sccno [ u ] ) return ; sccno [ u ] = cnt ; for ( int i = 0 ; i < rG [ u ] . size ( ) ; i ++ ) { dfs2 ( rG [ u ] [ i ] ) ; } } void Kosaraju ( int n ) { cnt = 0 ; S . clear ( ) ; memset ( sccno , 0 , sizeof ( vis ) ) ; memset (

Python 查找算法

*爱你&永不变心* 提交于 2020-03-01 21:31:25
递归查找 def bi_search_re(num_list,val): def bi_search(l, h): if(l > h): return -1 mid = (l + h) // 2 if(num_list[mid] == val): return mid ; if(num_list[mid] > val): return bi_search(l, mid - 1) else: return bi_search(mid + 1, h) return bi_search(0,len(num_list)-1) num_list = [0,1,2,3,4] print(bi_search_re(num_list,1)) print(bi_search_re(num_list,3)) 二分法查找,前提:有序 def bi_search_iter(alist,item): left, right = 0, len(alist) - 1 while(left <= right): mid = left + (right - left) // 2 #(left + right) // 2 Java或c++容易溢出 if(item < mid): right = mid -1 elif(item > mid): left = mid + 1 else: return mid

Python入门练习: 练习实例七

白昼怎懂夜的黑 提交于 2020-03-01 20:19:13
目录 Python入门练习 Python入门练习 题目: 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 程序分析: 利用 while 或 for 语句,条件为输入的字符不为 '\n'。 str1=input('请输入 :') list1=[] num=0 letter=0 space=0 other=0 for i in str1: if i.isalpha(): #函数字母 num=num+1 elif i.isspace(): #判断空格 space=space+1 elif i.isdigit(): #判断数字 letter=letter+1 else: other=other+1 print('数字有',letter,'个') print('字母有',num,'个') print('空格有',space,'个') print('其他字符有',other,'个') 来源: CSDN 作者: Thinklov 链接: https://blog.csdn.net/u010244992/article/details/104591565

C程序设计 谭浩强 第四章课后习题详解(包含算法分析,运行结果)

大城市里の小女人 提交于 2020-03-01 17:53:49
第四章 选择结构程序设计 章节重点:这一章应着重掌握if...else语句、switch多分支语句、关系运算符和关系表达式、逻辑运算符和逻辑表达式、条件运算符和条件表达式、会使用选择结构的嵌套 (1)概念题(这里着重理解) 算数运算:+、-、*、/运算,对象为实数或复数,结果也为实数或者复数。 关系运算:>、>=、<、<=、==、!=,六种,关系运算的值为逻辑值,true、false。 逻辑运算:&&、||、!,三种,逻辑运算的值为逻辑值,true、false。 (2)概念题(这里着重理解) 在C的逻辑运算中 1 代表为 真,以 0 代表为 假 。 在逻辑表达式中的运算对象 非零 代表 真,以 0 代表 假 。 (3)a=3,b=4,c=5。写出逻辑表达式的值(详细讲解一道题) a+b>3&&b==c 要掌握符号的优先级问题,因为a+b=7所以a+b>3为真,然后b是不等于c的所以为假,1&&0,结果为0。 这种题的解题技巧在先处理关系运算,处理完后在分析逻辑运算,分清运算符的结合方向为自右向左还是自左向右。 (4)输入三个数,输出最大值 # include <stdio.h> int main() { int a,b,c,max; scanf("%d,%d,%d",&a,&b,&c);//注意输入格式 if(a>b) max=a; else max=b; if(max<c)

HDU-2093考试排名

浪尽此生 提交于 2020-03-01 17:34:46
题目链接 HDU-2093 题意 实时评测系统根据提交时间和对错误次数罚时进行排名。 思路 结构体存储学生信息 采用字符串读入,遍历字符串,计算每道题的提交时间和错误次数,存入结构体。 计算所有同学的AC题目以及所用时间,一定要注意罚时的计算规则,没有AC的题目不计算罚时,对结构体进行排名。多要素排序可以重载 < 运算符 bool operator < ( student & p ) { if ( scoresum != p . scoresum ) return scoresum > p . scoresum ; //降序 if ( timesum != p . timesum ) return timesum < p . timesum ; //升序 return name < p . name ; } 注意memset函数的使用方法,头文件 <cstring> , 用法为 void* memset( void* dest, int ch, std::size_t count ); 转换值 ch 为 unsigned char 并复制它到 dest 所指向对象的首 count 个字节。若该对象是潜在重叠的子对象或非可平凡复制 ,则行为未定义。若 count 大于 dest 所指向的对象大小,则行为未定义。 可平凡复制的:(TriviallyCopyable) (例如标量、 C

Micropython TturnipBit 体感遥控车

烂漫一生 提交于 2020-03-01 13:34:09
所需器材:  TurnipBit开发板 一块  下载数据线 一条  智能小车套件 一套(底盘、车轮、电机等)  超声波模块(HC-SR04)一个(用作小车的“眼睛”)  L298N电机驱动模块 一个  接入互联网的电脑 一台(推荐使用Google Chome或者Firefox浏览器) 电机驱动和超声波的安装 超声波模块共4个引脚,分别是VCC、GND、Trig和Echo。VCC接TurnipBit扩展板的+5V引脚,GND接TurnipBit扩展板的GND引脚,Trig触发引脚接P5,Echo回传引脚接P8。 L298N电机驱动模块左侧OUT3、OUT4接线端子对应接入左轮电机的下侧、上侧侧铜片,右侧也是。L298N的输入端IN1、IN2、IN3、IN4分别接入扩展板的P19、P13、P12、P11。 详细见下表: TurnipBit扩展板 超声波模块 L298N +5V VCC +12V、+5V GND GND GND P5 Trig P8 Echo P11 IN4 P12 IN3 P13 IN2 P19 IN1 程序设计 伪代码分析 让我们先用伪代码来分析一下避障车的程序逻辑。首先,我们通过小车的超声波模块来检测前方是否存在障碍物,计算出与障碍物之间的距离。当与障碍物的距离小于或等于我们预设的安全距离时,控制小车进行转向避开障碍物

了解面试算法之

。_饼干妹妹 提交于 2020-03-01 12:26:36
算法,一门既不容易入门,也不容易精通的学问。 对于笔者来说算法算是我程序员生涯很不擅长的技能之一了,自从互联网界招人进入平静期后,越来越多的大厂在社招的时候不但会考验面试者的工作所用到的技能,而且会用算法题来考验面试者的逻辑思维能力和基本数据结构的掌握能力。这也就让想要社招进入大厂的部分同学有了一些望而却步的心理,毕竟工作中大部分时间在与UI层面的逻辑打交道,数据处理方面即使之前在学校中掌握的还还不错,几年的 CV 生活,估计也忘的差不多了。 但是作为一条有梦想的咸鱼,我们还是要重拾这些知识的。之前写过一篇 搞懂单链表常见面试题 ,有兴趣的同学可以跳转浏览。今天笔者将会挑选几道栈与队列和位运算的相关题目来回顾下相关算法的基本知识。 栈与队列 栈与队列分别是两种数据结构,不同语言对于栈和队列有着不同的声明,在 java 中 Stack 类是继承自 Vector 集合的子类,Queue 则是以接口形式存在,常用的其实现类是 LinkedList 这个双向队列。在C++的标准模版库也是有这两个数据结构定义的具体类的。 栈数据结构的特点是 FILO(first in last out) 即先进后出,队列则是 FIFO(first in first out)即先进先出。相信栈与队列的数据结构的基本特点大家也是熟记于胸了。下面就带大家看一道面试题来带大家看下这两者在面试题中的形式。

JavaScript中的一些特殊用法(二)

∥☆過路亽.° 提交于 2020-03-01 09:37:32
1. 非数值类型转数值 使用Number()转换时: undefined会转为NaN 如果字符串以0开始,浏览器会忽略前导0,不会按照八进制进行转换 如果字符串以0x开始,浏览器会按照十六进制转化为十进制返回 如果字符串有字符,除( + , - , . )外都会转为NaN,十六进制时,字符串包含任何非数字字符都返回NaN 如果是对象转换,则对象先使用valueof(),然后按照规则转换。如果无valueOf方法,则调用toString方法,再转换。 使用parseInt()转换时: parseInt会忽略前导空格,直到第一个非空字符开始解析,如果为非数字或正负号,则返回NaN。如果为数字则一直解析到第一个非数字为止。注:在parseInt中小数点不是有效的数字字符 parseInt能识别十进制,八进制和十六进制,但是在解析八进制时,ECMAScript 3 和ECMAScript 5存在分歧,ECMAScript 3会将070转化为56,但是ECMAScript 5会转换为70。 使用parseInt的第二个参数 var num1 = parseInt("10",2); //2 按二进制解析 var num2 = parseInt("10",8); //8 按八进制解析 var num3 = parseInt("10",10); //10 按十进制解析 var num4 =