- 博客(6)
- 资源 (20)
- 收藏
- 关注
原创 最大公约数算法
<br />最大公约数算法分析<br />看到《编程之美》的最大公约数一节时,理解了一个以前一直不理解的高效GCD算法,此处总结一下。<br />最大公约数GCD算法中,较为经典的要数《几何原本》里面的辗转相除法,用f(x, y)表示x与y的最大公约数,则f(x, y) = f(y, x%y),当y为0时返回x。该算法最大的缺陷是需要模运算,对于大数模运算是非常耗时的,模运算本质上是除运算,而除运算可以由基本的加减运算来替代,因此一个改进算法如下:<br />F(x, y) = f(y, x-y),(x >
2011-05-06 11:49:00 1599
原创 STL next_permutation与prev_mutation解析
这两个函数主要实现的功能是排列组合方面的操作,以前对于序列的全排列算法递归的、非递归的都看过几个,最近看《STL源码剖析》,感觉SGI STL里面的实现也颇为巧妙。 首先说下next_permutation,该函数求当前序列的下一个组合,算法很巧妙,具体思想是:从最尾端开始寻找两个相邻的元素,令第一个元素是i,第二个元素是ii,且*i template bool next_permutation(BidirectionalIterator first,
2010-12-30 11:48:00 1238
原创 单链表快速排序
今天在学习《程序员使用算法》时,看到了单链表快排序这一节。初看时感觉程序有很大的问题,但是细细品味之后却发现程序设计的极为巧妙,同时又深感自己C语言指针知识之不牢固,特别是指针的指针方面的知识。单链表的快排序和数组的快排序基本思想相同,同样是基于划分,但是又有很大的不同:单链表不支持基于下标的访问。故书中把待排序的链表拆分为2个子链表。为了简单起见,选择链表的第一个节点作为基准,然后进行比较,
2010-04-06 21:49:00 9325 10
原创 字符串模式匹配之一-------BM & KMP
【注】本文参考了数据结构和算法方面的书籍和网上资料。字符串模式匹配有着广泛的应用,如求最大公共子串、最长回文字符串、L-Gap、数据压缩、DNA序列匹配等问题。所谓模式匹配就是在目标字符串中寻找字串的过程,要寻找的字串即为模式。目前主流的模式匹配算法不外乎BF、KMP、BM等等。本小节主要讨论前两个算法。BF(Bruce Force)算法可以说是模式匹配算法中最简单、最容易理解的一个。
2010-03-22 19:46:00 2388 1
原创 大数乘法
近期学习STL,愈发感觉C++之博大精深。一个vector就包含着诸多内容。而语言只是工具,学习语言目的是为了解决问题。近期又是一年复试时,而复试上机有许多学校考察了大数运算方面的知识,例如大数加法、大数乘法和间接考察相关知识的大数阶乘。在学习vector时,突然发现用vector可以很方便的实现大数乘法。 关于大数乘法,可以使用数组、字符串string等容器来存储数
2010-03-21 15:29:00 5001 2
原创 N皇后问题
N皇后问题是一个经典的问题,在一个NXN得棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一列、同一行、同一斜行上的皇后都会自动攻击)。最初接触该问题是在学习人工智能时,在学习算法时再次接触该问题。N皇后问题时算法中回溯法应用的一个经典案例。在着手解决该问题时,可以将其拆分为几个小问题。首先就是在棋盘上如何判断两个皇后是否能够相互攻击,在最初接触这个问题时,首先想到的方法就是把棋盘存储为
2010-03-14 13:51:00 13882 6
c++ and c for good
2007-06-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人