数据结构与算法
文章平均质量分 97
JieFeiLau
术极,近乎道也。
展开
-
最长公共子序列问题解析
首先子序列是指一个一个序列中,由若个数(字母)组成,然后从中任意删掉几个数(字母),保留剩下的数(字母)构成了一个序列,即称子序列。(或者从一个序列中,任意选取若干数或字符,按照这些数或字符原来的排序组成新的序列,即称子序列)子串是指在一个字符串中任意选取连续的一段字符串,即称子串。1首先看一下 最大子序列。最大子序列是要找出由数组成的一维数组中和最大的连续子序列。比如{5,-3,4,...原创 2018-08-21 11:05:48 · 1054 阅读 · 0 评论 -
树与二叉树5之B树、B+树及R树
动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率。 上一篇中我们了解了多叉树...原创 2018-10-17 19:14:03 · 923 阅读 · 0 评论 -
图论3之图的最短路径算法
上一篇我们讨论了图的遍历,实际问题中图的深度遍历是我们更常用的,除了图的遍历,我们一般遇到的问题更多是关于图的路径的问题。本篇将介绍图的四种常用遍历算法一、深度或广度优先搜索算法(解决单源最短路径)从起始结点开始访问所有的深度遍历路径或广度优先路径,则到达终点结点的路径有多条,取其中路径权值最短的一条则为最短路径。/***先输入n个结点,m条边,之后输入有向图的m条边,边的前两元...原创 2018-10-22 19:40:28 · 1044 阅读 · 0 评论 -
图论1之图的基础知识
图(graph)是数据结构和算法学中最强大的框架之一(或许没有之一)。图几乎可以用来表现所有类型的结构或系统,从交通网络到通信网络,从下棋游戏到最优流程,从任务分配到人际交互网络,图都有广阔的用武之地。而要进入图论的世界,清晰、准确的基本概念是必须的前提和基础。下面对其最核心和最重要的概念作出说明。一、图的基本组成图(graph)并不是指图形图像(image)或地图(map)。通常来说...原创 2018-10-18 13:56:26 · 1483 阅读 · 0 评论 -
图论4之图的最小生成树及拓扑排序
生成树 同一个连通图可以有不同的生成树。例如对于图9-1(a),其余3个子图都是它的生成树。在每棵生成树中都包含8个顶点和7条边,即n个顶点和n-1条边,此时n等于原图中的顶点数8,它们的差别只是边的选取方法不同。 在这3棵生成树中,图9-1(b)中的边集是从图9-1(a)中的顶点V0出发,利用深度优先搜索遍历的方法而得到的边集,此图是原图的深度优先生成树;图9-1(c)中...原创 2018-10-22 20:51:45 · 627 阅读 · 0 评论 -
排序算法总结
一、概述基本的排序算法在经过前人呕心沥血的研究下基本可以分为以下十种,当然除此之外,还有结合多种算法思想基于他们的改进变种。在插入、选择、交换这三大类基于比较的排序算法中,时间复杂度会随着优化程度在O(n^2)~O(nlogn)之间变化,希尔排序、快速排序、堆排序分别代表着杰出的优化策略。基于分治递归思想的归并排序将待排数据像二叉树一样分化至最简单的一个数排序问题,子问题合并时间复...原创 2018-11-20 12:44:49 · 424 阅读 · 0 评论 -
图论算法之Gale-Shapley算法
Gale-Shapley算法近来学习了很有趣的Gale-Shapley算法,又名求婚-拒绝算法。#!/usr/bin/env python# _*_ coding:utf-8 _*_# Some basic testing for your code is provided below. DO NOT modify# these tests. Your code MU...原创 2018-11-20 20:01:56 · 2940 阅读 · 0 评论 -
在几何图形中均匀随机取点算法总结及Delaunay三角剖分算法介绍
在工作中遇到一个需求,需要在圆形 矩形,三角形内随机,尽量均匀取点作为位置信息,但是random得到的信息有时候不是很满意。这里讨论一下第一种错误思路:根据圆的解析式 (假设圆心在原点)我们可以先随机生成[-R, R]范围内横坐标x,然后生成 范围内的随机数y,(x,y)就是需要的点。我们写程序模拟了该过程,从下图可以看出,我们可以看到当x靠近圆的边缘使,y的范围减小,因此两边边缘...原创 2018-11-21 12:43:51 · 10897 阅读 · 0 评论 -
错位排列问题
该问题的变形如下:例如有{ n}封写好了的信,收件人不同,胡乱放入{ n}个写了地址的信封中,寄出,求没有一个收件人收到他所应接收的信的概率。问题解决首先考虑几种简单的情况:原序列长度为1 序列中只有一个元素,位置也只有一个,这个元素不可能放在别的位置上,因此原序列长度为1时该为题的解是0。原序列长度为2 设原序列为{a,b},则全错位排列只需将两个元素对调位置{b,a...原创 2018-11-21 14:23:33 · 3927 阅读 · 0 评论 -
海量数据处理总结
当数据量变大的时候,一些适用较小量数据的算法可能不适用了,需要重新考虑具体处理措施何谓海量数据处理? 所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/b...原创 2018-11-22 11:42:52 · 1029 阅读 · 0 评论 -
shortURL短地址压缩算法
我们在QQ微博上发布网址的时候,微博会自动判别网址,并将其转换,例如:http://url.cn/2hytQx现在让你来设计TinyURL的实现,以下问题要怎么设计:(1):域名后面的编码如何实现? (2):对于已经映射过的一个URL,怎么查找已存在的TinyUrl? (3):有10亿个url,一个服务上存不下,需要多台服务器,怎么设计实现(4):让你来设计这样一个服务,最大的问题是什...原创 2018-11-22 14:47:12 · 1580 阅读 · 0 评论 -
树与二叉树3之平衡二叉树
上一篇我们介绍了二叉查找树,尽管其实现简单,但也有其明显的局限性一、从二叉查找树到平衡二叉树一个二叉查找树是由n个节点随机构成,所以,对于某些情况,二叉查找树会退化成一个有n个节点的线性链.如下图: b图为一个普通的二叉查找树,a图中,如果我们的根节点选择不恰当如最小或者最大的数,那么二叉查找树就完全退化成了线性结构链表,因此,在二叉查找树的基础上,又出现了AVL树,红黑树,它们...原创 2018-10-17 15:45:06 · 639 阅读 · 0 评论 -
完美洗牌算法
题目详情有个长度为2n的数组{a1,a2,a3,...,an,b1,b2,b3,...,bn},希望排序后{a1,b1,a2,b2,....,an,bn},请考虑有无时间复杂度o(n),空间复杂度0(1)的解法。 分析与解法 解法一、暴力破解为了便于分析,我们取n=4,那么题目要求我们把a1,a2,a3,a4,b1,b2,b3,b4变成a1,b1,a2,b2,a3,...原创 2018-10-12 18:40:24 · 1115 阅读 · 0 评论 -
字符串查找之KMP
2. 暴力匹配算法 假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢? 如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有:如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符; 如果失配(即S[i]! = P[j]),令i = i - (j ...转载 2018-08-31 11:19:50 · 1600 阅读 · 0 评论 -
字符编码与霍夫曼编码
哈夫曼编码是哈夫曼树的一个应用。哈夫曼编码应用广泛,如JPEG中就应用了哈夫曼编码。 首先介绍什么是哈夫曼树。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的 路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为WPL= (W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值W...原创 2018-09-04 11:22:56 · 5645 阅读 · 0 评论 -
天平与假币的算法思考
题目 有12枚硬币,其中有且只有1枚是假币,但不知道是重还是轻。现给定一架没有砝码的天平,问至少需要多少次称量才能确保找到这枚假币? 进一步:如何证明某个方案是最少次数?思想 对于该问题,最简单的想法是把硬币分成2堆,天平左右各放6个,每堆6枚放到天枰上称量,这样的得到的结果一定是天枰是倾斜的。得不到任何其他信息,反而白白浪费了一次称...原创 2018-09-04 19:02:57 · 2605 阅读 · 3 评论 -
Catalan数相关的算法问题
卡特兰数是组合数据中一个常在各种计数问题中出现的数列,由比利时的数学家欧仁.查理.卡特兰(1814-1894)命名。Catalan数的定义:令h(0)=1,Catalan数满足递归式:h(n)= h(0)*h(n-1) + h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=0)。该递推关系的解为:h(n) = C(2n-2,n-1)/n,n=1,2,3,...(其...原创 2018-08-30 10:34:43 · 1371 阅读 · 0 评论 -
算法之八皇后问题详解暨终极极限挑战
八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n1×n1,而皇后个数也变成n2。而且仅当 n2 = 1 或 n1 ≥ 4 时问题有解。八皇后问题最早是由国际西洋棋棋手马克斯...原创 2018-09-13 15:04:16 · 6797 阅读 · 4 评论 -
求解最长回文子串问题及Manacher算法
题目:求字符串的最长回文子串回文子串的定义: 给定字符串str,若s同时满足以下条件: s是str的子串 , s是回文串 则,s是str的回文子串。思路一:暴力穷举穷举字符串的所有子串,对每一个进行判断是否为回文串#!/usr/bin/env python# -*- coding: utf-8 -*-"""暴力求解"""def Longpalindrome(src, s...原创 2018-09-29 17:07:27 · 270 阅读 · 0 评论 -
树与二叉树1之树的基础概念
树是数据结构中非常重要的一部分,我们这里将会讨论以下一些问题一、树的基本定义1、树的简介树是一种非线性的数据结构,是由n(n >=0)个结点组成的有限集合。如果n==0,树为空树。如果n==1,则该树只有一个特定的结点,根结点,根结点只有直接后继,没有直接前驱。除根结点以外的其他结点划分为m(m>=0)个互不相交的有限集合,T0,T1,T2,...,Tm-1,每个...原创 2018-10-13 14:15:23 · 349 阅读 · 0 评论 -
图论2之图的遍历
上一篇我们介绍了图的基础,接下来介绍图的遍历图的遍历是指从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次。图的遍历操作和树的遍历操作功能相似。图的遍历是图的一种基本操作,图的其它算法如求解图的连通性问题,拓扑排序,求关键路径等都是建立在遍历算法的基础之上。由于图结构本身的复杂性,所以图的遍历操作也较复杂,主要表现在以下四个方面:① 在图结构中,没有一个“自然”的首结点,图中任意...原创 2018-10-18 18:35:00 · 421 阅读 · 0 评论 -
树与二叉树2之二叉树基本操作与遍历
从上一篇中我们学习了二叉树,接下来介绍我们常用的二叉查找树(BST)的一些基本操作插入删除查找及二叉树的遍历1. 二叉搜索树定义 二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree)。 二叉搜索树是具有有以下性质的二叉树: (1)若左子树不为空,则左子树上所有节点的值均小于或等于它的根节点的值。 (2)若右子树不为空,则右子树...原创 2018-10-15 20:32:26 · 293 阅读 · 0 评论 -
树与二叉树4之从多叉树到红黑树
一、二叉树到多叉树树结构是为了方便快捷的实现查找操作的,树的高度是命中查找的一个不可抗拒的时间下限。在一定的数据条件下,树的高度和宽度是互相制约的。(就像一定面积下,矩形的长和宽是互相制约的。)二叉树尽管简单易于实现,实际中构造出来的树的高度很很高的,不利于查找,也就有了我们上一篇中关于平衡二叉树的内容,那么如何能降低树的高度呢?这就需要引入多叉树,通过加大树的宽度来降低其高度 二...原创 2018-10-17 10:13:36 · 593 阅读 · 0 评论 -
最近公共祖先LCA求解
1. 树上倍增对于求 LCA, 最朴素的方法是"让两个点一起往上爬, 直到相遇", "如果一开始不在同一深度, 先爬到同一深度". 树上倍增求 LCA 的方法同样基于这个道理, 只不过利用了倍增思想从而加速了"向上爬"的操作. 也就是说, 每次向上爬的高度不是 1, 而是 2 的幂.我们用 f(i,j)f(i,j) 表示从节点 ii 向上爬 2j2j 的高度所到达的节点, 则 f(i,0)...原创 2018-11-26 14:03:50 · 221 阅读 · 0 评论