算法1:根据Regex构建NFA - McNaughton-Yamada-Thompson算法输入:字母表∑上的一个正则表达式r。输出:一个接受L(r)的NFA N。方法:首先对r进行语法分析,分解出组成它的子表达式。构建NFA的规则分为基本规则和归纳规则。基本规则:处理不包含运算符的子表达式。 ....
分类:
其他好文 时间:
2015-01-11 06:11:58
阅读次数:
391
前言 想必大家都听过数据挖掘领域那个经典的故事 - "啤酒与尿布" 的故事。 那么,具体是怎么从海量销售信息中挖掘出啤酒和尿布之间的关系呢? 这就是关联分析所要完成的任务了。 本文将讲解关联分析领域中最为经典的Apriori算法,并给出具体的代码实现。关联分析领域的一些概念 1. 频繁项集...
分类:
编程语言 时间:
2015-01-09 17:13:21
阅读次数:
188
和分治思想的第一次相遇
当问题的规模是可以划分的时候,分治的算法往往是很有效的:
不断分割问题的规模,直到子问题的规模足够小便直接求解,之后不断整合子问题的解得到更大规模的解,最后得到完全解。
归并排序就是分治算法的一个简单的例子。
可能有人觉得快速排序也是属于分治算法,但我不这么觉得,因为快速排序是先得到大问题的解的一部分,再靠子问题来完成解,
并没有整合子问题这一步,所以硬要说的...
分类:
编程语言 时间:
2015-01-08 02:09:41
阅读次数:
290
生活中的“插入排序”
扑克牌我们大部分人都玩过,当然也都知道该怎么把刚抓上来的牌放哪里,最后得到一手排好的牌。但其中所蕴含的算法原理
不知道你有没有想过。计算机科学家把人的这一直观想法翻译为计算机程序于是便有了我们所说的插入排序:
图示
代码(C++)
/*************************************
函数:插入排序
说...
分类:
编程语言 时间:
2015-01-06 18:06:14
阅读次数:
208
为什么叫快速排序
这个标题是带有歧义的,每一种排序都有自己的名字,有的是发明者+排序(Shell排序),有的是用的步骤名称+排序(插入排序)...
而快速排序是以它的属性+排序为名(这不是废话吗)。那么我再换个意义明确的标题:
快速排序为什么那么快
要弄明白这一点首先需要了解基于比较的排序模型:决策树
对大小为n的输入,其位置关系有n!种可能。排序算法的工作就是在所有...
分类:
编程语言 时间:
2015-01-06 10:14:03
阅读次数:
249
题目链接:HDOJ - 5155题目大意有一个 n * m 的棋盘,已知每行每列都至少有一个棋子,求可能有多少种不同的棋子分布情况。答案对一个大素数取模。题目分析算法1: 使用容斥原理与递推。 首先,一个 n * m 的棋盘不考虑任何限制时,可能的分布情况为 2^(n*m) ,除去没有棋子的情况.....
分类:
其他好文 时间:
2015-01-04 15:02:55
阅读次数:
152
一、聚类:聚类也称之为自动分类,是一种无监督的学习方法。算法的原则是基于度量数据对象之间的相似性或相异性,将数据对象集划分为多个簇;相比较于分类技术,聚类只需要较少的专家知识(领域知识),就可以自动发掘数据集中的群组。
二、基本的聚类方法包括:
1、划分方法:该方法通常基于距离使用迭代重定位技术,通过将一个对象移入另外一个簇并更新簇心,典型的算法有K-均值算法和K-中心点算法(二者的主要区别在...
分类:
编程语言 时间:
2015-01-02 17:37:52
阅读次数:
193
我们经常会说一个算法快不快,这个可以由实验得出,也可以通过分析复杂度得出。实验需要大量不同的输入才更全面准确,否则片面地看某个输入下的表现,是比较偏颇的。分析复杂度(通常分析最坏,因为平均涉及输入的概率分布,依靠假设或者实验和经验)有时候并不是一个简单的事,简单的情况是遍历 for(int i = 0; i != n; i++) 的这种情况,显然是O(n)的复杂度。但是一些复杂的情况就比较难办了,...
分类:
编程语言 时间:
2014-12-30 00:32:51
阅读次数:
242
【题目】
Merge k sorted
linked lists and return it as one sorted list. Analyze and describe its complexity.
合并几个有序链表为一个,分析算法复杂度。
【分治】
直观的想法是两两合并,有两种方法:1)list1和list2合并为newlist2,newlist2再和list3合...
分类:
其他好文 时间:
2014-12-26 11:12:18
阅读次数:
129
Fleury (弗罗莱) 算法通俗解释
1.定义
2.举例说明
图2为连通图G,现利用Fleury算法求它的欧拉通路。(注意区分:欧拉通路、欧拉回路)
其中一种欧拉通路如下:4 5 8 7 6 8 9 1 5 3 2 4 6,其搜索路径如下图所示:
现在让我们来分析算法实现过程:
假设我们这样走:4,6,8,5,此时在5处有三种选择(3,4,1...
分类:
编程语言 时间:
2014-12-23 17:23:07
阅读次数:
1632