算法
文章平均质量分 81
随心随意随缘
这个作者很懒,什么都没留下…
展开
-
向量循环移位之高效实现
问题:n个元素的向量V循环移位(以左移为例)i个位置,例如12345循环移动2个位置得到34512.问题本身非常简单,以至于我们一看到问题就能想到对应的解决策略:申请i个字节的动态存储,将向量区间[0,i-1]的i个元素存储至临时存储器,之后将[i,n]的n-i+1个元素向左移动i个位置,并将临时存储器中的i个元素写回原向量区间中[n-i+1,n]。但如果我们强加一些限制:在现有可申请原创 2011-09-25 00:00:03 · 8974 阅读 · 2 评论 -
模式识别-查找向量中元素之和最大的连续子向量
Dennis Ritchie的主页:http://cm.bell-labs.com/who/dmr/index.html“他出生,他工作,他走了。” ——海德格尔10.9.他走了,在此缅怀一下,感谢他做出的杰出贡献。这个系列最初的几篇文章主要注重的是算法的复杂度分析和一些设计方面需要考虑的东西,问题本身不会太难,但随着复杂度分析的深入理解和掌握将逐渐面向高级数据结构(堆、树原创 2011-10-16 23:59:17 · 6360 阅读 · 0 评论 -
排序大集锦(三):基于随机访问下标的排序
基于数组中元素之间的比较的排序算法被称为比较排序。其基本思想非常简单,假定在待排序数组a[0..n-1]中存在任意两个元素a[i]及a[j],若a[i]≥a[j],那么在最终的序列中a[i]必定在a[j]之后。对于这类算法,实际可以通过决策树来简单描述其工作过程,考虑一个具有三个元素的数组a[0..2],比较过程如下图所示:如上图所示,在由决策树所得到的解空间中总共有3!=6种结果原创 2012-01-06 18:32:18 · 4643 阅读 · 0 评论 -
浅谈散列
通俗的说,程序是能够完成既定目标的具有特定逻辑组织形式的指令集序列。既然有现实的需求,那么我们知道外界环境必然会给予程序某些特定形式的“输入”,然而在机器的内部,这种“输入”将转换为数据的形式,继而这就要求我们为用以描述现实世界需求的数据建立一个结构化的模型,使其能够被机器指令高效的处理。通常,对于数据的处理无外乎以下几种:读取/更新/删除数据项,或者插入新项,其中除插入外其他几种操作均要求对集合原创 2012-01-26 22:09:19 · 13589 阅读 · 1 评论 -
排序大集锦(一):构建健壮的快速排序
文章标题虽然冠名为“构建健壮的快速排序”,但本文将由浅入深逐步介绍三种排序方法,分别为:插入排序、归并排序以及快速排序,最后我们将仔细分析各个排序的优缺点,汲取各种排序之精华,去其中之糟粕,构建出一个基于比较的健壮的快速排序,所构建出的算法若不考虑通用接口的设计,则将远远快于C中的qsort快排库函数。由于升序和降序的原理相同,故在整个排序系列中将按照升序的方式进行分析。在进入正文之前,首先需要解原创 2011-11-04 23:37:24 · 4994 阅读 · 1 评论 -
排序大集锦(二):N叉堆排序及优先级队列
首先需要明白何谓“堆”。逻辑上它是一种特殊的树形结构,而其物理实现仅仅是一维数组,如下所示:上图中节点中的数表示元素的索引,将索引从1开始而不是0,可以使得整棵树从当前节点获得其孩子节点的操作对于根节点来说也是适用的,而额外“浪费”的这个空间可以用做哨兵使得比较操作的次数更少。可简单得出两点结论:①除顶层与底层之外,每一层的节点数与上层节点数的比值固定。②最底层的叶子节点尽可能原创 2011-12-08 22:33:32 · 5156 阅读 · 0 评论 -
解构公共子串及K阶马尔可夫随机文本
搜索是一个常谈常新的话题,不仅有对数值型数据的搜索,更多的时候还有对字符类型的数据进行搜索的要求。比如常用的各大搜索引擎都是通过获取用户所输入的字符型数据,之后根据引擎自身所采用的算法将输入与网页数据库中存储的信息匹配,最后将这些信息对应的网页链接返回给用户,本文介绍内容之一的公共子串匹配算法就属于文本匹配算法之一。另外计算机科学在分子生物学中一个重要的应用领域即为比对(alignment),打个原创 2012-02-19 00:52:18 · 9367 阅读 · 5 评论