lsh

git的基本用法

蓝咒 提交于 2020-02-25 15:19:22
git组成 工作区 —》暂存区—》git仓库 初始化一个git仓库 第一种,创建目录并初始化git仓库到目录 git init myweb 第二种 mkdir myweb cd myweb git init 添加文件到git暂存区 一、 [ root@lsh myweb ] # git add . #全部添加 [ root@lsh myweb ] # git add index.html #添加指定文件 A index.html #已经添加 ?? passwd #未添加 二、先忽略不想添加的文件,然后全部添加 [ root@lsh myweb ] # vim .gitignore .gitignore passwd [ root@lsh myweb ] # git add . [ root@lsh myweb ] # git status -s A index.html [ root@lsh myweb ] # git commit -m 'first commit' 删除暂存区的文件 [ root@lsh myweb ] # git rm --cached index.html rm 'index.html' [ root@lsh myweb ] # git status -s ?? index.html 删除git仓库的文件 [ root@lsh myweb ] # git

高维向量快速检索方法Locality Sensitive Hashing之一汉明空间和欧式空间实现

给你一囗甜甜゛ 提交于 2020-01-15 01:14:07
1 高维向量检索问题 高维向量检索主要解决由数据维数增加所引发检索速度急剧下降的的问题。高维空间中数据的特点主要包括以下三个方面: (1) 稀疏性。随着维度增长,数据在空间分布的稀疏性增强; (2) 空空间现象。对于服从正态分布的数据集,当维数大约增加到10时,只有不到1%的数据点分布在中心附近; (3) 维度效应。随着维数的增加,对索引的维护效率急剧下降,并且高维空间中数据点之间的距离接近于相等。 2 树索引方法在高维检索中的缺点 传统的树索引方法,如基于数据划分的索引R-tree、R-tree、SR-tree、k-d tree等和基于空间划分的索引quad-tree、kdb-tree等,在特征维度不高的情况下具有良好的性能,在特征维数足够高的情况下(超过几十维),它们的性能会退化到最原始的顺序查找,这就是所谓的“维度灾难”。树索引方法在高维情况下主要面临着三个困难: (1) 每次划分只使用了特征向量一个维度的信息,在高维情况下这种数据划分方法效率很低; (2) 需要某种形状的覆盖对象来表示某个区域,而固定形状的覆盖对象对区域的描述会有偏差。在高维情况下这个偏差会更明显; (3) 为了获得精确最近邻检索的结果,索引的性能退化到顺序查找的程度。 3 ANN和LSH 由于精确最近邻搜索计算代价高、算法效率低,人们采用近似最近邻搜索方法完成检索的任务。当前

LSH搜索算法

我们两清 提交于 2019-12-04 01:32:24
LSH(Location Sensitive Hash),即位置敏感哈希函数。与一般哈希函数不同的是位置敏感性,也就是散列前的相似点经过哈希之后,也能够在一定程度上相似,并且具有一定的概率保证。 作者注:LSH算法分两种:SimHash和MinHash。 simhash的原理是减少搜索空间,用汉明距离替代余弦距离 minHash的原理是降维。通过hash映射函数,将特征元素的个数降下来。 形式化定义: 对于任意q,p属于S,若从集合S到U的函数族H={h1,h2...hn}对距离函数D(,),如欧式距离、曼哈顿距离等等,满足条件: 则称D(,)是位置敏感的。 如下图,空间上的点经位置敏感哈希函数散列之后,对于q,其rNN有可能散列到同一个桶(如第一个桶),即散列到第一个桶的概率较大,会大于某一个概率阈值p1;而其(1+emxilong)rNN之外的对象则不太可能散列到第一个桶,即散列到第一个桶的概率很小,会小于某个阈值p2. LSH的作用 ◆高维下近似查询 相似性检索在各种领域特别是在视频、音频、图像、文本等含有丰富特征信息领域中的应用变得越来越重要。丰富的特征信息一般用高维向量表示,由此相似性检索一般通过K近邻或近似近邻查询来实现。一个理想的相似性检索一般需要满足以下四个条件: 1. 高准确性。即返回的结果和线性查找的结果接近。 2. 空间复杂度低。即占用内存空间少。理想状态下

局部敏感哈希LSH(Locality-Sensitive Hashing)——海量数据相似性查找技术

旧巷老猫 提交于 2019-12-01 17:16:22
一、 前言     最近在工作中需要对海量数据进行相似性查找,即对微博全量用户进行关注相似度计算,计算得到每个用户关注相似度最高的TOP-N个用户,首先想到的是利用简单的协同过滤,先定义相似性度量(cos,Pearson,Jaccard),然后利用通过两两计算相似度,计算top-n进行筛选,这种方法的时间复杂度为 \(O(n^2)\) (对于每个用户,都和其他任意一个用户进行了比较)但是在实际应用中,对于亿级的用户量,这个时间复杂度是无法忍受的。同时,对于高维稀疏数据,计算相似度同样很耗时,即 \(O(n^2)\) 的系数无法省略。这时,我们便需要一些近似算法,牺牲一些精度来提高计算效率,在这里简要介绍一下MinHashing,LSH,以及Simhash。 二、 MinHashing     Jaccard系数是常见的衡量两个向量(或集合)相似度的度量: \[ J(A,B)=\frac {\left | A\cap B \right |}{\left | A\cup B \right |} \]     为方便表示,我们令A和B的交集的元素数量设为 \(x\) ,A和B的非交集元素数量设为 \(y\) ,则Jaccard相似度即为 \()\frac x {(x+y)}\) 。 所谓的MinHsah,即进行如下的操作: 对A、B的 \(n\) 个维度,做一个随机排列(即对索引 \(

luogu_P1712 [NOI2016]区间

寵の児 提交于 2019-12-01 16:47:06
传送门: https://www.luogu.org/problem/P1712 学到了一种据说是普及组的思想--取尺法。 (具体是啥忘了。。。。。。 好像是一种很优秀的枚举方法。 这道题就是先把区间按照区间长度排个序 (好像有了单调性好多问题就很简单了 然后把区间计算到答案里 (何为计算到贡献里? 就是这个区间里的点被覆盖次数++ 当发现有一个点出现到达m次然后更新答案 再把之前加入的区间贡献减去(类似队列..........为什么能直接把贡献减去呢?因为没用了.......后面的区间长度只会更长,而它却比别人都短......所以说没用了对吧 然后这道题离散化一下,用线段树维护被覆盖次数的最大值就可以了 #include<cstdio> #include<algorithm> #define R register #define ls(p) p<<1 #define rs(p) p<<1|1 using namespace std; int n,m,lsh[1001000],mx,ans=1e9; struct qqq{ int l,r,len; inline bool operator <(const qqq i) const{ return len<i.len; } }ln[500100]; struct ddd{ int l,r,lazy,cnt; }t[4001000];

CF765F Souvenirs 线段树

▼魔方 西西 提交于 2019-11-29 19:12:12
传送门 神仙题 将询问离线然后枚举右端点,维护每一个位置 \(i\) 与其之后的所有位置 \(j\) 的距离最小值然后区间取min。显然这样的做法的最劣复杂度是 \(O(n^2)\) 的,我们需要一些剪枝。 我们考虑对于某一个位置 \(i\) ,在其之后 真正 有可能更新最小值的位置有哪些。如果设序列 \(\{a\}\) 是一个递增序列, \(a_1 > i,val_{a_1} \geq val_i\) ,且每当右端点取到其中的某个 \(a_j\) 时 \(i\) 位置的最小值会进行有效的更新,那么会要满足: \(\forall j \in [1,|a|) , |val_i - val_{a_j}| \geq 2|val_i - val_{a_{j+1}}|\) ,这是因为如果这个条件不满足那么 \(a_j\) 与 \(a_{j+1}\) 的距离会更小,此时对 \(i\) 的更新就是无效的。 不难发现上面的 \(a\) 序列的长度最多只会有 \(log 10^9\) 项,所以我们可以使用线段树找出当右端点移到哪些位置的时候需要修改 \(i\) 位置,然后移动右端点进行更新并统计答案。复杂度 \(O(nlog^2n+qlogn)\) #include<bits/stdc++.h> using namespace std; int read(){ int a = 0; char c =

8.22题解

和自甴很熟 提交于 2019-11-28 06:08:25
果然,我只能改完B卷的题 T1 二分答案+贪心$check$,当然什么三分,数学题之类的都有写的,都可以 考场上实在太困了,左边界的$max$被我在神志不清的情况下写了个$min$,手扔20分,又一次离AC远去 1 #include<iostream> 2 #include<cstdio> 3 #define ll long long 4 using namespace std; 5 ll n,d,a,b,l,r; 6 inline bool check(ll midd) 7 { 8 ll cost; 9 if((midd-a)%d) cost=(midd-a)/d+1ll*1; 10 else cost=(midd-a)/d; 11 if((midd-b)%d) cost+=(midd-b)/d+1ll*1; 12 else cost+=(midd-b)/d; 13 if(cost<n) return 1; 14 else return 0; 15 } 16 int main() 17 { 18 scanf("%lld%lld%lld%lld",&n,&d,&a,&b); 19 l=max(a,b); r=a+n*d; 20 if(d==0) {printf("%lld",l); return 0;} 21 while(l<r) 22 { 23 if(l+1==r) 24 {

码队的新桌游

你离开我真会死。 提交于 2019-11-28 05:12:24
码队的新桌游 树状数组、离散化、二维偏序 #include <cstdio> #include <cstdlib> #include <cstring> #include <climits> #include <utility> #include <algorithm> #include <queue> #include <unordered_map> using namespace std; struct Item { int a, b, c; int id; int ans; explicit Item(int _a = 0, int _b = 0, int _c = 0) : a(_a), b(_b), c(_c) {} }; struct cmpa { bool operator()(const Item &lhs, const Item &rhs) const { return lhs.a > rhs.a || (lhs.a == rhs.a && lhs.b < rhs.b) || (lhs.a == rhs.a && lhs.b == rhs.b && lhs.c < rhs.c); } }; struct cmpc { bool operator()(const Item &lhs, const Item &rhs) const { return lhs.c >