算法与数据结构
文章平均质量分 68
mjiansun
Live and Learn.
展开
-
【排序算法】归并排序—C++实现
分治,就是把一个问题分成多个相似或相同的子问题,直到子问题可以简单的解决。归并排序就是运用了这个分治思想,通过递归把要排序的元素分成多个子序列,l记录起始位置,r记录末尾位置,在进行循环,去判断大小,从而完成排序。转载 2023-03-29 11:49:17 · 1751 阅读 · 0 评论 -
数据结构(四):KD树
顾名思义,kd树其实就是多维二叉树(空间二叉树的一种特殊情况), 里面储存着k维的点的信息,是对k维空间进行划分的一种数据结构。在竞赛中一般用来解决二维空间和三维空间的信息检索KD树可以解决以下几个任务:KNN问题。即查询离某个点第k邻近的点 查询最近最远(就是 KNN问题) 查询矩阵和 图像处理(与竞赛无关)对于KD树,我们可以把它分为两部分KD树的构建 对于KNN问题的最邻近查找算法KD树的构建KD树是一种平衡二叉树,它的各种操作都与我们学过的数据结构方法相似,对于我们一点转载 2022-04-22 09:28:54 · 11568 阅读 · 1 评论 -
数据结构(三):二叉树遍历
遍历方式二叉树的常见遍历方式如下几种:前序遍历: 访问根节点,前序遍历方式访问左子树,前序遍历方式访问右子树; 中序遍历: 中序遍历方式访问左子树,访问根节点,中序遍历方式访问右子树; 后序遍历: 后序遍历方式访问左子树,后序遍历方式访问右子树,访问根节点; 层次遍历: 按照层次递增的顺序,依次访问树的每层节点。示例演示除去层次遍历不谈,根据其他三种遍历方式的描述可发现,其描述的内容也就是递归进行遍历的过程。二叉树示例:前序遍历前序遍历的方式,也就是对每一棵子树,按照转载 2022-04-11 09:18:20 · 1513 阅读 · 0 评论 -
数据结构(二):二叉搜索树(Binary Search Tree)
转自:数据结构(二):二叉搜索树(Binary Search Tree) - 简书 (jianshu.com)引子定义二叉搜索树是一种节点值之间具有一定数量级次序的二叉树,对于树中每个节点:若其左子树存在,则其左子树中每个节点的值都不大于该节点值; 若其右子树存在,则其右子树中每个节点的值都不小于该节点值。示例:查询复杂度观察二叉搜索树结构可知,查询每个节点需要的比较次数为节点深度加一。如深度为 0,节点值为 “6” 的根节点,只需要一次比较即可;深度为 1,节点转载 2022-04-11 09:06:08 · 1188 阅读 · 0 评论 -
数据结构(一):二叉树
转自数据结构(一):二叉树 - 简书 (jianshu.com)定义二叉树( binary tree )是有限节点集合构成的结构,其结构的递归定义为:三个不相交的节点集合构成,一个作为根节点,一个节点集构成的二叉树作为根节点的左子树,另一个节点集构成的二叉树作为根节点的右子树 当节点数为零时,表示二叉树为空所以节点个数为零的空树也是二叉树,二叉树根节点的左、右子树也是二叉树,其结构同样符合以上定义,当左子树为空树时,表示根节点没有左子节点。且二叉树区分左、右子树,以下两个二叉树为不同的二.转载 2022-04-11 08:54:57 · 715 阅读 · 0 评论 -
【数据结构与算法之美】07 | 链表练习
使用单链表实现如下功能单链表反转链表中环的检测两个有序的链表合并删除链表倒数第 n 个结点求链表的中间结点#include <iostream>#include <stdio.h>//单链表反转//链表中环的检测//两个有序的链表合并//删除链表倒数第 n 个结点//求链表的中间结点typedef struct _Node{ int value; struct _Node *next;}LinkList;void InitCircle.原创 2021-04-22 13:19:31 · 133 阅读 · 0 评论 -
【数据结构与算法之美】08 | 栈的练习
// StackPractice.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"class ArrayStack{private: int*arr; int n=0; int location=0;public: void InitArr(int n) { this->arr = new int[n]; this->n = n; } bool push(int x) { if (this->location ...原创 2021-04-22 13:13:14 · 88 阅读 · 0 评论 -
如何判断两条轨迹(或曲线)的相似度?
比如下图,虽然它们的重合度不高,但是它们的结构是一样的,应当认为它们是很相似的,请问如何量化的判断呢?有什么好的算法?做过一个小研究是关于判断曲线的相似性的,下面正文答案已经基本上解决了该问题。使用归一化后的Fréchet distance即可。另外也可使用Hausdorff distance,但是使用效果不如前者。推荐几篇论文仅供参考:Alt H, Godau M (1995) Computing the Fréchet distance between two polygonal cu.转载 2020-12-01 15:48:07 · 25597 阅读 · 2 评论 -
【图割】最大流最小切割的最直白解读
先看例子会好理解一点什么是图?本文针对的图主要是有向图,具体定义先不给出,先看一个具体例子:图1:示例有向图上图就是一个有向图,不用看官方定义,我们自己就能给出自己的定义:1. 有向图包含了顶点与边;2. 每一条边有两个端点,并且指明了两个端点之间的指向方向;3. 每一条边有对应的值(具体含义与具体的模型化场景有关)。以上定义虽然不是官方定义,但在本文中,这样的定义已经足够使用。为了更好的描述我们总结的定义,所以我给出一个形式化的有向图定义:图2:有向图...转载 2020-09-11 10:37:54 · 1554 阅读 · 0 评论 -
【Leetcode】经典排序算法学习C++
// base_sort.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"void BubbleSort(int* data, int total_len) { int temp = 0; for (int i = 0; i < total_len - 1; i++) { for (int j = 0; j < total_len - i - 1; j++) { if (data[j] > data[j+1]) { te.转载 2020-08-05 10:41:26 · 295 阅读 · 0 评论 -
【混沌数学】学习资料
https://www.cnblogs.com/WhyEngine/category/612488.html转载 2020-07-29 14:57:58 · 320 阅读 · 0 评论 -
【leetcode-涉及知识】数据结构 Hash表(哈希表)
https://blog.csdn.net/u011109881/article/details/80379505转载 2020-07-15 14:31:47 · 359 阅读 · 0 评论 -
【Leetcode】3、无重复字符的最长子串
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"...转载 2020-07-13 18:21:04 · 186 阅读 · 0 评论 -
【Leetcode】2、两数相加
https://www.cnblogs.com/zhaohuan1996/p/12169922.html转载 2020-07-07 22:19:47 · 155 阅读 · 0 评论 -
【Leetcode】时间复杂度
一、概念时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数)比如:一般总运算次数表达式类似于这样:a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+fa !=0时,时间复杂度就是O(2^n);a=0,b<>0 =>O(n^3);a,b=0,c<>0 =>O(n^2)依此类推eg:(1) for(i=1;i<=n;i++) //循环了n*n次,当然是O(n^2) for(j=1;转载 2020-07-02 19:14:48 · 751 阅读 · 0 评论 -
【leetcode】网址--开篇
https://leetcode-cn.com/problemset/all/转载 2020-06-30 19:20:37 · 463 阅读 · 0 评论 -
基于内容的图像检索技术:从特征到检索
基于内容的图像检索(CBIR, Content Based Image Retrieval)是相对成熟的技术领域,在工业界也有广泛的应用场景,如搜索引擎(Google、百度)的以图搜图功能,各电商网站(淘宝、Amazon、ebay)的相似商品搜索,社交平台(Pinterest)的相似内容推荐等。本文从图像检索流程出发,结合我们团队在社交应用中的相似图片、视频检索中的实践经验,介绍构建基于内容的图像检索系统所涉及的算法技术,包括特征提取、索引构建、近邻搜索等技术,供相关领域研发人员参考。在介绍视觉内容检索转载 2020-06-15 19:11:42 · 1403 阅读 · 0 评论 -
凸包算法(convex hull)
凸包算法其实很简单,就是用一个的凸多边形围住所有的点。就好像桌面上有许多图钉,用一根紧绷的橡皮筋将它们全部围起来一样。算法详细步骤:1. 找到所有点中纵坐标y最小的点,也就是这些点中最下面的点,记为p0。2. 然后计算其余点与该点的连线与x轴之间夹角的余弦值,将这些点按其对于最低点的正弦值从大到小排序,排序好的点记为p1, p2, p3, ......3. 将最低点p0和排序好的点中的第一个点p1压入栈中,然后从p2开始计算,计算栈顶两个点与该点三点向量是否是逆时针转动,若是,则将该点压转载 2020-06-10 10:57:42 · 7461 阅读 · 2 评论 -
【Milvus】使用记录
索引如何选择索引类型 (一)https://milvus.io/cn/blogs/2019-12-03-select-index.mdMilvus 索引类型https://milvus.io/cn/docs/v0.9.1/guides/index.md原创 2020-06-03 19:26:42 · 523 阅读 · 0 评论 -
【Faiss】index进阶操作(八)
index进阶操作下面介绍的方法只支持部分Index类型。从index中恢复出原始数据给定id,可以使用reconstruct或者reconstruct_n方法从index中回复出原始向量。支持IndexFlat, IndexIVFFlat (需要与make_direct_map结合), IndexIVFPQ, IndexPreTransform这几类索引类型。# 导入faissimport sysimport numpy as np sys.path.append('/home/转载 2020-05-23 13:12:58 · 3928 阅读 · 0 评论 -
【Faiss】基础index可以合成使用(七)
数据准备import numpy as np d = 512 #维数n_data = 2000 np.random.seed(0) data = []mu = 3sigma = 0.1for i in range(n_data): data.append(np.random.normal(mu, sigma, d))data = np.array(data).astype('float32')#queryquery = []n_query = 10转载 2020-05-23 13:10:17 · 714 阅读 · 0 评论 -
【Faiss】indexes 前(后)处理(五)
Pre and post processing在某些情形下,需要对Index做前处理或后处理。ID映射默认情况下,faiss会为每个输入的向量记录一个次序id,在使用中也可以为向量指定任意我们需要的id。部分index类型有add_with_ids方法,可以为每个向量对应一个64-bit的id,搜索的时候返回这个指定的id。#导入faissimport syssys.path.append('/home/maliqi/faiss/python/')import faissimpo转载 2020-05-22 17:07:39 · 5328 阅读 · 0 评论 -
【Faiss】indexes IO和index factory(四)
I/O操作faiss.write_index(index, "index_file.index") #将index保存为index_file.index文件index = faiss.read_index("index_file.index") #读入index_file.index文件#完全复制一个indexindex_new = faiss.clone_index(index)index_cpu_to_gpu = faiss.index_cpu_to_gpu()#index_cpu_转载 2020-05-22 17:00:05 · 1872 阅读 · 0 评论 -
【Faiss】快速入门(二)
Tutorial 快速入门数据准备faiss可以处理固定维度d的向量集合,这样的集合这里用二维数组表示。 一般来说,我们需要两个数组:1.data。包含被索引的所有向量元素;2.query。索引向量,我们需要根据索引向量的值返回xb中的最近邻元素。为了对比不同索引方式的差别,在下面的例子中我们统一使用完全相同的数据,即维数d为512,data包含2000个向量,每个向量符合正态分布。需要注意的是,faiss需要数组中的元素都是32位浮点数格式。 datatype = 'float32'。转载 2020-05-22 14:45:43 · 993 阅读 · 0 评论 -
【faiss】安装(一)
faiss安装使用Anaconda安装使用Anaconda安装使用faiss是最方便快速的方式,facebook会及时推出faiss的新版本conda安装包,在conda安装时会自行安装所需的libgcc, mkl, numpy模块。faiss的cpu版本目前仅支持Linux和MacOS操作系统,gpu版本提供可在Linux操作系统下用CUDA8.0/CUDA9.0/CUDA9.1编译的版本。注意,上面语句中的cuda90并不会执行安装CUDA的操作,需要提前自行安装。#安装cpu版本#转载 2020-05-22 14:38:08 · 5378 阅读 · 0 评论 -
【faiss】使用的一点总结
1,支持两种相似性计算方法:L2距离(即欧式距离)和点乘(归一化的向量点乘即cosine相似度);2,按照是否编码压缩数据可以分为两类算法,使用压缩的算法可以在单台机器上处理十亿级别的向量规模;3,并非线程安全的——不支持并行添加向量或搜索与添加的并行;仅在CPU模式下支持并行搜索;4,只有继承了IndexIVF 的算法才支持向量的 remove() 操作,但由于是连续存储,remove的时间复杂度是O(n),建议另外维护一个列表记录被删除的或尚存的向量;5,faiss 针对批量搜索做了优化;6,转载 2020-05-21 17:20:02 · 1918 阅读 · 3 评论 -
【Faiss】GPU
Fassi通过CUDA支持GPU,要求3.5以上算力,float16要求CUDA7.5+通过index_gpu_to_cpu可以将索引从GPU复制到CPU,index_cpu_to_gpu 和 index_cpu_to_gpu_multiple可以从CPU复制到GPU,并支持GpuClonerOptions来调整GPU存储对象的方式。GpuIndexFlat, GpuIndexIVFFlat 和 GpuIndexIVFPQ分别是IndexFlat, IndexIVFFlat 和 IndexIVFPQ转载 2020-05-21 15:08:06 · 1380 阅读 · 0 评论 -
【Faiss】PQ和IVF介绍
Faiss是什么Faiss是FAIR出品的一个用于向量k-NN搜索的计算库,其作用主要在保证高准确度的前提下大幅提升搜索速度,根据我们的实际测试,基于1600w 512维向量建库,然后在R100@1000 (即召回top 1000个,然后统计包含有多少个实际距离最近的top 100)= 87%的前提下单机15线程可以达到1000的qps,这个性能应该是可以满足大部分的推荐系统召回模块性能需求了。向量搜索一例:把图片转换成向量然后进行k-NN搜索从而实现相似图片匹配功能Faiss 的原理.转载 2020-05-21 11:15:38 · 14123 阅读 · 6 评论 -
【Milvus】参考链接
https://github.com/milvus-io/milvushttps://milvus.io/cn/blogs/2019-08-29-vector-search-billion.mdhttps://milvus.io/cn/docs/v0.8.0/reference/data_manage.md转载 2020-05-15 16:26:12 · 287 阅读 · 0 评论 -
【Faiss】索引选择指南(三)
1翻译 2020-05-14 16:27:41 · 2188 阅读 · 0 评论 -
【Faiss】基础使用:聚类,降维,量化
聚类import faissimport pickleimport numpy as npimport timex = np.random.random((100000, 2048)).astype('float32')ncentroids = 1000niter = 500verbose = Trued = x.shape[1]start_time = time.time()'''d:向量维度ncentroids:聚类中心niter:迭代次数verbose:.翻译 2020-05-14 14:10:05 · 6110 阅读 · 0 评论 -
Point in Polygon Strategies--判断一个点是否在某一个区域内
Point in Polygon Strategieshttp://erich.realtimerendering.com/ptinpoly/转载 2020-02-28 11:24:52 · 927 阅读 · 0 评论 -
【算法与数据结构】学习资料
基本算法与数据结构:https://www.cnblogs.com/skywang12345/category/508186.html转载 2018-12-03 16:17:02 · 242 阅读 · 0 评论 -
【算法与数据结构】AVL树
目录概要AVL树的介绍AVL树的C实现1. 节点2. 旋转AVL树的C实现(完整源码)AVL树的C测试程序概要本章介绍AVL树。和前面介绍"二叉查找树"的流程一样,本章先对AVL树的理论知识进行简单介绍,然后给出C语言的实现。本篇实现的二叉查找树是C语言版的,后面章节再分别给出C++和Java版本的实现。建议:若您对"二叉查找树"不熟悉,建议先学完"二叉查找树...转载 2018-12-04 15:42:16 · 480 阅读 · 0 评论