文档章节

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

厉力文武
 厉力文武
发布于 2017/08/17 14:59
字数 730
阅读 30
收藏 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
博文 83
码字总数 77362
作品 0
朝阳
程序员
悠然乱弹:借船下海还是造船下海

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

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

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

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

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

神箭手云爬虫
03/19
0
0
嵌入式系统定制开发的分层与专业的分类

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

gunser
05/31
0
0
中国首台液氧甲烷发动机核心部件测试,全球航天领军企业钟情CH4

  近期,国内首个致力于液氧甲烷发动机研发的商业航天公司蓝箭航天完成了发动机研发过程中极具意义的一步——首款液氧甲烷发动机“凤凰”的 10 吨级缩比推力室进行了首轮三次点火试验并取得...

DeepTech深科技
03/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

这些Spring中的设计模式,你都知道吗?

设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆。 Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行...

Java填坑之路
34分钟前
1
0
Spring Aop原理之Advisor过滤

在上文(Spring Aop之Advisor解析)中我们讲到,Spring Aop对目标bean的代理主要分为三个步骤:获取所有的Advisor,过滤当前bean可应用的Advisor和使用Advisor为当前bean生成代理对象,并且上文...

爱宝贝丶
45分钟前
0
0
JMockit学习教程

1 JMockit中文网 我觉得如果仅仅是开发自测的话,把JMockit中文网认真看一遍,就可以在项目中使用JMockit了。 http://jmockit.cn/index.htm 2 JMockit中文教程 官方文档中文版。对于不喜欢看...

SuperHeroes
56分钟前
0
0
Linux服务器几乎从不采用Arch Linux?

我们见得多的Linux服务器系统一般都是什么Ubuntu Server啊,什么Cent OS啊,什么Fedora啊,或者企业采用的Red Hat啊,为什么几乎没有Arch Linux呢?下面我将从若干个方面指出Arch Linux在服务...

linux-tao
今天
0
0
js 函数柯里化 闭包

参考 https://mp.weixin.qq.com/s/GEHL3jarDdAAcr5tQGjmDg 一个统计求和的函数 需要知道整个数组的信息,然后遍历求值 function countMoney() { let money = 0 // 温馨提示:arguments...

阿豪boy
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部