algorithm and data structure
文章平均质量分 94
HouszChina
这个作者很懒,什么都没留下…
展开
-
C++优先队列解决哈夫曼(Huffmam)编码问题 (STL priority_queue)
优先队列解决哈夫曼(Huffmam)编码问题 (STL priority_queue)原创 2017-05-27 20:39:30 · 2228 阅读 · 0 评论 -
计算几何入门 1.6:凸包的构造——Graham Scan算法
上文简要分析出了凸包构造问题算法的下界:O(nlogn),在此就引入一种下界意义上最优的算法:Graham Scan算法。这种算法可以保证在最坏情况下时间复杂度也不超过nlogn。我们先大致了解一下算法的流程,然后通过一个例子深入算法的细节,最后给出理论性的分析。一、Graham Scan算法流程假设待处理点集S共有n个点。Graham Scan首先要做的是一个预处理排序操...原创 2018-02-08 01:03:41 · 4906 阅读 · 0 评论 -
计算几何入门 1.5:凸包构造算法下界
从极点法的O(n^4)复杂度,到极边法的O(n^3),再到增量构造法和Jarvis March的O(n^2),我们经历了将特定问题算法不断优化、降低复杂度的过程。那么还有比O(n^2)更高效的算法吗?凸包构造算法的下界是什么?推广到一般情况,在计算模型固定的情况下特定问题的复杂度下界又是如何确定的?在计算模型固定的情况下特定问题的复杂度下界(lower bound)是确定的。严谨考虑,在...原创 2018-02-06 16:11:22 · 1284 阅读 · 1 评论 -
计算几何入门 1.4:凸包的构造——Jarvis March算法
回顾凸包构造算法:极点法、极边法和增量构造法,其复杂度分别为O(n^4)、O(n^3)和O(n^2),效率经过优化已经大大提高了。接下来引入一种新的算法——Jarvis March,其复杂度也是O(n^2),但是相较于增量构造在最好情况下效率是较高的。一、选择排序依旧是先回顾一个经典算法:选择排序(selection sort)。排序过程可以归结为下图:对比插入排序,可以发现sor...原创 2018-02-06 00:32:35 · 4812 阅读 · 3 评论 -
计算几何入门 1.3:凸包的构造——增量构造法
极点法和极边法的复杂度分别为O(n^4)和O(n^3),当点集S的规模稍大时就难以适用了。为了满足实际需要必须寻找更高效的算法来构造凸包。一、减治在引入新算法之前首先来回顾一下经典的算法思想:减治(decrease and conquer),注意不是分治(divided and conquer),二者稍有区别。简单来讲就是将问题划分为一个个简单的小问题,减而治之,逐个求解,最终就能得到整个...原创 2018-02-05 16:23:38 · 2375 阅读 · 0 评论 -
计算几何入门 1.2:凸包的构造——极点法和极边法
一、极点(extreme point)继续考虑钉子与橡皮筋的例子。我们可以发现边缘上的钉子是对范围圈定“有贡献”的,而范内部的的钉子对范围圈定是“没有贡献的”。这只是直观的结论,严谨考虑我们将其抽象为极性与极点的概念。简单的数学前提:过一个点有无数直线;有向直线可以将平面划分确定的左右两部分;可以在图像上表示为:可以发现,边缘上“有贡献”的钉子,总可以找到一条穿过它的有向...原创 2018-02-04 20:40:04 · 4198 阅读 · 1 评论 -
计算几何入门 1.1:凸包的概念
一、什么是计算几何:计算几何学(computational geometry)发展于二十世纪七十年代末,是一个正在飞速发展的新型学科。作为一个计算机算法类学科的分支,计算几何讨论更多的是计算而非几何,几何只是它的表现形式,核心还是算法。现代意义上的计算几何起源于1978年M.I.Shamos的博士论文,是计算机图形学、CAD、人工智能等多领域理论基础。计算几何可以简单理解为“算法设计与分析”课...原创 2018-02-04 16:07:26 · 9995 阅读 · 0 评论 -
KMP算法实现
在KMP算法原理中,我们简要分析了KMP算法的原理,在直观上了解了算法流程,并分析了KMP算法之于暴力算法的效率提升之处。这里我们就从暴力算法出发,根据算法基本流程一步步实现典型的KMP算法。文中出现的名词:模式串(pattern,P),长度为m,当前字符指针i文本串(text,T),长度为n,当前字符指针j1.暴力算法(BF)暴力算法的是最直接的匹配算法,分别原创 2017-12-24 14:41:15 · 2227 阅读 · 2 评论 -
KMP算法原理
字符串匹配是最计算机科学的基本研究问题之一,在文档检索、生物信息等领域有着举足轻重的地位。简单来说字符串匹配问题就是:如何确定某字符串是否包含另一字符串。暴力搜索算法(Brute Force, BF)是最容易想到和实现的,但是它高达O(n^2)时间复杂度难以满足许多场景。KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现。KMP算法的特点就原创 2017-12-03 14:55:28 · 656 阅读 · 0 评论 -
计算几何入门 1.7:凸包的构造——分治法
Graham Scan算法说明了凸包构造问题的下界O(nlogn)是可以达到的。其实O(nlogn)的算法远不止这一种,分治法就是一种能达到O(nlogn)复杂度的思想。在此引入运用分治思想的两种算法来构造凸包。一、归并排序与分治思想引入新算法之前依旧先来回顾一个经典排序算法:归并排序(merge sort)。归并排序的基本流程如下:算法分为两个阶段:分(divide)和归并...原创 2018-02-08 17:26:50 · 2854 阅读 · 0 评论