余数

海量数据分析问题总结

大兔子大兔子 提交于 2019-12-08 19:11:38
1)给⼀个超过100G⼤⼩的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址? 第一题:首先我们的思路就是利用哈希进行文件的切分,我们把100G大小的logfile分为1000份,那么下来差不多没一个文件就是100M左右,然后再利用哈希函数除留余数的方法分配到对应的编号文件中,然后得出每个文件中出现次数最多的IP,然后堆排序取得这1000个ip中出现次数最多的。 2)与上题条件相同,如何找到top K的IP?如何直接⽤Linux系统命令实现? 这一道题的思路就是我们从题意可以看到这道题是来找top K的IP,topK我们的思路就是用堆来实现,找Top,就需要用小堆,这个是根据对的数据特性,我们建立成小堆,然后每次和堆顶最小的进行比较,然后再次进行向上调整,最后,就可以得到一个堆顶是最小IP,的一个小堆,这个小堆就是我们需求的K个IP,需要建的是K个节点的堆。 3)给定100亿个整数,设计算法找到只出现⼀次的整数! 由于是整数,所以我们采取的思路就是我们可以采用位图,100亿个整数,大致就是需要1.25G的内存进行存储。一个数字必须要2个位来进行表示状态,比如说,00表示不存在,01表示存在一次,10表示存在多次。这样就可以全部表示出每一个数存在的状态,这里我们就需要的内存是2.5G。 4)给两个⽂件,分别有100亿个整数,我们只有1G内存,如何找到两个

进制转换

依然范特西╮ 提交于 2019-12-07 23:36:35
我们知道十进制转换成二进制用短除法,但是为什么用短除法呢?请往下看。 “数制”只是一套符号系统来表示指称“量”的多少。我们用“1”这个符号来表示一个这一“量”的概念。自然界的“量”是无穷的,我们不可能为每一个“量”都造一个符号,这样的系统没人记得住。所以必须用有限的符号按一定的规律进行排列组合来表示这无限的“量”。符号是有限的,这些符号按照某种规则进行排列组合的个数是无限的。十进制是10个符号的排列组合,二进制是2个符号的排列组合。 在进行进制转换时有一基本原则:转换后表达的“量”的多少不能发生改变。二进制中的111个苹果和十进制中的7个苹果是一样多的。 十进制中的数位排列是这样的…… 万 千 百 十 个 十分 百分 千分…… R进制中的数位排列是这样的……R^4 R^3R^2 R^1 R^0 R^-1 R^-2 R^-3…… 可以看出相邻的数位间相差进制的一次方。 以下部分来源:知乎网友 进制这事儿,说到底就是位值原理,即:同一个数字,放在不同的数位上,代表不同大小的“量”。例如:十进制中,百位上的1表示100,十位上的1表示10。 任何进制中,每个数都可以按 位权 展开成各个数位上的数字乘以对应数位的位权,再相加的形式,如:   十进制的123=1×100+2×10+3×1   十进制的9876=9×1000+8×100+7×10+6×1   问:为啥相应的数位是1000

加密和解密

爱⌒轻易说出口 提交于 2019-12-06 11:48:59
1、MD5加密解密 MD5 加密是输入任意长度的信息,经过处理,输出128位的信息,不同的输入得到的不同的结果,但是相同的输入一定得到相同的结果。并且根据这 128 位的信息无法推出明文信息,所以 MD5 加密是不可逆的,MD5算法无法破解。 MD5 是单向散列函数,散列算法也称哈希算法,哈希算法不可逆。比如10除以3余数为一,4除以3余数也为一,但余数为一的就不知道这个数是哪个了,就算是设计这个加密算法的人都不知道。 MD5 可以用来加密用户密码,密码验证的原理是同一密码加密后的生成的 128 位信息一定相同,你输入密码加密后才能知道你的密码是否正确。这也是为什么扣扣密码只能重置,不能找回的原因。 可参考: https://blog.csdn.net/dawn_after_dark/article/details/54429766 来源: https://www.cnblogs.com/wenxuehai/p/11981523.html

java 当中的hashcode的作用

久未见 提交于 2019-12-06 08:34:24
以下是关于HashCode的官方文档定义: hashcode方法返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表。 hashCode 的常规协定是: 在 Java 应用程序执行期间,在同一对象上多次调用hashCode方法时,必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。 如果根据 equals(Object) 方法,两个对象是相等的, 那么在两个对象中的每个对象上调用 hashCode 方法都必须生成相同的整数结果。 以下情况不是必需的:如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么在两个对象中的任一对象上调 用 hashCode 方法必定会生成不同的整数结果。 但是,程序员应该知道,为不相等的对象生成不同整数结果可以提高哈希表的性能。 实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。 (这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。) 当equals方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,

计算机网络,数制模型

喜欢而已 提交于 2019-12-06 07:47:36
计算机网络,数制模型 1. 案例 1:数制转换 1 案例1:数制转换 1.1 问题 1)请将下列数字转换为十进制数: (110010011111)2 、(10110101110)2 2)请将下列十进制数转换为二进制: 156、2608、1043 1.2 方案 使用按权展开法将二进制数转换为十进制数,使用短除法除 2取余计算十进制数转换为二进制数。 1.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:二进制转十进制 1)二进制数110010011111,转为十进制的结果是3231,转换过程如下: 1. ( 1100 1001 1111 ) 2 2. = 1x211 + 1x210 +0x29+0x28 + 1x27 +0x26+0x25 + 1x24 + 1x23 + 1x22 + 1x21 + 1x20 3. = 2048+1024+0+0+128+0+0+16+8+4+2+1 4. = 3231 2)二进制数10110101110,转为十进制的结果是1454,转换过程如下: 1. ( 101 1010 1110 ) 2 2. = 1x210 +0x29 + 1x28 + 1x27 +0x26 + 1x25 +0x24 + 1x23 + 1x22 + 1x21 +0x20 3. = 1024+0+256+128+0+32+0+8+4+2+0 4. = 1454 步骤二

C 库函数 - fmod()

这一生的挚爱 提交于 2019-12-05 19:41:55
C 库函数 - fmod() 转自: C 标准库 - <math.h> 描述 C 库函数 double fmod(double x, double y) 返回 x 除以 y 的余数。 声明 下面是 fmod() 函数的声明。 double fmod(double x, double y) 参数 x -- 代表分子的浮点值。 y -- 代表分母的浮点值。 返回值 该函数返回 x/y 的余数。 实例 下面的实例演示了 fmod() 函数的用法。 1 #include <stdio.h> 2 #include <math.h> 3 4 int main () 5 { 6 float a, b; 7 int c; 8 a = 9.2; 9 b = 3.7; 10 c = 2; 11 printf("%f / %d 的余数是 %lf\n", a, c, fmod(a,c)); 12 printf("%f / %f 的余数是 %lf\n", a, b, fmod(a,b)); 13 14 return(0); 15 } 让我们编译并运行上面的程序,这将产生以下结果: 1 9.200000 / 2 的余数是 1.200000 2 9.200000 / 3.700000 的余数是 1.800000 C 标准库 - <math.h> 来源: https://www.cnblogs.com

数据结构与算法之栈结构

时光毁灭记忆、已成空白 提交于 2019-12-05 04:30:45
认识栈结构 栈也是一种 非常常见 的数据结构,并且在程序中的 应用非常广泛 数组: 我们知道数组是一种 线性结构 ,并且可以在数组的 任意位置 插入和删除数据 但是,有些时候,我们为了实现一些功能,必须对这种 任意性 加以 限制 而 栈和队列 就是比较常见的 受限的线性结构 ,我们先来学习栈结构 栈结构: 只能栈顶进,也只能栈顶出 插入新元素为入栈/压栈 ,删除元素出栈/退栈 程序中什么是使用栈实现的? 函数调用栈:A调用B ,B调用C,C又调用D 那样在执行过程中,会先将A压入栈,A没有执行完,所以不会弹出栈 在A执行过程中,调用了B,会将B压入到栈,这个时候B在栈顶,A在栈底 以此类推 栈底A->B->C->D栈顶,D执行完,弹出栈,C/B/D依此弹出 所以我们有函数调用栈的称呼,就来自于他们内部的实现机制(通过栈来实现) 递归:如果递归无限次一直调用,就会出现栈溢出的情况,不断压入同一个函数,他前面的函数并不能及时的释放 栈结构面试题: 有六个元素6,5,4,3,2,1的顺序进栈,问下列哪一个不是合法的出栈顺序?() A.543612 B.453216 c.346521 D.234156 //答案:选c 解析:A答案:65进栈,5出栈,4进栈出栈,3进栈出栈,6出栈,21进栈,1出栈,2出栈 BC答案依此类推 六个元素不一定是连续进栈,只是进栈的顺序要这个顺序。

Python:海龟绘图(六)——来点颜色看看

笑着哭i 提交于 2019-12-04 20:31:01
可能这几节课以来,您心里一直有个疑问——绘制的图形虽然越来越复杂了,可还是不够漂亮啊!难道海龟只能绘制黑色的线条吗? 当然不是!今天,我们就要给您点“颜色”看看。 其实,让海龟画出不同的颜色并不难,只需要调用小海龟的“pencolor()” 方法 。所谓“方法”,暂时可以理解为小海龟“会做的事”,在小海龟后使用“.”符号进行调用,形成“t.pencolor()”语句,就可以让小海龟绘出您喜欢的颜色了(如下图)。 假设您对“红色”情有独钟,那么按“F5”键运行后,就会得到如下的结果: 嗯,果然不再是单调的黑色线条了,如您所愿,现在已经变成了单调的红色线条。 什么,这不是您想要的?您想要的是“绚丽多彩”? 好吧,谁让我在今天项目的前导部分答应您了呢。说到就要做到,现在我们就来研究一下绚丽多彩。 既然是“多彩”,肯定就要在程序运行的过程中多次使用“t.pencolor()”语句,并且每次使用都要设定为不同的颜色。 我们再来看一下这段“单调的红线条”代码: 这段代码可以分为两大部分: 第一部分(1⃣️)主要进行一些绘图前参数的设置,行话叫“ 初始化 ”,以现在计算机的运行速度,这部分会在不到1毫秒的时间内被“一笔带过”。 第二部分(2⃣️)才是真正绘图的部分,我们使用了一个“ 计数循环 ”,让小海龟在这个循环中“转悠”上百次,来为我们绘制美丽的图形。 如果要让您多次使用“t

实现进制转化伪代码

◇◆丶佛笑我妖孽 提交于 2019-12-04 02:04:16
原理和操作思路 输入一个十进制的数字,将其转化为其他进制 就是将这个数字除进制数得到余数1,不断迭代直到余数n<进制数,于是转化后的数字就是将余数从n——>1排序 操作中出现的问题 无法进行的操作,将一个个余数进行排序 上面的操作没办法用代码俩表现出来 目前已经解决了问题(2,8进制可以适用) https://zhidao.baidu.com/question/589205154461620525.html 现在出现了新的问题,就是如果转化成16进制,没有办法将大于9的数字替换成对应的字符 来源: https://www.cnblogs.com/sisterben/p/11801702.html