整数压缩编码 ZigZag】的更多相关文章

在分析Avro源码时,发现Avro为了对int.long类型数据压缩,采用Protocol Buffers的ZigZag编码(Thrift也采用了ZigZag来压缩整数). 1. 补码编码 为了便于后面的分析,我们先回顾下几个概念: 原码:最高位为符号位,剩余位表示绝对值: 反码:除符号位外,对原码剩余位依次取反: 补码:对于正数,补码为其自身:对于负数,除符号位外对原码剩余位依次取反然后+1. 补码解决了原码中\(0\)存在两种编码的问题: \[ 0=[0000 \enspace 0000]_…
 proto2 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化,适合做数据存储或 RPC 数据交换格式.可用于通讯协议.数据存储等领域的语言无关.平台无关.可扩展的序列化结构数据格式. 字段规则 required: 字段必须存在 optional: 字段没有或有一个 repeated: 字段重复,0个或多个 proto 数据类型 .proto Type Notes C++ Type Java Type Python Type[2] Go Type…
http://blog.csdn.net/csfreebird/article/details/7624807 varints用于正整数 (无符号整数) varints 是 一个很不错的技术.将一个整数序列化成1或者多个字节.想起以前我们总是使用4字节表示整数,真的很浪费啊.只有真正追求完美的人才会重视每个细节. 我的本篇介绍是https://developers.google.com/protocol-buffers/docs/encoding中的Base 128 Varints一节的逆过程.…
一. protocol buffers 是什么? Protocol buffers 是一种语言中立,平台无关,可扩展的序列化数据的格式,可用于通信协议,数据存储等. Protocol buffers 在序列化数据方面,它是灵活的,高效的.相比于 XML 来说,Protocol buffers 更加小巧,更加快速,更加简单.一旦定义了要处理的数据的数据结构之后,就可以利用 Protocol buffers 的代码生成工具生成相关的代码.甚至可以在无需重新部署程序的情况下更新数据结构.只需使用 Pr…
问题描述 试题编号: 201612-4 试题名称: 压缩编码 时间限制: 3.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一段文字,已知单词a1, a2, …, an出现的频率分别t1, t2, …, tn.可以用01串给这些单词编码,即将每个单词与一个01串对应,使得任何一个单词的编码(对应的01串)不是另一个单词编码的前缀,这种编码称为前缀码. 使用前缀码编码一段文字是指将这段文字中的每个单词依次对应到其编码.一段文字经过前缀编码后的长度为: L=a1的编码长度×t1+a2的…
1520: 压缩编码 时间限制: 1 Sec  内存限制: 2 MB提交: 107  解决: 54[提交][状态][讨论版] 题目描述 某工业监控设备不断发回采样数据.每个数据是一个整数(0到1000之间).各个数据间用空白字符(空格,TAB或回车换行)分隔. 因为大多数时候,相邻的采样间隔数据是相同的,可以利用这个特征做数据的压缩存储.其方法是:对n(n>1)个连续相同的数字只记录n和该数字本身:对m(m>0)个连续不重复的数字,则记录 m*-1 和这些数字本身(之所以用负数,是为了与第一种…
前文 Base 128 Varints 编码(压缩算法) 介绍了Base 128 Varints这种对数字传输的编码,了解到了这种编码方式是为了最大程度压缩数字的.但是,在前文里,我们只谈论到了正数的情况,那如果出现了负数,该怎么办?zigzag压缩算法解决的就是这个问题. 在聊这个算法之前,我们得先补补课,聊聊二进制补码相关的东东. 一.二进制及补码 我们知道,计算机存储的数据都是二进制的01串,而数字的01串又是以补码的形式存储的,补码是什么东西?为什么要用补码?下面我们一个个来看: 1.原…
问题描述 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个. 输入格式 第一行包含一个整数n. 第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000. 第三行包含一个整数a,为待查找的数. 输出格式 如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1. 样例输入 61 9 4 8 3 99 样例输出 2 数据规模与约定 1 <= n <= 1000.     作者注:在做此题的时候,第十行查找相等的时候多循环了一次,因此一直不满分.…
编写函数,求包含n个元素的整数数组中元素的平均值.要求在函数内部使用指针操纵数组元素,其中n个整数从键盘输入,输出为其平均值. 样例输入: (输入格式说明:5为输入数据的个数,3 4 0 0 2 是以空格隔开的5个整数)5 3 4 0 0 2样例输出:1 样例输入: 73 2 7 5 2 9 1样例输出:4代码如下: #include<stdio.h> int main(){ ; scanf("%d",&N); int a[N]; ;i<N;i++){ sca…
#include <sstream> //ostringstream, ostringstream::str() ostringstream stream; stream << n; //n为要转字符串的整数 string s = stream.str(); 个位数转字符:n + '0' 字符转个位数:c - '0'…
原文地址:http://blog.csdn.net/u013074465/article/details/46956295 现在有n个无重复的正整数(n 小于10的7次方),如果内存限制在1.5M以内,要求对着n个数进行排序.[编程珠玑第一章题目] 很显然,10的7次方个整数占用的空间为10 ^ 7 * 4字节,大约等于40M,而内存限制为1.5M,因此,无法将所有数字加载到内存,所以快速排序.堆排序等高效的排序算法就没法使用.这里可以使用bitmap方式,用1bit表示一个整数,那么,10^7…
1. exit:退出脚本.可以定义,如 #exit 数字(0-255) 2. 文件测试 -e FILE:测试文件是否存在 -f FILE:测试文件是否为普通 -d FILE:测试指定路径是否为目录 -r FILE:测试指定文件对当前用户有读权限 -w FILE:测试指定文件对当前用户有写权限 -x FILE:测试指定文件对当前用户有执行权限 [ –e  /etc/inittab ] , 注这个括号前后有空格 3. 多分支的if语句 格式如下: if 判断条件1; then statement1…
第二小整数 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8299    Accepted Submission(s): 5227 Problem Description 求n个整数中倒数第二小的数.每一个整数都独立看成一个数,比如,有三个数分别是1,1,3,那么,第二小的数就是1.   Input 输入包含多组测试数据.输入的第一行…
Given a positive integer n and you can do operations as follow: If n is even, replace n with n/2. If n is odd, you can replace n with either n + 1 or n - 1. What is the minimum number of replacements needed for n to become 1? Example 1: Input: 8 Outp…
Given two 1d vectors, implement an iterator to return their elements alternately. For example, given two 1d vectors: v1 = [1, 2] v2 = [3, 4, 5, 6] By calling next repeatedly until hasNext returns false, the order of elements returned by next should b…
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between). For example:Given binary tree {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7 return its…
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 之前那篇文章写的是罗马数字转化成整数(http://www.cnblogs.com/grandyang/p/4120857.html), 这次变成了整数转化成罗马数字,基本算法还是一样.由于题目中限定了输入数字的范围(1 - 3999), 使得题目变得简单了不少. 基本字符 I V…
Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases. Notes: It is intended for this problem to be spe…
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility) P A H N A P L S I I G Y I R And then read line by line: "PAHNAPLSII…
题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大数和第二大数,然后将数组剩余的数依次与这两个数比较,如果这个数a比max1大,则先将max1赋给max2,使原先最大的数成为第二大的数,再将这个数a赋给max1,如果这个数a比max1小但比max2大,则将这个数a赋值给max2,依次类推,直到数组中的数都比较完. c语言代码: #include<stdio.h> #include<stdlib.h> #define N 10…
//给定N个整数序列{A1,A2,A3...An},求函数f(i,j)=(k=i~j)Ak的求和 # include<stdio.h> void main() { ,sum1; ]={,-,,,,,-,,,-};//数组要定义的时候直接全部赋值 //int a[10];!!!!! // a[10]={1,-2,3,4,5,6, //给定N个整数序列{A1,A2,A3...An},求函数f(i,j)=(k=i~j)Ak的求和 # include<stdio.h> void main(…
问题描述 实现‘字符串加法’,即将两个以字符串形式表示的数字相加,得到结果然后返回一个新的字符串. 例如:输入‘123’,‘321’,返回‘444’. 这样在进行两个任意大的整数相加的时候,既不会溢出,也不会损失精度. 解决方案 1 我的解决方案 function sumStrings(a,b) { var result = [], count = 0; if(a.length < b.length) b=[a, a=b][0]; b=Array(a.length-b.length+1).joi…
问题描述: We are asking for a function to take a positive integer value, and return a list of all positive integer pairs whose values - when squared- sum to the given integer. For example, given the parameter 25, the function could return two pairs of 5,…
将一个整数,比如1567898765转换为xxx.xxx.xxx.xxx的IP地址的形式, 以下是源代码 union IPNode{ unsigned int addr; struct { unsigned char s4,s3,s2,s1; };}; void PrintIP(unsigned int x){ IPNode a; a.addr = x; printf("%d.%d.%d.%d\n",a.s1,a.s2,a.s3,a.s4);}void main(){ unsigned…
INET_ATON(expr) 给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数.地址可以是4或8比特地址. mysql> SELECT INET_ATON('209.207.224.40'); -> 3520061480 产生的数字总是按照网络字节顺序.如上面的例子,数字按照 209×2563 + 207×2562 + 224×256 + 40 进行计算. INET_ATON() 也能理解短格式 IP 地址: mysql> SELECT INET_ATON('12…
题目简述 The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility) P A H N A P L S I I G Y I R And then read line by line: "PAHNA…
一.题目:数值的整数次方 题目:实现函数double Power(doublebase, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 在.NET Framework提供的BCL中,Math类实现了一个Pow方法,例如要求2的三次方,可以通过以下代码实现: , ); 本题就是要实现一个类似于该Pow方法的功能. 二.解决思路与实现 2.1 不加思索的思路 不需要考虑大数问题,可以在30秒内想到的思路如下: public double Po…
问题描述 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个. 输入格式 第一行包含一个整数n. 第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000. 第三行包含一个整数a,为待查找的数. 输出格式     如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1. 样例输入 61 9 4 8 3 99 样例输出 2 数据规模与约定 1 <= n <= 1000.   方案一: #include<stdio.h>int mai…
舍入规则: Math.ceil():执行向上舍入,即它总是将数值向上舍入为最接近的整数: Math.floor():执行向下舍入,即它总是将数值向下舍入为最接近的整数: Math.round():执行标准舍入,即它总是将数值四舍五入为最接近的整数. 1.定义一个数组: let number=[10.0,10.2,10.3,10.5,10.7]; 示例: Math.ceil() Math.floor() round()…
zju对时间要求比较高,这就要求我们不能简单地暴力求解(三个循环搞定),就要换个思路:因为在循环时,已知a,确定b,c,d,在外重两层循环中已经给定了b和c,我们就不用遍历d,我们可以利用d^3=a^3-b^3-c^3来判断这个d. 看代码: #include <stdio.h> #include <math.h> int main() { ;n<=;++n) { ],b[],c[],count=,i,flag=; ); ;i<n;i++) { int ai= i*i*…