
algorithm
文章平均质量分 56
varyall
这个作者很懒,什么都没留下…
展开
-
马氏距离和欧式距离详解
一般在机器学习模型中会涉及到衡量两个样本间的距离,如聚类、KNN,K-means等,使用的距离为欧式距离。其实,除了欧氏距离之外,还有很多的距离计算标准,本文主要介绍欧氏距离和马氏距离。欧氏距离最常见的两点之间或多点之间的距离表示法,又称之为欧几里得度量,它定义于欧几里得空间中,如点x = ( x 1 , … , x n ) x = (x_1,…,x_n)x=(x1,…,xn)和y = ( y 1 , … , y n ) y = (y_1,…,y_n)y=(y1,…,yn)之间的距离...转载 2020-12-24 21:04:36 · 5016 阅读 · 0 评论 -
Faiss流程与原理分析
1、Faiss简介 Faiss是Facebook AI团队开源的针对聚类和相似性搜索库,为稠密向量提供高效相似度搜索和聚类,支持十亿级别向量的搜索,是目前最为成熟的近似近邻搜索库。它包含多种搜索任意大小向量集(备注:向量集大小由RAM内存决定)的算法,以及用于算法评估和参数调整的支持代码。Faiss用C++编写,并提供与Numpy完美衔接的Python接口。除此以外,对一些核心算法提供了GPU实现。相关介绍参考《Faiss:Facebook开源的相似性搜索类库》2、Faiss安装 参考《..转载 2020-12-24 20:54:50 · 1089 阅读 · 0 评论 -
facebook大数据搜索库faiss使用——选择Index
选择Index并不明显,有几个问题可以帮助选择Index。是否需要精确结果使用Flat。IndexFlat2是唯一能保证精确结果的Index。它为其他Index提供了对比标准。它不会压缩向量,不支持带标签添加,只能顺序添加。所以,如果你需要add_with_ids,使用IDMap,Flat。内存是否有限制请注意Faiss所有的Index都是存储在RAM里的,如果不需要精确结果,而同时RAM是有限的,在该限制下,我们在精度-速度中间进行衡量选择。可以考虑下面的问题:内存充足无限制:使用HN转载 2020-12-24 20:52:36 · 889 阅读 · 0 评论 -
一文看懂HNSW算法理论的来龙去脉
HNSW算法----Hierarchcal Navigable Small World graphs,第一贡献者:Y.Malkov(俄)一.背景介绍 在浩渺的数据长河中做高效率相似性查找一直以来都是让人头疼的问题。比如,我在搜狗app上阅读了一篇文章,推荐系统就应当为我推送与这篇文章最相近的文章,数据库中所有文章是用向量表示的,所以我们要解决的问题就是“找到与这篇文章的向量最相近的几个向量”,然后把这些向量对应的文章推送出去。数据库中的文章千千万,所有用户每秒的请求也是千千万,我们需要...转载 2020-12-24 20:50:57 · 1318 阅读 · 1 评论 -
Top K问题的两种解决思路
Top K问题在数据分析中非常普遍的一个问题(在面试中也经常被问到),比如:从20亿个数字的文本中,找出最大的前100个。解决Top K问题有两种思路,最直观:小顶堆(大顶堆 -> 最小100个数); 较高效:Quick Select算法。LeetCode上有一个问题215. Kth Largest Element in an Array,类似于Top K问题。1. ...转载 2018-07-24 08:45:54 · 407 阅读 · 0 评论 -
C++版 - 剑指offer 面试题30:最小的K个数(topK问题) 题解
剑指offer 面试题30:最小的K个数 题目: 输入n个整数,找出其中最小的k个数。例如:例如输入4 、5 、1、6、2、7、3 、8 这8 个数字,则最小的4 个数字是1 、2、3 、4提交网址: http://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf?tpId=13&tqId=11182 ...转载 2018-07-18 15:45:54 · 421 阅读 · 0 评论 -
最大堆和最小堆
堆和栈的区别: 一、堆栈空间分配区别: 1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈; 2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。 二、堆栈缓存方式区别: 1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放; ...转载 2018-07-18 15:57:36 · 48697 阅读 · 0 评论 -
用PriorityQueue解决选择最小的K个数问题
Java 中的PriorityQueue是一个基于优先级堆的无界优先级队列。优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。优先级队列不允许使用 null 元素。依靠自然顺序的优先级队列还不允许插入不可比较的对象(这样做可能导致 ClassCastException)。此队列的头是按指定排序方式确定的最小元素。如果...转载 2018-07-24 10:50:34 · 1408 阅读 · 0 评论 -
致性哈希算法的优化----关于如何保正在环中增加新节点时,命中率不受影响
背景 09年初,我们做了一个memcached的智能客户端库,业务只要将这个库链上,就能跟memcached服务器通信。并且实现了一致性哈希的分布式算法,后端memcached服务器可以无限制扩展,而且客户端能对memcached做自动故障转移以及恢复。我们知道,在没有对数据做冗余存储的情况下,无论是一致性哈希还是求余数分布式算法,在新增或删除memcached节点时,命中率都会不同程...转载 2018-07-22 21:45:48 · 587 阅读 · 0 评论 -
&&(短路与)和&(逻辑与)的区别
&&(短路与)和&(逻辑与)的时候:有假则为假,全真则为真(有假必假,全真为真) ||(短路或)和|(逻辑或)的时候:有真则为真,全假则为假(有真必真,全假为假) 逻辑与和短路与的区别:逻辑与的判断方式是:从左到右依次判断,直到结尾(逻辑全程运算) 短路与的判断方式是: 从左到右依次判断,直到出现false为止将不再判断,...转载 2018-07-19 21:43:25 · 18552 阅读 · 4 评论 -
top k算法讲解
在实际工作中,我们时常会有寻找长度为n的数组中,排在前k的元素,对于top k的问题,最暴力的处理方式就是直接对数组进行排序,然后再去截取前k个数字,从而达到自己的目的,这种算法的实现复杂度为O(nlogn),其实有O(n)的算法或者是O(nlogk)时间复杂度的算法。基于快排的top k算法如果我们了解快速排序算法的话,知道其原理是每次寻找一个数值,将数组中所有小于这个数的值放在其左侧,所有大于...转载 2018-07-10 22:48:55 · 299 阅读 · 0 评论 -
Top K问题的两种解决思路
Top K问题在数据分析中非常普遍的一个问题(在面试中也经常被问到),比如:从20亿个数字的文本中,找出最大的前100个。解决Top K问题有两种思路,最直观:小顶堆(大顶堆 -> 最小100个数);较高效:Quick Select算法。LeetCode上有一个问题215. Kth Largest Element in an Array,类似于Top K问题。1. 堆小顶堆(min-heap...转载 2018-07-10 22:47:53 · 857 阅读 · 0 评论 -
Java 堆排序(大顶堆、小顶堆)
引用:http://lib.youkuaiyun.com/article/datastructure/8973堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序的平均时间复杂度为Ο(nlogn) 。算法步骤:1. 创建一个堆H[0..n-1]2. 把堆首(最大值)和堆尾互换3. ...转载 2018-07-10 21:51:17 · 21196 阅读 · 1 评论 -
Java实现图的深度和广度优先遍历算法
概述: 最近要学习写网络爬虫,所以把图的深度和广度搜索都再温习一下。图结构展示:实现过程:首先,我们来看看图结构在代码中的实现。有三块逻辑:1.图中的节点:[java] view plain copypublic class GraphNode { public List<GraphEdge> edgeList = null; private St...转载 2018-06-02 11:05:25 · 2363 阅读 · 0 评论 -
笔试面试算法经典--矩阵的最短路径和(Java)
题目 给定一个矩阵m,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有路径中最小的路径和。 例子: 给定m如下: 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0 路径1,3,1,0,6,1,0是所有路径中路径和最小的,所以返回12。解法1思路:使用动态规划,定义 dp[M][N] , M ,N 分别代表矩阵的行和列数 dp[i]...转载 2018-06-01 21:44:24 · 1119 阅读 · 0 评论 -
输出从矩阵左上角到右下角的所有路径
一、问题描述一个m×n的矩阵,只能从矩阵内部向右或向下走,输出从矩阵左上角到右下角的所有路径。下图即为从1到6的所有路径123456二、解题思路1、数学解法求路径数(1)使用排列组合。因为只能向右走或者向下走,在(m-1)+(n-1)次行走后,才能到达终点,也就是右下角。而在这m+n-2次行走中,有m-1次是向下,n-1次向右,所以是一个选择问题:(2)水平行走记作0,竖直行走记作1。每一种行走足...转载 2018-06-01 19:13:21 · 5003 阅读 · 0 评论 -
KMP(Java实现)
看了一下 阮一峰 老师的KMP算法的讲解,感觉终于对这个算法有了点理解了。于是就用java实现了一下。下面讲解我是如何一步一步来实现这个算法的,其中大部分内容直接借鉴了阮一峰老师的案例,由于本人编程经验有限,代码仅供参考。前缀和后缀的定义“前缀”指除了最后一个字符以外一个字符串的全部头部组合;“后缀”指除了第一个字符以外,一个字符串的全部尾部组合。举例:字符串“blue”前缀“b” “bl” “b...转载 2018-06-01 18:22:01 · 1543 阅读 · 0 评论 -
冒泡排序与选择排序区别
冒泡排序:冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数 放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于...转载 2018-05-31 21:46:16 · 2708 阅读 · 0 评论 -
短路与*非短路与 _ 短路或&非短路或
1、验证“&”的作用:public class OperatorDemo{ public static void main(String[] args){ if(10!=10 & 10/0 == 0) //非短路与--要把所有的条件进行判断 { System.out.println("条件满足。。。"); ...转载 2018-07-19 21:49:40 · 1402 阅读 · 0 评论 -
最大子数组之和对应的子数组
给定一个整数数组(包含正负数),找到一个具有最大和的子数组,返回其最大的子数组public static List<Integer> subArraySumItem(int[] params) { int currentSum = 0; int maxSum = 0; int curStart = 0; int start = 0; in...原创 2018-07-20 19:11:23 · 929 阅读 · 0 评论 -
Java线程状态中BLOCKED和WAITING有什么区别?
刚才在看优快云的问答时,发现这个问题。原问题的作者是在观察jstack的输出时提出的疑问,那么BLOCKED和WAITING有什么区别呢?答复在JDK源码中可以找到,如下是java.lang.Thread.State类的一部分注释。/*** Thread state for a thread blocked waiting for a monitor lock.* A thread i...转载 2018-07-20 20:07:13 · 4515 阅读 · 3 评论 -
Java统计单词(字符串)出现的顺序并且排序
import java.util.*;/** * Created by abin on 2018/9/7. * Java统计单词(字符串)出现的顺序并且排序 */public class WordCountSort { public static void main(String[] args) { List<String> list = new...转载 2018-09-07 16:54:24 · 1815 阅读 · 0 评论 -
73. Set Matrix Zeroes
space O(m+n), time O(mn) public void setZeroes_Set(int[][] matrix) { if(matrix==null) return; final int M=matrix.length, N=matrix[0].length; Set<Integer> rowSet ...转载 2018-09-10 22:29:24 · 135 阅读 · 0 评论 -
二叉树前序遍历,中序遍历,后序遍历
Pre Order Traversepublic List<Integer> preorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); Deque<TreeNode> stack = new ArrayDeque<>();...转载 2018-09-12 23:16:35 · 209 阅读 · 0 评论 -
3点15分夹角多少度
3点15, 时针再3-4之间,分针指3!15/60=1/4格,即时针过3,又多1/4格表上一大格:360÷12=30°30×1/4=7.5°很简单啊! 学会画图分析~ 过程知道了,根本不需要记什么!钟表上有60个小格,12大格! 一小格:360÷60=6°, 大格:30°分针几分就是几小格~ 时针要注意位置~ 如果你看到钟的时间是3:15,那一刻时针和分针的夹...转载 2018-09-07 23:12:29 · 7270 阅读 · 0 评论 -
原码,反码,补码
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/Jason_M_Ho/article/details/78700434 数值在计算机中是以补码的方式存储的,在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念。 对于一个数, 计算机要使用一定的编码方式进行存储。 原码, 反码, 补码是计算机存储一个具体数字的编码方式。...转载 2018-08-29 19:55:17 · 293 阅读 · 0 评论 -
146. LRU Cache
1.The key to solve this problem is using a double linked list which enables us to quickly move nodes.2.The LRU cache is a hash table of keys and double linked nodes. The hash table makes the time of ...转载 2018-08-31 19:01:16 · 164 阅读 · 0 评论 -
Java数组实现循环队列的两种方法
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/Victor_Cindy1/article/details/46604575用java实现循环队列的方法:1、增加一个属性size用来记录目前的元素个数。目的是当head=rear的时候,通过size=0还是size=数组长度,来区分队列为空,或者队列已满。2、数组中只存储数组大小-1个元...转载 2018-08-28 20:49:35 · 11489 阅读 · 6 评论 -
面试遇到了算法题?看这篇就够啦。
原文地址:github.com/kdn251/interviews 译文出自:掘金翻译计划 译者:王下邀月熊 校对者:PhxNirvana、根号三 这个 链接 用来查看本翻译与英文版是否有差别(如果你没有看到 README.md 发生变化,那就意味着这份翻译文档是最新的)。Interviews软件工程技术面试个人指南。Maintainer - Kevin Naughton...转载 2018-08-24 13:55:29 · 6490 阅读 · 1 评论 -
迷宫问题(maze problem)——深度优先(DFS)与广度优先搜索(BFS)求解
版权声明:感谢您对博文的关注!校招与社招,有需要内推腾讯的可以QQ(1589276509)or 微信(louislvlv)联系我哈,期待您的加入。 https://blog.youkuaiyun.com/K346K346/article/details/512894781.问题简介给定一个迷宫,指明起点和终点,找出从起点出发到终点的有效可行路径,就是迷宫问题(maze problem)。迷宫可以以...转载 2018-08-26 22:24:28 · 5742 阅读 · 1 评论 -
数组和链表
数组静态分配内存,链表动态分配内存;数组在内存中连续,链表不连续;数组元素在栈区,链表元素在堆区;数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n);数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。 https://zhuanlan.zhihu.com/p/32057898 ...转载 2018-08-26 10:35:25 · 215 阅读 · 0 评论 -
迷宫算法(JAVA实现)
迷宫算法(JAVA实现) 对于走迷宫,人们提出过很多计算机上的解法。深度优先搜索、广度优先搜索是使用最广的方法。生活中,人们更愿意使用“紧贴墙壁,靠右行走”的简单规则。下面的代码则采用了另一种不同的解法。它把走迷宫的过程比做“染色过程”。假设入口点被染为红色,它的颜色会“传染”给与它相邻的可走的单元。这个过程不断进行下去,如果最终出口点被染色,则迷宫有解。在以下程序中“#”代表不可...转载 2018-07-23 09:43:31 · 3214 阅读 · 0 评论 -
[Leetcode] Backtracking回溯法(又称DFS,递归)全解
回溯全集回溯是啥用爬山来比喻回溯,好比从山脚下找一条爬上山顶的路,起初有好几条道可走,当选择一条道走到某处时,又有几条岔道可供选择,只能选择其中一条道往前走,若能这样子顺利爬上山顶则罢了,否则走到一条绝路上时,只好返回到最近的一个路口,重新选择另一条没走过的道往前走。如果该路口的所有路都走不通,只得从该路口继续回返。照此规则走下去,要么找到一条到达山顶的路,要么最终试过所有可能的道,无法到...转载 2018-07-22 23:10:01 · 7451 阅读 · 1 评论 -
把二叉树打印成多行
题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。import java.util.ArrayList;import java.util.Deque;import java.util.LinkedList;public class BinaryTreePrintByRow { ArrayList<ArrayList<Integer&g...原创 2018-07-27 11:52:10 · 250 阅读 · 0 评论 -
算法系列-大数据面试题-两个大文件中找出共同记录
1.题目描述给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?2.思考过程(1)首先我们最常想到的方法是读取文件a,建立哈希表(为什么要建立hash表?因为方便后面的查找),然后再读取文件b,遍历文件b中每个url,对于每个遍历,我们都执行查找hash表的操作,若hash表中搜索到了,则说明两文件共有,存入一个集合。(2)但上述方法有...转载 2018-05-31 00:35:14 · 2321 阅读 · 0 评论 -
笔试面试算法经典--矩阵的最短路径和(Java)
题目 给定一个矩阵m,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有路径中最小的路径和。 例子: 给定m如下: 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0 路径1,3,1,0,6,1,0是所有路径中路径和最小的,所以返回12。解法1思路:使用动态规划,定义 dp[M][N] , M ,N 分别代表矩阵的行和列数 dp[i]...转载 2018-05-30 15:55:06 · 821 阅读 · 0 评论 -
进程间通信的方式——信号、管道、消息队列、共享内存
多进程:首先,先来讲一下fork之后,发生了什么事情。由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是新进程(子进程)的进程 id。将子进程id返回给父进程的理由是:因为一个进程的子进程可以多于一个,没有一个函数使一个进程可以获得其所有子进程的进程id。对子进程来说,之所以for转载 2017-12-07 14:06:15 · 1467 阅读 · 0 评论 -
互联网公司常见面试算法题
1、假设淘宝一天有5亿条成交数据,求出销量最高的100个商品并给出算法的时间复杂度。先用哈希,统计每个商品的成交次数,然后再用在N个数中找出前K大个数的方法找出成交次数最多的前100个商品。优化方法:可以把5亿个数据分组存放,比如放在5000个文件中。这样就可以分别在每个文件的10^6个数据中,用哈希+堆统计每个区域内前100个频率最高的商品,最后求出所有记录中出现频率最高的前转载 2017-12-07 00:53:25 · 454 阅读 · 0 评论 -
数字三角形
给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。 注意事项如果你只用额外空间复杂度O(n)的条件下完成可以获得加分,其中n是数字三角形的总行数。样例比如,给出下列数字三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]从顶到底部的最小转载 2017-12-07 00:51:41 · 196 阅读 · 0 评论 -
大数据Top K算法思路
Top K 算法详解应用场景: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。转载 2017-12-06 23:44:41 · 583 阅读 · 0 评论