![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Algorithms
静革 justme0.com
这个作者很懒,什么都没留下…
展开
-
我的第一个动态规划程序(试图用递归求斐波拉契数)
1、这是一般的递归(指数爆炸型,时间复杂度O(1.618^n)): #include #include using namespace std;__int64 Fib(int n){ if(n == 1 || n == 2) return 1; return Fib(n - 1) + Fib(n - 2);}int main(void){ int n; while原创 2012-04-07 14:31:09 · 2367 阅读 · 0 评论 -
旋转字符串(循环移位,rotate)
旋转字符串是个经典问题。要求:时间复杂度O(n),空间复杂度O(1)。接口描述:http://www.sgi.com/tech/stl/rotate.html《编程珠玑》、《编程之美》上都有这个问题,关于左旋右旋整个旋的方法我就不说了。我的想法是,先左右比较,长的一段的大部分移到另一端,再递归进行余下的。比如: char str1[] = "abcdefghijkl原创 2013-01-14 18:11:00 · 2243 阅读 · 0 评论 -
POJ 1151 Atlantis(离散化+扫描线)
题目大意:求N个矩形的并的总面积。http://poj.org/problem?id=1151参考了黑书上讲离散化的那两页,想到了上学期学的计算机图形学里的多边形填充算法。src:/******************************************************************** created: 2013/03/28 created:原创 2013-03-28 11:59:05 · 1551 阅读 · 0 评论 -
八皇后问题
1、介绍先上张图来说明用回溯法解八皇后问题的每一步: 2、程序对着严蔚敏的书写的,写好后运行竟然一次性成功了,没有任何bug,我鸡冻了。上代码:// N皇后问题#include using namespace std;#define N 8bool matrix[N + 1][N + 1] = {0};bool原创 2012-05-06 22:03:20 · 37887 阅读 · 15 评论 -
用有限自动机实现正则表达式的匹配
问题:在主串中查找是否存在正则表达式为 abc*d?e 的匹配,下面用有限自动机的方法查找,该正则表达式的最简 DFA 如下状态转换表如下图所示程序中用二维数组定义如下#define STATES_NUMBER 5#define LETTER_NUMBER 5// 表示 abc*d?e 的最简 DFA 的状态转换表(-1表示不接受)int trans_table[STA原创 2014-03-08 18:33:12 · 8161 阅读 · 0 评论 -
【算法】插入排序 insertion_sort
准备写个《STL 源码剖析》的读书笔记,开个专栏,名为《STL 的实现》,将源码整理一遍。很喜欢侯捷先生写在封底的八个字:天下大事,必作于细!他在书中写到:我开玩笑地对朋友说,这本书出版,给大学课程中的「数据结构」和「算法」两门授课老师出了个难题。几乎所有可能的作业题目(复杂度证明题除外),本书都有了详尽的解答。然而,如果学生能够从庞大的SGISTL源码中干净抽出某一部份,加上自己的包装,做为呈堂作业,也足以证明你有资格获得学分和高分。事实上,追踪一流作品并于其中吸取养份,远比自己关起门来写个三流作品,价原创 2014-04-22 17:20:19 · 3243 阅读 · 1 评论 -
【算法】第 n 小数 nth_element
STL 中取第 n 小数的算法 nth_element 的函数原型如下template<class RandomAccessIterator>void nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last);算法说明:1、功能:执行 nth_element 后,nth 所指位置的元素将是整个区间有序时在该处的元素。对 [first, nth) 中的任意迭代器 i 和 [n原创 2014-04-30 16:48:02 · 3194 阅读 · 0 评论 -
【算法】划分 partition
STL 中的划分算法 partition 的函数原型如下template ForwardIterator partition(ForwardIterator first, ForwardIterator last, Predicate pred);四点说明:1、作用:将 [first, last) 中所有满足 pred 的元素置于不满足 pred 的元素前面。2、返回值:设返回的迭代原创 2014-04-25 21:44:52 · 6790 阅读 · 0 评论 -
【算法】中位数 median
median 是 STL 内部的算法,用于求三个数的中位数,它将用于 std::sort, std::nth_element 的实现中,快速排序和求第 k 小数算法都用到了划分,选取 pivot 时为“三者取中”,即 *first, *(first + (last - first) / 2), *(last - 1) 三者的中位数,这两个算法后面会介绍。median 的源码如下:templ原创 2014-04-26 22:23:39 · 6916 阅读 · 0 评论 -
插入排序之表插入
表插入时间复杂度O(n^2)附加空间O(1)稳定排序#define _CRT_SECURE_NO_WARNINGS#include using namespace std;#define LEN 8 // 有LEN个元素要排struct Record { // 为了考察排序的稳定性,定义元素是结构体类型 int key; int otherinfo; int原创 2012-05-20 00:09:44 · 1419 阅读 · 0 评论 -
POJ 1088 滑雪(DP)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1088 先MARK,待自己慢慢研究出来再A! http://www.cppblog.com/AClayton/archive/2007/09/17/32336.aspx #include #include #include using namespace std;#defin原创 2012-04-10 19:23:21 · 696 阅读 · 0 评论 -
幂取模
a的n次方模p __int64 PowerMod( __int64 a, __int64 n, __int64 p ){ __int64 ans = 1; __int64 d = a % p; do { if(n & 1) ans = (ans * d) % p; d = (d * d) % p; } while(n >>= 1); return ans;}原创 2012-04-01 19:32:36 · 717 阅读 · 0 评论 -
矩阵的特征值 => 矩阵的幂 => 广义斐波拉契数列的通项公式
众所周知,计算机里动辄涉及到斐波拉契数列,本文主要是运用线性代数的方法求出广义斐波拉契数列的通项公式。广义斐波拉契数列的定义(自定义,可能还不够严谨,欢迎指教)如下:且a,b满足a^2 + 4b > 0(原因后面有,即保证分母Δ>0) 观察递推公式可知: (1) OK!写这篇博客原创 2012-03-29 09:58:07 · 3343 阅读 · 0 评论 -
最大公约数(Greatest Common Divisor ) 与 最小公倍数(Lowest Common Multiple )
今天开始准备做个系列,专门存快速简洁的算法代码。当然了,共享是必需的! 如果只用到 gcd 就只需贴第一个函数,要用到 lcm 就全贴上。int gcd(int a, int b){ return b == 0 ? a : gcd(b, a % b);}int lcm(int a, int b){ return a / gcd(a, b) * b;} 2012/原创 2012-04-01 18:35:59 · 1337 阅读 · 1 评论 -
插入排序之折半插入排序
折半插入排序时间复杂度O(n^2)附加空间O(1)稳定排序#define _CRT_SECURE_NO_WARNINGS#include using namespace std;#define LEN 8 // 有LEN个元素要排struct Record { // 为了考察排序的稳定性,定义元素是结构体类型 int key; int otherinfo;};原创 2012-05-19 21:09:52 · 5282 阅读 · 0 评论 -
插入排序之直接插入排序
直接插入排序时间复杂度O(n^2)附加空间O(1)稳定排序#define _CRT_SECURE_NO_WARNINGS#include using namespace std;#define LEN 8 // 有LEN个元素要排struct Record { // 为了考察排序的稳定性,定义元素是结构体类型 int key; int otherinfo;};原创 2012-05-19 16:47:08 · 1214 阅读 · 1 评论 -
汉诺塔问题
Tower of Hanoi // 把n个盘子从1(a)号柱子借助2(b)号柱子移到3(c)号柱子// 总共要移 2^n-1 次#include using namespace std;void Move(int &x, int &y) // 没有真正移动盘子,只是输出方案{ cout " << y << endl;}void Hanoi(int原创 2012-04-21 22:49:07 · 3324 阅读 · 1 评论 -
AOJ 189 最长递增子序列(DP)
单调递增最长子序列 描述求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4输入第一行一个整数0随后的n行,每行有一个字符串,该字符串的长度不会超过10000输出输出字符串的最长递增子序列的长度样例输入3aaaababcabklmncdefg样例输出137 Accepted #include原创 2012-04-08 16:39:32 · 1679 阅读 · 0 评论 -
POJ 1163 数字三角形问题(DP)
http://poj.org/problem?id=11631、普通递归#include #include #include using namespace std;#define __max(a,b) (((a) > (b)) ? (a) : (b))#define MAXNUM 101int N;int aMax[MAXNUM][MAXNUM]; // a原创 2012-04-07 19:11:22 · 2134 阅读 · 0 评论 -
求二叉树的带权路径长度(深搜或广搜)
考研昨天结束了,专业课我考得不好,是408,算法题13分。今年是求二叉树的带权路径长度,我就写了算法思想,代码空白,因为时间来不及了,慌了,是心态的问题吧,做到最后有种天要塌下来的感觉,回来后很沮丧,因为我觉得自己是可以写出程序的,不服啊! 下面说说这道题目。树的带权路径长度(Weighted Path Length)定义:树中所有叶子的带权路径长度之和。比如下面这棵树,WPL就是3*原创 2014-01-06 17:28:56 · 7815 阅读 · 3 评论