正文
pythonhash函数 pythonhashlib
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
如何用Python构造hash表解决DNA k-mer问题
思路pythonhash函数:
1、首先采用命A=0,C=1,G=2,T=3. 就相当于4进制数字pythonhash函数,然后采用karp-Rabin算法转换成唯一十进制数字。由于用此算法的哈希函数为pythonhash函数:hash(value)=value*(4^(k-q-1));
value是该字符对应的值pythonhash函数,k是kmer长度,q是此字符在字符串的位置范围在[0-(q-1)]。然后把一个kmer里面所有字符的hash值求和就行pythonhash函数了。
2、那么很容易看出来,对于连续的下害常愤端莅得缝全俯户一个Kmer,就有推理公式了 hashNew=addValue+(hashOld-deleteValue*(4^(k-1)))*4; hashNew就是往右平移一个字符的kmer hash值,hashOld就是平移之前的值,addValue就是平移后右边多的一个字符,deleteValue就是平移后左边少的一个字符。这样整个hash表建立的时间复杂度约为O(m+k),m是整个文本长度。
3、由于kmer长度如果过长,其hash值过大,会造成内存不够溢出的现象,所以kmer内部定死为10 。那么问题就来了,如何应对不同的kmer值。分三种情况。
第一种:q10
这种可以将kmer以10为单位,将hash表中对应值取出,然后对结果进行分析,这边分析方法为建立两个数组一个二维数组unionName储存位置关系,一个一维数组unionScore,计数用。 思路就是首先第一轮初始化unionName[Name][Pos]全部赋值Pos 并初始化unionScore,然后再第二轮匹配如果unionName[Name][Pos-cycle]=Pos-1则将其赋值为当前Pos,cycle为当前循环次数。并将当前循环数存入unionScore[NAME]中。最后当unionScore[NAME]值也就是循环数为k-1,即我们需要的交集了。
第二种:q=10
直接求出hash值,取出相应的值即可。
第三种:q10
可以用前缀种子+后缀种子交集产生。
前缀种子:在字符串后面补字符直到长度等于K,这个很容易看出来 最小是全补A,最大是全补T,然后将最小值到最大值之间的hash值即为所求。
后缀种子:后缀种子和前缀种子不同就是在字符串左边补齐字符。所以此时需要进行变换。只要对前置种子产生的值变化下就行了。(preValue-minValue)*(4^(K-q))+hash(p) 。其中preValue就是对应的前置种子的hash值,minValue就是前置种子中最小值也就是全补A的情况,hash(p)就是字符串长度为p时候的hash值。
交集就是先求后缀种子所有的值,再加上 前缀种子中起始位置在[0-(k-1)]中的值。
Python hash函数返回值问题?
hash函数输出大小就是摘要大小.输入单位就是块尺寸
当遇到“大集合”的数据比块尺寸还小的情况,是会把数据补齐到块大小,然后输出摘要。
.比如MD5的摘要为128bit或16byte,块512bit或64byte
输入"a",太小,补齐到64byte,“a_____________________”
输入一个16byte的摘要,通常用HEX编码显示为32byte,自然比a长很多
python之哈希算法
哈希(Hash)算法pythonhash函数:`hash(object)`
哈希算法将一个不定长的输入,通过散列函数变换成一个定长的输出,即散列值。是一种信息摘要算法。对象的hash值比原对象拥有更低的内存复杂度。
它不同于加密。哈希(hash)是将目标文本转换成具有相同长度的,不可逆的杂凑字符串,而加密则是将文本转换为具有相同长度的,可逆的密文。
哈希(hash)算法是不可逆的,只能由输入产生输出,不能由输出产生输入。而加密则是可逆的。即可以从输入产生输出,也可以反过来从输出推出输入。
对于hash算法,不同的数据应该生成不同的哈希值。如果两个不同的数据经过Hash函数计算得到的Hash值一样。就称为哈希碰撞(collision)。哈希碰撞无法被完全避免。只能降低发生概率。
好的hash函数会导致最少的hash碰撞。
*
可哈希性(hashable):
可哈希的数据类型为不可变的数据结构(如字符串srt,元组tuple,对象集objects等)。这种数据被称为可哈希性。
不可哈希性:
不可哈希的数据类型,为可变的数据结构(如字典dict,列表list和集合set等)。
如果对可变的对象进行哈希处理,则每次对象更新时,都需要更新哈希表。这样pythonhash函数我们则需要将对象移至不同的数据集,这种操作会使花费过大。
因此设定不能对可变的对象进行hash处理。
**
**
Python3.x添加了hash算法的随机性,以提高安全性,因此对于每个新的python调用,同样的数据源生成的结果都将不同。
哈希方法有(MD5, SHA1, SHA256与SHA512等)。常用的有SH256与SHA512。MD5与SHA1不再常用。
- MDH5 (不常用)
- SHA1 (不常用)
- SHA256 (常用)
- SHA512 (常用)
一种局部敏感的hash算法,它产生的签名在一定程度上可以表征原内容的相似度。
可以被用来比较文本的相似度。
安装simhash:
Pip3 install simhash
感知哈希算法(perceptual Hash Algorithm)。用于检测图像和视频的差异。
安装Imagehash:
pip3 install Imagehash
比较下面两张图片的Imagehash值
可以看到两张图片的hash值非常相似。相似的图片可以生成相似的哈希值是Imagehash的特点。
python可哈希什么意思
可哈希 就是可以用python内置函数 hash 得出哈希值。
对任意对象 opythonhash函数,如果 o.__hash__() 返回一个整型值pythonhash函数,那 o 就是可哈希pythonhash函数的。
各种标量、tuple、正确实现了 __hash__ 函数pythonhash函数的类的实例都是可哈希的。
Python如何哈希字符串
Python中字符串是可哈希的pythonhash函数,即可以作为字典的键或者HashTable的键使用。
您可以这样子使用Python内置函数hash(散列函数)pythonhash函数:
您也可以将字符串转为一个集合:
总之,Python里面有很多内置的hash功能性数据结构和函数。
关于pythonhash函数和pythonhashlib的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。