hash

Python学习—基础篇之常用模块

前提是你 提交于 2020-02-02 09:13:50
常用模块 模块,用一砣代码实现了某个功能的代码集合。 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。 python常用模块主要有: 1. time模块 2. random模块 3. hashlib模块 4. os模块 5. sys模块 6. logging模块 7. 序列化模块 8. configparser模块 9. re模块 10. shutul模块 11. subprocess模块 12. xml模块 13. paramiko模块 引入模块的方式 1 import module 2 import module.xxx as name 3 from module import xxx,xxx 4 from module import * 对于第二种的引入方式,将导入的模块或者模块方法重命名,个人觉得好处主要有以下两点: 1.对于模块名过于冗长的模块,可以方便使用; 2.对于某些功能可能涉及到修改模块的源码,这样的导入方式可以避免影响到原来的模块(类似于为每个项目建一个自己的虚拟环境)。 time模块 1.表示时间的三种方式: (1)时间戳(timestamp) :通常来说

哈希算法

假装没事ソ 提交于 2020-02-02 05:41:13
哈希算法 这个算法可以在一个字符串中 迅速判断两个字串是否相同 。 根据朴素算法,我们直接将两个字串相比较,遇到不同的字符就break,这样的时间复杂度是o(n),而改进后的哈希算法的时间复杂度为o(1)。 下面我们来具体看看哈希算法(先假设字符串中皆为小写字母): 将字符串中的26个小写字母转换为数字,然后将每一个前缀的p进制的哈希值算出,通过 比较对应的哈希值来确定两个字串是否相同 。当然,p一般取131或13331,因为这样可以最大可能降低相同率,避免两个不同的字符串有相同的哈希值。由于字符串长度未知,哈希值可能会超过long long int的长度,但即使溢出也没有关系,溢出的值以long long int为例,会对2^64取模,对结果无太大关系。 以字符串str[]={a,b,c}为例: 先转化为数字:1 2 3; 为了方便运算,hash[0]=0; 计算每一个前缀的hash值(转化为131进制数): hash[a]=h[0]^131+str[1]-‘a’+1=1; hash[ab]=hash[a]^131+str[2]-‘a’+1=133; hash[abc]=hash[ab]^131+str[3]-‘a’+1=17426; 此时,若是要知道字符串里两个字串是否相等则只要计算两个字串的哈希值是否相等即可。 如字符串s={a,b,c,a,b,c,g}; 计算s[r]到s

大数据量及海量数据处理算法总结

回眸只為那壹抹淺笑 提交于 2020-02-02 04:39:37
大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯 这样的一些涉及到海量数据的公司经常会问到。 下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到 的问题。下面的一些问题基本直接来源于公司的面试笔试题目,方法不一定最优,如果你有更好的处理方法,欢迎与我讨论。 1.Bloom filter 适用范围: 可以用来实现数据字典,进行数据的判重,或者集合求交集 基本原理及要点: 对于原理来说很简单,位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存 在,很明显这个过程并不保证查找的结果是100%正确的。同时也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字。所以一个简 单的改进就是 counting Bloom filter,用一个counter数组代替位数组,就可以支持删除了。 还有一个比较重要的问题,如何根据输入元素个数n,确定位数组m的大小及hash函数个数。当hash函数个数k=(ln2)*(m/n)时错误 率最小。在错误率不大于E的情况下,m至少要等于n*lg(1/E)才能表示任意n个元素的集合。但m还应该更大些,因为还要保证bit数组里至少一半为 0,则m 应该>

32-bit checksum algorithm better quality than CRC32?

£可爱£侵袭症+ 提交于 2020-02-02 03:05:10
问题 Are there any 32-bit checksum algorithm with either: Smaller hash collision probability for input data sizes < 1 KB ? Collision hits with more uniform distribution. These relative to CRC32. I'm practically not counting on first property, because of limitation of storage space of 32 bits. But for the second ... seems there could be improvements. Any ideas ? Thanks. (I need concrete implementation, better in C, but C++/ C# or anything to start with is also OK). 回答1: How about MurmurHash? It is

剑指Offer(类库)——HashMap、HashTable、ConcurrentHashMap(上)

℡╲_俬逩灬. 提交于 2020-02-02 03:02:50
Map是由一对对的key-value组成的,key要求是唯一的,value不要求。 通过看源码可以得出:key自带去重功能是Set类型的,value是Collection接口可存放任意集合。 来看一下Map的实现类: HashMap、HashTable、ConcurrentHashMap之间的区别? HashMap JDK8之前HashMap是由数组+链表组成的,数组查找快增删慢,链表增删快查找慢,HashMap结合了两者的优势,HashMap不是线程安全的效率很高,组织键位如图: 没有给HashMap初始长度的时候 HashMap默认初始长度是16 ,初始长度16的数组中每个数组的位置存放的是 链表的头结点 ,可以通过模运算得到头结点的存放位置:hash(key.hashCode())%len,hashCode的运算本身是通过位运算得到的。 但是存在一种特殊情况,通过模运算得到的位置每次都是同一个这样的话就不断在一条链表中去插入, 最坏的情况是时间复杂度从O(1)变成O(n)。 JDK8之后对HashMap进行了优化,将原先的HashMap由 数组+链表 组成的道理变成了 数组+链表+红黑树 。 添加红黑树之后再次遇到特殊的情况时就可以使用 TREEIFY_THRESHOLD 去判断是否将链表转换成一颗红黑树,这种情况下 最坏的时间复杂度从O(n)变成O(nlogn)。

字符串哈希

試著忘記壹切 提交于 2020-02-02 01:05:59
字符串Hash 字符串hash就是 把一个字符串变成一个整数 当两个字符串相同时,它们通过hash计算后得到的整数相同,当两个字符串不同时,它们的数字就不同。 Hash公式 首先设一个进制数base,和一个取模数mod 给定一个字符串 S id(x)=x - ‘a’ + 1 * hash[ i ] =hash[ i -1 ] base + id(s[ i ]) hash冲突 比如orzc的哈希值为233,orzhjw的哈希值也为233 而这两个字符串显然不相同,这就叫hash冲突。 单hash方法 就是一个取模运算,只进行一次hash运算。公式如下: * hash[i]=(hash[i-1] base+id(s[i]))%mod 单哈希的hash冲突概率很低 例:取base=13,mod=101, 对字符串abc进行hash hash[0] = 1 hash[1] = (hash[0] * base +id(s[1]) % mod =15 hash[2] = (hash[1] * base + id[s[2]) % mod = 97 所以当base=13,mod=101时,可以把abc当作97,**即abc的hash值为97 ** 代码如下: int n=strlen(s+1),base=13,mod=101; int hash[1001],id[1001]; hash[0]=1;

哈希算法>>入门篇

感情迁移 提交于 2020-02-02 00:40:40
两段字符串,判断它们是否相等,朴素解法是一个一个的判断,时间复制度较大。哈希算法把字符串转换成整数,这样时间复杂度从O(N)变成了O(1)。类似于二进制,用P进制将字符串装换成整数,为避免重复,一般认为P取131或者1331,使用unsigned long long 就可以,默认对结果模一个2^64,会有溢出的情况,但影响很小。(字符串默认都是小写字母,采用26进制) 例如 str=“abcd" Hash(str)= Hash数组存储字符串所有的前缀(憨憨小白不会打次方:p) 这里还可以用到简单的递归 Hash[i]=Hash[i-1]*P+s[i]-‘a’+1 对于字符串任意区间(L,R) Hash[L–R]=Hash[R]-hash[L-1]*P^(R-L+1) 简单验证即可得到 例题链接 代码实现 # include <stdio.h> # include <string.h> # define base 131 char s [ 1000000 ] ; typedef unsigned long long ULL ; ULL h [ 1000001 ] , p [ 1000001 ] ; ULL ans ( int left , int right ) { return h [ right ] - h [ left - 1 ] * p [ right - left + 1

手写vue-router

限于喜欢 提交于 2020-02-01 22:01:06
hash模式 :location.hash: 获取url的hash值; window.onhashchange监听hash的改变 history模式 :location.pathname:获取路径; window.onpopstate监听history变化 vue.use的用法 : 把你给它的东西调用一遍;如果你给它的是一个方法,那么它会直接执行这个方法,如果你给它的东西里有一个install属性,它会执行这个install function a () { console.log('This is function a') } a.install = function (vue) { console.log('add "install" property to function a') // 全局混入vue实例,添加在mixin中的的变量,方法在所有子组件中都可以被获取到 vue.mixin({ data () { return { c: 'this is in mixin' } }, methods: { testMethod () { } }, // 生命周期注入 created () { console.log('I\'m in global created method') } }) } Vue.use(a) // add "install" property to

Finding out whether there exist two identical substrings one next to another

我的梦境 提交于 2020-02-01 17:50:11
问题 We've got a String. ABAEABABEABE Now we've got to check whether there exist a substring that is followed next by another substring that's exactly the same as the first one. In this example: ABAEAB ABE ABE ABE is followed by ABE and that are two identical substrings. In this example: AAB It would be simply A, beacuse A is followed by another A. In this example: ABCDEFGHIJKLMNO There doesn't exist such a substring, so the answer would be NO. I only managed to find an algorithm that would run in

HashMap底层实现原理分析

浪尽此生 提交于 2020-02-01 10:11:41
HashMap底层实现JDK1.7&JDK1.8 Map结构 HashMap的底层实现原理 HashMap在JDK1.7中的实现 HashMap在JDK1.8中的实现 HashMap1.7与1.8中底层实现的不同 有关HashMap的面试题 Map结构 Map中的key是无序的、不能重复的,使用set可以存储所有的key; key所在的类要重写equals()和hashcode()方法 Map中的value是无序的、可以重复的,使用Collection可以存储所有的value; value所在的类要重写equals key和value组成了entry对象,该对象是无序的、不可重复的,可以使用set来存储 HashMap的底层实现原理 HashMap创建的流程示意图(以jdk1.7为例) 扩容问题 在添加数据的过程中,随着数据量的不断增加,就会涉及到扩容问题,默认的扩容方式:扩容为原来容量的两倍,并将原有的数据复制过来. HashMap在JDK1.7中的实现 //调用hashmap的有参构造 public HashMap ( int initialCapacity , float loadFactor ) { //初始化长度initialCapacity:16;加载因子loadFactor:0.75 if ( initialCapacity < 0 ) throw new