哈希

在switch语句中使用字符串以及实现原理

匿名 (未验证) 提交于 2019-12-03 00:30:01
一次机缘巧合,在idea中调试代码的时候,跳到了.class文件中,刚好调试的代码是switch,于是就有了下面的内容: 对于Java语言来说,在Java 7之前, switch语句中的条件表达式的类型只能是与整数类型兼容的类型,包括基本类型char、byte、short和int,与这些基本类型对应的封装类Character、Byte、Short和Integer, 还有枚举类型。这样的限制降低了语言的灵活性,使开发人员在需要根据其他类型的表达式来进行条件选择时,不得不增加额外的代码来绕过这个限制。为此,Java 7放宽 了这个限制,额外增加了一种可以在switch语句中使用的表达式类型,那就是很常见的字符串,即String类型。 源代码: [java] view plain copy public class public static void "a" public static void switch case "a" "aa" break case "b" "bb" break [java] view plain copy public class public static void "a" public static void switch case "a" "aa" break case "b" "bb" break 编译后的.class文件: [java] view

From Hashing to CNNs: Training Binary Weight Networks via Hashing

匿名 (未验证) 提交于 2019-12-03 00:22:01
Abstract 本文在二值化权重(BWN)方面做出了创新,发表在AAAI2018上,作者是自动化所程建团队。本文的主要贡献是提出了一个新的训练BWN的方法,揭示了哈希与BW(Binary Weights)之间的关联,表明训练BWN的方法在本质上可以当做一个哈希问题。基于这个方法,本文还提出了一种交替更新的方法来有效的学习hash codes而不是直接学习Weights。在小数据和大数据集上表现的比之前的方法要好。 本文揭示了保持内积哈希与BWN之间的紧密关联。 为了减轻用哈希方法所带来的loss,本文将binary codes乘以了一个scaling factor并用交替优化的策略来更新binary codes以及factor。 在Cifar10,Cifar100以及ImageNet上实验,本文提出的BWNH方法比之前方法要好。 Inner-product preserving hashing 保留内积哈希方法是沈老师团队在15年ICCV上提出的,方法是给定两个点集 X ∈ R S × M X ∈ R S × M 和 W ∈ R S × N W ∈ R S × N , X i ∈ R S × 1 X i ∈ R S × 1 以及 W i ∈ R S × 1 W i ∈ R S × 1 分别代表向量 X X 和 W W 的第 i i 个点,记作向量 X X 和 W W 的内积相似性

区块链入门教程之从比特币到以太访再到智能合约从架构概念到应用实战(DAPP)(二、比特币原理、概念讲解)

匿名 (未验证) 提交于 2019-12-03 00:18:01
作者: AlexTan CSDN: http://blog.csdn.net/alextan_ Github: https://github.com/AlexTan-b-z e-mail: alextanbz@gmail.com (ps:这是本博主撰写的第二部系列作品,第一部是写的 java入门教程 ,受到了不少读者的喜欢,如果你也喜欢的话,欢迎关注哟!) 本教程主要面向区块链新手,用通俗易懂的方式讲解区块链技术。 本章节内容是以比特币为例讲区块链技术原理。 如图所示,哈希函数,指无论输入什么值,其输出结果为固定长度的字符串的函数,这串字符串就被命名为哈希值。哈希函数它是不可逆的,即是单向的,只能通过输入计算得到输出,不能通过输出得到输入。且只要输入结果不一样,其输出结果也不一样。 SHA256 SHA: Secure Hash Algorithm(安全哈希算法),256代表无论输入什么值(可以是文件、也可以是文本),其输出结果为256位的二进制数。 比特币采用SHA256算法,该算法属于SHA-2系列,在中本聪发明比特币时(2008)被公认为最安全最先进的算法之一。除了生成地址中有一个环节使用了REPID-160算法,比特币系统中但凡有需要做Hash运算的地方都是用SHA256。随着比特币被更多人了解,大家开始好奇中本聪为何选择了SHA256

如何决定使用 HashMap 还是 TreeMap?

匿名 (未验证) 提交于 2019-12-03 00:14:01
问: 如何决定使用 HashMap 还是 TreeMap? 介绍 TreeMap<K,V> 的Key值是要求实现 java.lang.Comparable ,所以迭代的时候TreeMap默认是按照Key值升序排序的;TreeMap的实现是基于红黑树结构。适用于按自然顺序或自定义顺序遍历键(key)。 HashMap<K,V> 的Key值实现散列 hashCode() ,分布是散列的、均匀的,不支持排序;数据结构主要是桶(数组),链表或红黑树。适用于在Map中插入、删除和定位元素。 结论 如果你需要得到一个有序的结果时就应该使用TreeMap(因为HashMap中元素的排列顺序是不固定的)。除此之外,由于HashMap有更好的性能,所以大多不需要排序的时候我们会使用HashMap。 拓展 1、HashMap 和 TreeMap 的实现 HashMap: 基于哈希表实现。使用HashMap要求添加的键类明确定义了 hashCode() 和 equals() [可以重写 hashCode() 和 equals() ],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。 HashMap(): 构建一个空的哈希映像 HashMap(Map m): 构建一个哈希映像,并且添加映像m的所有映射 HashMap(int initialCapacity):

perl返回哈希和的键和值

匿名 (未验证) 提交于 2019-12-02 23:57:01
#!/usr/bin/perl #!/usr/bin/perl %data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com'); @names = keys %data;#该函数返回所有哈希的所有key的数组 #注意是数组 print "$names[0]\n"; print "$names[1]\n"; print "$names[2]\n"; %data2 = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com'); @urls = values %data2;#该函数返回所有哈希的所有value的数组 #注意是数组 print "$urls[0]\n"; print "$urls[1]\n"; print "$urls[2]\n"; 来源:博客园 作者: 朵朵奇fa 链接:https://www.cnblogs.com/shunguo/p/11441667.html

AcWing 回文子串的最大长度

匿名 (未验证) 提交于 2019-12-02 23:54:01
Description 如果一个字符串正着读和倒着读是一样的,则称它是回文的。 给定一个长度为N的字符串S,求他的最长回文子串的长度是多少。 Input 输入将包含最多30个测试用例,每个测试用例占一行,以最多1000000个小写字符的形式给出。 输入以一个以字符串“END”(不包括引号)开头的行表示输入终止。 Output 对于输入中的每个测试用例,输出测试用例编号和最大回文子串的长度(参考样例格式)。 每个输出占一行。 Sample Input abcbabcbabcba abacacbaaaab END Sample Output Case 1: 13 Case 2: 6 字符串哈希。 “正着读反着读都一样“… …那正着推一遍哈希值,逆着推一遍哈希值,然后直接比较哈希值是否相等就行了。 我们知道回文串有奇数回文串和偶数回文串。那么我们对这两种类型的回文串分别做二分,过程中取最大长度就好了。复杂度为O(nlogn) 顺带一提,马拉车算法可以O(n)解决此题。 #include <iostream> #include <cstdio> #include <string> #define N 1000005 #define int unsigned long long using namespace std; string t; int tim, len; int p[N], f1

字符串hash

匿名 (未验证) 提交于 2019-12-02 23:52:01
选用 BKDRhash 方式 参考资料: https://www.byvoid.com/blog/string-hash-compare/ 字符串通篇资料: https://blog.csdn.net/ck_boss/article/details/47066727 HDU 4821 string 传送门: https://vjudge.net/problem/HDU-4821 题意:给出M和L,和一个字符串S。要求找出S的子串中长度为L*M,并且可以分成M段,每段长L,并且M段都不相同的子串个数。 思路:一道字符串哈希题。哈希的方法是BKDRHash,哈希中进制是31,131等素数。 # include <iostream> # include <map> # include <string> # include <cstring> # include <cstdio> # define maxn 100005 # define SEED 31 # define ULL unsigned long long using namespace std ; ULL k [ maxn ] , ha [ maxn ] ; map < ULL , int > mp ; int m , l ; char s [ maxn ] ; int main ( ) { while ( scanf ( "

数据库索引

匿名 (未验证) 提交于 2019-12-02 23:47:01
01.在创建索引的时候都会考虑哪些因素呢? :对于查询概率比较高,经常作为where条件的字段设置索引。 02.做联合索引多个字段之间顺序你们是如何选择的呢? 1.为什么要用索引? 当一个表中有上千万条数据,如果按名字一行一行去匹配查找,全表扫描,效率会很慢。这时候就需要用索引,相当于给表加了目标和标题,可以缩小查找范围和加快查找速度。 索引是一种数据结构。一个索引是存储的表中一个特定列的值数据结构(最常见的是B-Tree和Hash索引)。索引是在表的列上创建。所以,要记住的关键点是索引包含一个表中列的值,并且这些值存储在一个数据结构中。 3.Hash索引的优缺点? 优点:哈系索引的工作方式是将列的值作为索引的键值(key),和键值相对应实际的值(value)是指向该表中相应行的指针位置。查新name=“jes”这样的sql效率很快,等值查询的场景更快。           缺点:1.哈希表是无顺的数据结构,假如你想要找出所有小于40岁的员工 就不能用哈希索引。              2.哈希索引不支持多列联合索引的最左匹配规则 如果有大量重复键值得情况下,哈希索引的效率会很低,因为存在哈希碰撞问题。 4.B-Tree索引是怎么提升性能? :假设我们在 Employee_Name这一列上创建一个B-Tree索引。这意味着当我们用之前的SQL查找姓名是‘Jesus’的雇员时

HashMap源码探究

匿名 (未验证) 提交于 2019-12-02 23:43:01
下面的源码以jdk1.7为主,jdk1.8有了一些新的改变,会在文章中说明。 HashMap 实现了 Map 接口,即允许放入 key Ϊ null 的元素,也允许插入 value Ϊ null 的元素;除该类未实现同步外,其余跟 Hashtable 大致相同;跟 TreeMap 不同,该容器不保证元素顺序,根据需要该容器可能会对元素重新哈希,元素的顺序也会被重新打散,因此不同时间迭代同一个 HashMap 的顺序可能会不同。 根据对冲突的处理方式不同,哈希表有两种实现方式,一种开放地址方式(Open addressing),另一种是冲突链表方式(Separate chaining with linked lists)。 Java HashMap 采用的是冲突链表方式 。 从上图容易看出,如果选择合适的哈希函数, put() 和 get() 方法可以在常数时间内完成。但在对 HashMap 进行迭代时,需要遍历整个table以及后面跟的冲突链表。因此对于迭代比较频繁的场景,不宜将 HashMap 的初始大小设的过大。 有两个参数可以影响 HashMap 的性能:初始容量(inital capacity)和负载系数(load factor)。初始容量指定了初始 table 的大小,负载系数用来指定自动扩容的临界值。当 entry 的数量超过 capacity*load_factor

705. 设计哈希集合

匿名 (未验证) 提交于 2019-12-02 23:38:02
不使用任何内建的哈希表库设计一个哈希集合 具体地说,你的设计应该包含以下的功能 add(value) :向哈希集合中插入一个值。 contains(value) :返回哈希集合中是否存在这个值。 remove(value) :将给定值从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。 示例: 注意: [1, 1000000] 的范围内。 操作的总数目在 [1, 10000] 范围内。 不要使用内建的哈希集合库。 文章来源: https://blog.csdn.net/umbrellasoft/article/details/90376112