哈希码

八码数 · 哈希+BFS

可紊 提交于 2020-03-07 23:21:58
//本代码还未ac # include <bits/stdc++.h> using namespace std ; typedef long long ll ; # define between(x, a, b) (a<=x && x<=b) const int dir [ 4 ] [ 2 ] = { 1 , 0 , 0 , 1 , - 1 , 0 , 0 , - 1 } ; const int N = 1e6 + 10 ; int n , m , K ; int f [ 15 ] , vis [ N ] ; struct node { string s = "" ; int pos ; //x的位置 int step ; } ; int id ( string s ) { //一种哈希方式 变排列 int res = 0 ; for ( int i = 0 ; i < 9 ; ++ i ) { int d = 0 ; for ( int j = 0 ; j < i ; ++ j ) { if ( s [ j ] > s [ i ] ) d ++ ; } res + = d * f [ i ] ; } return res ; } int dfs ( node st ) { vis [ id ( st . s ) ] = 1 ; queue < node > q ; q .

Java中equals和hascode之间的关系

懵懂的女人 提交于 2020-03-01 16:16:26
在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题。比如说:Java 的 equals() 和 hashCode() 是远房亲戚吗?像这类灵魂拷问的主题,非常值得深入地研究一下。 另外,我想要告诉大家的是,研究的过程非常的有趣,就好像在迷宫里探宝一样,起初有些不知所措,但经过一番用心的摸索后,不但会找到宝藏,还会有一种茅塞顿开的感觉,非常棒。 对于绝大多数的初级程序员或者说不重视“内功”的老鸟来说,往往停留在“知其然不知其所以然”的层面上——会用,但要说底层的原理,可就只能挠挠头双手一摊一张问号脸了。 很长一段时间内,我,沉默王二也一直处于这种层面上。但我决定改变了,因为“内功”就好像是在打地基,只有把地基打好了,才能盖起经得住考验的高楼大厦。借此机会,我就和大家一起,对“equals() 和 hashCode()”进行一次深入地研究。 equals() 和 hashCode() 是 Java 的超级祖先类 Object 定义的两个重要的方法: public boolean equals (Object obj) public int hashCode () 讲道理,单从方法的定义上来看, equals() 和 hashCode() 这两个方法之间没有任何亲戚关系,远房都够不上资格。但往深处扒拉,它们之间还真的是有千丝万缕的关系。到底是什么关系呢

如何重写object虚方法

心不动则不痛 提交于 2020-02-28 11:14:02
在 C# 中 Object 是所有类的基类,所有的结构和类都直接或间接的派生自它。前面这段话可以说所有的 C# 开发人员都知道,但是我相信其中有一部分程序员并不清楚甚至不知道我们常用的 ToString 、 Equals 和 GetHashCode 虚方法都来自于 Object 类,并且我们可以对它们进行重写。重写这三个虚方法可以说在项目开发中经常用到,只不过大部分开发人员并未留意这三个虚方法可以重写,而是自己写方法来实现。 下面我就来具体讲解一下它们三个应该怎么重写。在这里我需要说明的是本篇文章会大量涉及到设计规范和设计要求,代码只是作为辅助理解的形式出现,因此文章中的所有代码将会以代码段的形式出现。 零、 ToString ToString 重写是这三种方法中重写最简单的,也是最常用的。但是有一部分开发人员认为重写 ToString 方法意义不大,那么我在这里要说的是这种想法是错误的。当我们在对象上调用 ToString 时默认返回的是类的完全限定名称,比如说我们在 System.IO.File 对象上调用这个方法,就会返回字符串 System.IO.File ,这个结果往往并不是我们所需要的结果并且这个结果也没有什么意义。例如我们在一个 User 类中重写 ToString 方法,每次调用 User.ToString() 时返回 "XXX今年XX岁",如果我们不重写

八数码的 八种境界

末鹿安然 提交于 2020-02-17 11:52:35
境界一、 暴力广搜+STL   开始的时候,自然考虑用最直观的广搜,因为状态最多不超过40万,计算机还是可以接受的,由于广搜需要记录状态,并且需要判重,所以可以每次图的状态转换为一个字符串,然后存储在stl中的容器set中,通过set的特殊功能进行判重,由于set的内部实现是红黑树,每次插入或者查找的复杂度为Log(n),所以,如果整个算法遍历了所有状态,所需要的复杂度为n*Log(n),在百万左右,可以被计算机接受,由于对string操作比较费时,加上stl全面性导致 速度不够快,所以计算比较费时,这样的代码只能保证在10秒内解决任何问题。但,明显效率不够高。POJ上要求是1秒,无法通过,第一次的代码见Code1.cpp。   境界二、广搜+哈希   考虑到费时主要在STL,对于大规模的遍历,用到了ST的set和string,在效率上的损失是很大的,因此,现在面临一个严重的问题,必须自己判重,为了效率,自然是自己做hash。有点麻烦,hash函数不好想,实际上是9!种排列,需要每种排列对应一个数字。网上搜索,得知了排列和数字的对应关系。取n!为基数,状态第n位的逆序值为哈希值第n位数。对于空格,取其为9,再乘以8!。例 如,1 3 7 24 6 9 5 8 的哈希值等于:0*0! + 2*1! + 0*2! + 1*3! + 3*4! +1*5! + 0*6! + 1*7! +

为新员工分配部门

断了今生、忘了曾经 提交于 2020-02-03 21:19:22
import java.util.Scanner; public class Example { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入新员工的姓名:"); String name = scan.nextLine();// 接收员工名称 System.out.println("请输入新员工应聘的编程语言:"); String language = scan.nextLine();// 接收员工应聘的编程语言 // 根据编程语言确定员工分配的部门 System.out.println("编程语言的hashCode:"+language.hashCode()); switch (language.hashCode()) { case 3254818:// java的哈希码 case 2301506:// Java的哈希码 case 2269730:// JAVA的哈希码 System.out.println("员工"+name+"被分配到Java程序开发部门。"); break; case 3104:// c#的哈希码 case 2112:// C#的哈希码 System.out.println("员工"+name+

Java提高篇——equals()与hashCode()方法详解

末鹿安然 提交于 2020-02-01 13:16:32
阅读目录 equals()方法详解 hashcode() 方法详解 Hashset、Hashmap、Hashtable与hashcode()和Equals()的密切关系 java.lang.Object类中有两个非常重要的方法: public boolean equals(Object obj) public int hashCode() Object类是类继承结构的基础,所以是每一个类的父类。所有的对象,包括数组,都实现了在Object类中定义的方法。 equals()方法详解 equals()方法是用来判断其他的对象是否和该对象相等. equals()方法在object类中定义如下: public boolean equals(Object obj) { return (this == obj); } 很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、Integer、Double等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法。 比如在String类中如下: public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) {

论文阅读(6):Deep Clustering and Block Hashing Network for Face Image Retrieval

走远了吗. 提交于 2020-01-23 03:14:31
1.Motivation a. inter-class similarities(similar appearance between different persons) b. intra-class variations(same person with different pose, facial expressions, illuminations) 人脸图像存在类间相似,类内变化大的问题。很多方法都会针对这个问题设计Loss或者算法 2.Contribution 针对上述的问题,文章主要做的事情有: a. 用center-clustering loss来最小化属于同一类的人脸特征之间的距离,解决intra-class variation b. 分别对人脸的实数值特征和哈希码应用classification loss(即softmax),目的是学习出具有判别性的特征/哈希码, 将人脸从众多身份中辨认出来 c. 提出block hashing layer,这一层的作用是同时减少哈希码之间的冗余度,以及参数的数量 3.Proposed Approach (1) 网络 和之前的几篇深度哈希论文一样,取最后一个池化层和最后一个卷积层的输出分别做全局最大池化,然后合并在一起进入全连层。这样做的目的是提取多尺度特征,并且减少参数的数量。 (2) 损失函数 文章用了四个loss,

【论文翻译】Deep Visual-Semantic Hashing for Cross-Modal Retrieval

笑着哭i 提交于 2020-01-06 17:57:25
Deep Visual-Semantic Hashing for Cross-Modal Retrieval 用于跨模态检索的深度视觉语义哈希 摘要: 由于哈希算法具有较高的存储和检索效率,在大规模多媒体检索中被广泛应用于近似近邻搜索。跨模态哈希能够有效地检索图像以响应文本查询,反之亦然,近年来受到越来越多的关注。现有的大多数跨模态哈希研究工作都没有捕捉到图像的空间依赖性和文本句子的时间动态,从而学习强大的特征表示和跨模态嵌入,从而缓解了不同模式的异质性。摘要提出了一种新的深度视觉语义哈希(DVSH)模型,该模型在端到端深度学习体系结构中生成图像和句子的紧凑哈希码,捕捉视觉数据与自然语言之间的内在跨模态对应关系。DVSH是一种混合的深度架构,它构成了一个用于学习图像和文本句子的联合嵌入空间的可视化语义融合网络,以及两个用于学习哈希函数以生成紧凑二进制代码的特定于模态的哈希网络。我们的架构有效地统一了联合多模态嵌入和交叉模态哈希,它是基于图像上的卷积神经网络、句子上的递归神经网络和一个结构化的最大裕度目标的新组合,该目标将所有东西集成在一起,从而能够学习保持相似性和高质量的哈希码。大量的经验证据表明,我们的DVSH方法在图像-句子数据集的跨模态检索实验中,即标准的IAPR TC-12和大规模的Microsoft COCO中,得到了最先进的结果。 1.介绍 而海量

Java总结篇系列:java.lang.Object

扶醉桌前 提交于 2019-12-18 18:35:51
从本篇开始,将对Java中各知识点进行一次具体总结,以便对以往的Java知识进行一次回顾,同时在总结的过程中加深对Java的理解。 Java作为一个庞大的知识体系,涉及到的知识点繁多,本文将从Java中最基本的类java.lang.Object开始谈起。 Object类是Java中其他所有类的祖先,没有Object类Java面向对象无从谈起。作为其他所有类的基类,Object具有哪些属性和行为,是Java语言设计背后的思维体现。 Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入。Object类没有定义属性,一共有13个方法,具体的类定义结构如下图: 1.类构造器public Object(); 大部分情况下 ,Java中通过形如 new A(args..)形式创建一个属于该类型的对象。其中A即是类名,A(args..)即此类定义中相对应的构造函数。通过此种形式创建的对象都是通过类中的构造函数完成。为体现此特性,Java中规定:在类定义过程中,对于未定义构造函数的类,默认会有一个无参数的构造函数,作为所有类的基类,Object类自然要反映出此特性,在源码中,未给出Object类构造函数定义,但实际上,此构造函数是存在的。 当然,并不是所有的类都是通过此种方式去构建,也自然的, 并不是所有的类构造函数都是public。 2

从系统性能优化谈对象相等性

◇◆丶佛笑我妖孽 提交于 2019-12-02 16:58:29
公司系统中有一接口访问量大,内部计算逻辑较为复杂。在优化时打算把Request中的参数做为Key,Response做为Value放到进程内缓存中,以降低服务器压力,提高接口响应速度。因为Response中一些数据时效性要求较高,所以缓存设置一个较短的过期时间(比如10s)。 但这里牵涉到一个问题,如何有效的判断两次请求的参数是相等的。C#中自定义类型会从Object类继承Equals和GetHashCode两个方法,可以根据实际需求来重写这两个方法实现对象相等性比较。 Object.Equals(Object) Object 默认实现根据对象在内存中的地址,即引用是否相同来判断对象是否相等。应该说是identity而非equality。与Python中的is、== 操作符类似。这种默认实现通常不能满足需求,自定义实现Equals思路如下: obj为null,返回false,因为Equals是实例方法,this不会为null this和obj引用同一个对象返回true this和obj是不同类型返回false 调用Equals逐字段进行比较 必要时调用基类的Equals方法来比较基类中字段的相等性(通常不调用Object类的Equals) 根据上述思路,实现自定义类型的Equals方法: ValueType 反编译之后,可以看到ValueType中Equals方法的实现