文档章节

机学走起第六式:箭船分离

厉力文武
 厉力文武
发布于 2017/08/17 14:59
字数 730
阅读 31
收藏 0

    数学的奇妙之处就在于把一些散乱的看似毫不相关的东西以数字的形式表现,再通过公式和模型组织起来加以计算,最终的结果又刚好完美的证明了它自己是真实可信的,局部哈希完美的诠释了这句真理,局部哈希与哈希的不同在于它温柔的描述了一个对象在向另一个对象变化过程中保留着自身的主要特征,而不像哈希那样基因突变式的猝不及防。

航天员:	[0110011010100110010000010100000001111110010010110011011111011010] ->	0.042866474940001
载人:	[1001011010001100001110101111111110010110111010101100111110100010] ->	0.03454385915100477
交会:	[1011000111010111110101011110010100000010111000010000111001010101] ->	0.03324403373307827
对接:	[1011000001110110101011110011011100000110110001111111000111100001] ->	0.02921719003554388
天宫:	[0010000101101100110111111011101001101010111110101110111011001110] ->	0.02515174408716358
航天:	[0111110101011100000100011010010000001111100101001010100011010011] ->	0.023303336236545936
发射:	[0110110000000111010000000101000000010010101010111010000010011100] ->	0.021250399979987955
节点:	[1110111001010101111001001110010001111110001010110010000100001001] ->	0.019656970658882354
我国:	[1110100101101110000101101001111111011100100110100100100110111010] ->	0.018924900735380758
飞船:	[1011011101111100011100010101001011010000001100101000000101001000] ->	0.016226164698362116

    数据“航天员: [0110011010100110......] -> 0.042866474940001”,其中航天员是分词,[0110011010100110......]是分词二进制哈希值,0.042866474940001是分词权重。

    算法过程是这样的,遍历每个分词二进制哈希值的逐个比特位,如果是1就加其权重,否则减其权重,64位长整形逐位判断逐位加减,最后判断结果大于零的话,则在返回值相同比特位上记录1否则记为0,由此生成一个全新的长整形值。每个分词被看做是一个多维坐标系,并拥有各自象限空间初值,1代表正象限0代表负象限,将权重值按照象限的伸展方向不断累积,最后只关心结果落在正负象限哪边即可,从而实现降维的根本目的,余弦值的计算在多维象限空间中的正确性数学家们早已证明过了不必怀疑。

public static class XxPair {
	public Long		md5;
	public String	key;
	public Double	val;
	
	public XxPair() {}
	public XxPair(Long m, String k, Double v) {md5 = m; key = k; val = v;}
}

private static final int XX_BITS = 0X40;
private static final Long[] XX_MASK = {
	0X8000000000000000L, 0X4000000000000000L, 0X2000000000000000L, 0X1000000000000000L,
	0X0800000000000000L, 0X0400000000000000L, 0X0200000000000000L, 0X0100000000000000L,
	0X0080000000000000L, 0X0040000000000000L, 0X0020000000000000L, 0X0010000000000000L,
	0X0008000000000000L, 0X0004000000000000L, 0X0002000000000000L, 0X0001000000000000L,
	0X0000800000000000L, 0X0000400000000000L, 0X0000200000000000L, 0X0000100000000000L,
	0X0000080000000000L, 0X0000040000000000L, 0X0000020000000000L, 0X0000010000000000L,
	0X0000008000000000L, 0X0000004000000000L, 0X0000002000000000L, 0X0000001000000000L,
	0X0000000800000000L, 0X0000000400000000L, 0X0000000200000000L, 0X0000000100000000L,
	0X0000000080000000L, 0X0000000040000000L, 0X0000000020000000L, 0X0000000010000000L,
	0X0000000008000000L, 0X0000000004000000L, 0X0000000002000000L, 0X0000000001000000L,
	0X0000000000800000L, 0X0000000000400000L, 0X0000000000200000L, 0X0000000000100000L,
	0X0000000000080000L, 0X0000000000040000L, 0X0000000000020000L, 0X0000000000010000L,
	0X0000000000008000L, 0X0000000000004000L, 0X0000000000002000L, 0X0000000000001000L,
	0X0000000000000800L, 0X0000000000000400L, 0X0000000000000200L, 0X0000000000000100L,
	0X0000000000000080L, 0X0000000000000040L, 0X0000000000000020L, 0X0000000000000010L,
	0X0000000000000008L, 0X0000000000000004L, 0X0000000000000002L, 0X0000000000000001L
};

private static Long SimHashGetValue(Vector<XxPair> v) {
	Long sim = 0L;
		
	for (int bit = 0; bit < CM_BITS; bit ++) {
		Double wgt = new Double("0");
		for (int idx = 0; idx < v.size(); idx ++) {
			if (0 != (v.get(idx).md5 & Xx_MASK[bit])) {
				wgt += v.get(idx).val;
			}
			else {
				wgt -= v.get(idx).val;
			}
		}
		sim |= wgt > 0 ? CM_MASK[bit] : 0;
	}
		
	return sim;
}

    数学的伟大之处就在于能够通过已知的现实世界探寻和预测未知世界的奥秘,相信在高维度空间中也一定存在着更高层次的生命形式,每个生命个体就如同一个多维模型,恶习结业善习结果,最终落在哪个象限里皆由“权重”决定,对不起扯远了~

    预告:《机学走起第七式:对接》之局部哈希在相似度计算上的应用与实现。

© 著作权归作者所有

共有 人打赏支持
厉力文武
粉丝 30
博文 86
码字总数 81619
作品 0
朝阳
程序员
私信 提问
悠然乱弹:借船下海还是造船下海

1.借船与借力 三国时期,曹操率大军想要征服东吴,孙权、刘备联合抗曹,“草船借箭”即来源于此,意即运用智谋,凭借他人的人力或财力来实现自己的目标。我们来看看这个故事的几个关键环节。...

悠悠然然
2015/06/17
0
16
笑傲江湖,独孤求败-NetScaler MAS应用交付神功详解

十年磨一剑,今日把示君 在NetScaler的历史行进到版本11.1时,跨时代的NetScaler MAS系统横空出世,集合了数据中心应用的管理分析编排大成于一身。作为历史的见证者,笔者对它强大的功能和全...

nsinsight
06/27
0
0
体制内的张小平们和那些“想上天”的民营火箭公司

不知道那位“离职就直接影响中国登月”的人才威力究竟有多大,但确定的是,他至少对民营航天企业的未来造成了一定的影响。 自媒体“紫竹张先生”的一篇《离职能直接影响中国登月的人才,只配...

程序员之家_
09/28
0
0
嵌入式系统定制开发的分层与专业的分类

嵌入式系统这个名词还是比较难以准确定义的,一般把“用于控制、监视或者辅助操作机器和设备的装置”称为嵌入式系统,系统包括一系列软硬件设施等,比如:手机的系统开发(Android、IOS等),...

gunser
05/31
0
0
如何在神箭手上快速开发爬虫——第八课 如何爬取手机瀑布流网页数据【手机参考网新闻】

1、本课完整的爬虫代码可以在神箭手示例代码中查看 2、如何在神箭手上运行代码,请查看文档 3、更详细的爬虫开发教程,请查看文档 大家好,我是来自神箭手的游牧老师。一段时间不见,不知道大...

神箭手云爬虫
03/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Windows 环境下安装 Oracle JDK

本页面中描述了如何在 Window 环境下安装 Oracle JDK。 我们使用的版本是 Window 10,我们需要安装的版本是 Oracle JDK 8u191。 检查当前版本 在进行新的 JDK 安装之前,你需要检查下你本地的...

honeymose
14分钟前
0
0
用any-loader封装jQuery的XHR —— 随便写着玩系列

哎,都说没人用JQuery啦,叫你别写这个。 其实我也是好高骛远使用过npm上某个和某个很出名的XHR库,嗯,认识我的人都知道我喜欢喷JQ,以前天天喷,见面第一句,你还用JQ,赶紧丢了吧。但我也...

曾建凯
今天
4
0
聊聊storm的AggregateProcessor的execute及finishBatch方法

序 本文主要研究一下storm的AggregateProcessor的execute及finishBatch方法 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout......

go4it
今天
3
0
大数据教程(7.5)hadoop中内置rpc框架的使用教程

博主上一篇博客分享了hadoop客户端java API的使用,本章节带领小伙伴们一起来体验下hadoop的内置rpc框架。首先,由于hadoop的内置rpc框架的设计目的是为了内部的组件提供rpc访问的功能,并不...

em_aaron
今天
5
0
CentOS7+git+github创建Python开发环境

1.准备CentOS7 (1)下载VMware Workstation https://pan.baidu.com/s/1miFU8mk (2)下载CentOS7镜像 https://mirrors.aliyun.com/centos/ (3)安装CentOS7系统 http://blog.51cto.com/fengyuns......

枫叶云
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部