Ying

个人博客:http://smartsi.club/

[算法系列]算法一 地理空间距离计算优化

1. 地理空间距离计算面临的挑战打开美团app,不管是筛选团购还是筛选商家,默认的排序项都是“离我最近”或者“智能排序”(如下图所示):不管是“离我最近”还是“智能排序”,都涉及到计算用户位置与各个团购单子或者商家的距离(注:在智能排序中距离作为一个重要的参数参与排序打分)。以筛选商家为例,北京地...

2017-11-15 09:52:55

阅读数:684

评论数:0

算法精品文选

[算法系列之一]堆排序 (sjf0115) [算法系列之二]二叉树各种遍历 (sjf0115) [算法系列之三]二叉树中序前序序列(或后序)求解树 (sjf0115) [算法系列之四]优先级队列 (sjf0115) [算法系列之五]快速排序 (sjf0115) [算法系列之六]二叉查找树 (sjf...

2016-01-04 20:57:37

阅读数:2291

评论数:0

[算法系列之三十二]1的数目

题目Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n.For example: Given n = 13, Ret...

2015-07-19 10:51:25

阅读数:1305

评论数:0

[算法系列之三十]Dijkstra单源最短路径算法

单源最短路径问题给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数。另外,还给定 V 中的一个顶点,称为源。现在我们要计算从源到所有其他各顶点的最短路径长度。这里的长度是指路上各边权之和。这个问题通常称为单源最短路径问题。前面Bellman-Ford最短路径算法讲了单源最短路径的B...

2015-04-23 17:30:47

阅读数:2053

评论数:0

[算法系列之二十九]Bellman-Ford最短路径算法

单源最短路径给定一个图,和一个源顶点src,找到从src到其它所有所有顶点的最短路径,图中可能含有负权值的边。Dijksra的算法是一个贪婪算法,时间复杂度是O(VLogV)(使用最小堆)。但是迪杰斯特拉算法在有负权值边的图中不适用,Bellman-Ford适合这样的图。在网络路由中,该算法会被用...

2015-04-23 15:15:27

阅读数:4990

评论数:0

[算法系列之二十九][背包问题]01背包

题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。状态转移方程...

2015-03-31 11:31:14

阅读数:1027

评论数:0

[算法系列之二十八]并查集(不相交集合)

一 概述并查集(Disjoint set或者Union-find set)是一种树型的数据结构,常用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。有一个联合-查找算法(union-find algorithm)定义了两个操作用于此数据结构:Find:确定元素属于哪一个子集。它...

2015-03-14 22:29:46

阅读数:2834

评论数:0

[算法系列之二十七]Kruskal最小生成树算法

简介求最小生成树一共有两种算法,一个是就是本文所说的Kruskal算法,另一个就是Prime算法。在详细讲解Kruskal最小生成树算法之前,让我们先回顾一下什么是最小生成树。我们有一个带权值的图,我们要求找到一个所有生成树中具有最小权值的生成树。如下图所示,T是图G的生成树。但不是具有最小权值的...

2015-03-14 17:33:28

阅读数:1801

评论数:0

[算法系列之二十六]字符串匹配之KMP算法

一 简介KMP算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。二 基于部分匹配表的KMP算...

2015-03-01 19:14:41

阅读数:1475

评论数:0

[算法系列之二十五]Ukkonen后缀树算法

所以我们从左边开始,第一次只插入单字符”a”,通过创建一个从根节点到一个叶节点的边(根节点左边),并且标记这条边[0,#],意思是说这条边代表了从0开始到当前末尾的子串。我使用#来表示当前末尾,当前末尾处在位置1(a的右边)。因此,我们拥有一棵起始树,图示如下:图示意思为:插入单字符”b”。当前末...

2015-02-28 15:30:58

阅读数:2767

评论数:0

[算法系列之二十四]后缀树(Suffix Tree)

之前有篇文章([算法系列之二十]字典树(Trie))我们详细的介绍了字典树。有了这些基础我们就能更好的理解后缀树了。一 引言 模式匹配问题给定一个文本text[0…n-1], 和一个模式串 pattern[0…m-1],写一个函数 search(char pattern[], char tex...

2015-02-27 19:03:47

阅读数:3187

评论数:0

[算法系列之二十三]线段树(Interval Tree)

一 背景在信息学竞赛中,我们经常会碰到一些跟区间有关的问题,比如给一些区 间线段求并区间的长度,或者并区间的个数等等。这些问题的描述都非常简单,但是通常情况下数据范围会非常大,而朴素方法的时间复杂度过高,导致不能在规定时间内得到问题的解。这时,我们需要一种高效的数据结构来处理这样的问题,在本文中...

2015-02-25 13:24:29

阅读数:5840

评论数:0

[算法系列之二十二]包含T全部元素的最小子窗口

题目描述给定一个包含一系列字符的集合T和字符串S,请在字符串S中找到一个最小的窗口,这个窗口中必须包含T中的所有字符。 例如, S = “ADOBECODEBANC” T = “ABC”最小窗口是“BANC”分析这是一个有趣的问题,这个有趣的问题有多种方法来解决,最好的方法是非常简单,美丽的...

2015-02-24 11:41:02

阅读数:2551

评论数:0

[算法系列之二十一]最短摘要的生成

题目描述你我在百度或谷歌搜索框中敲入本博客名称的前4个字“结构之法”,便能在第一个选项看到本博客的链接,如下图2所示: 图2 谷歌中搜索关键字“结构之法”在上面所示的图2中,搜索结果“结构之法算法之道-博客频道-CSDN.NET”下有一段说明性的文字:“程序员面试、算法研究、编程艺术、红黑树...

2015-02-23 16:36:14

阅读数:1655

评论数:0

[算法系列之二十]字典树(Trie)

又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。二 优点利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。三 性质(1)根节点不包含字符,除...

2015-02-21 22:26:18

阅读数:5042

评论数:0

[算法系列之十九]最长公共子序列

有两个字符串S1和S2,求一个最长公共子串,即求字符串S3,它们同时是S1和S2的子串,且要求它们的长度最长,并确定这个长度。这个问题我们称之为最长公共子序列问题。 与求最长递增子序列一样,我们首先将原问题分割成一些子问题,我们用dp[i][j]表示S1中前i个字符和S2中前j个字符分别组成的两...

2015-02-12 14:11:43

阅读数:1696

评论数:0

[算法系列之十八]海量数据处理之BitMap

一:简介所谓的BitMap就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了bit为单位来存储数据,因此在存储空间方面,可以大大节省。二:基本思想我们用一个具体的例子来讲解,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复)。那么我...

2015-02-07 16:34:19

阅读数:2973

评论数:0

[算法系列之十七]数据压缩之位图

在之前的文章([算法系列之十六]数据压缩之游程编码)中,我们知道了如何压缩一段重复元素组成的数据。这种压缩称为“游程编码”,该算法在无损数据压缩传输时非常方便。但问题是数据必须遵循特定格式。比如,字符串“aaaaaaaabbbbbbbb”可以被压缩成“a8b8”。此时,16个字符的字符串被压缩成4...

2015-02-07 13:49:24

阅读数:1955

评论数:0

[算法系列之十六]数据压缩之游程编码

无论现在计算机和网络的速度有多快,用户始终要求更快速的体验。为了降低传输数据的容量,我们通常会对数据进行压缩。这就是计算机科学领域一直是研究和发展的焦点的原因。数据压缩算法有很多,有些是无损的,有些是有损的,但是它们的主要目标都是降低存储空间和传输量。对于两个远距离节点之间的数据传输,这些压缩算法...

2015-02-07 12:31:03

阅读数:2735

评论数:0

[算法系列之十五]Strassen矩阵相乘算法

Strassen矩阵乘法是一种典型的分治算法。目前为止,我们已经见过一些分治策略的算法了,例如归并排序和Karatsuba大数快速乘法。现在,让我们看看分治策略的背后原理是什么。同动态规划不同,在动态规划中,为了得到最终的答案,我们需要把一个大的问题“展开”为几个子问题(“expand” the ...

2015-02-06 19:51:41

阅读数:2498

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭