随笔分类 -  Algorithms

插入排序之表插入
摘要:表插入时间复杂度O(n^2)附加空间O(1)稳定排序#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; #define LEN 8 // 有LEN个元素要排 struct Record { // 为了考察排序的稳定性,定义元素是结构体类型 int key; int otherinfo; int next; }; void LinkListInsertSort(Record *arr, int length) // length是要排序的元素的个数,0号单元除外 { for (int i . 阅读全文

posted @ 2012-05-20 00:09 c语言源码 阅读(178) 评论(0) 推荐(0)

插入排序之折半插入排序
摘要:折半插入排序时间复杂度O(n^2)附加空间O(1)稳定排序#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; #define LEN 8 // 有LEN个元素要排 struct Record { // 为了考察排序的稳定性,定义元素是结构体类型 int key; int otherinfo; }; void BInsertSort(Record *arr, int length) // length是要排序的元素的个数,0号单元除外 { for (int i = 2; i <= le 阅读全文

posted @ 2012-05-19 21:09 c语言源码 阅读(330) 评论(0) 推荐(0)

qsort函数的cmp
摘要:在常用算法总排序是最常用的算法之一!而快排在c 的 stdlib库中是有现成的封装对于我们写算法是提供了方便之处的!一 、对int类型数组排序int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; }qsort(arry, N, sizeof(arry[0]), cmp);qsort(指向一个要排序数组的首地址, 指要排序数组的元素个数, 指每个元素的大小, cmp); 这个是一个从大到小的排序如果要从小到大排序可以讲cmp函数改为如下: int cmp(constvoid *a,constvoid.. 阅读全文

posted @ 2012-05-19 19:31 c语言源码 阅读(1081) 评论(0) 推荐(0)

插入排序之直接插入排序
摘要:直接插入排序时间复杂度O(n^2)附加空间O(1)稳定排序#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; #define LEN 8 // 有LEN个元素要排 struct Record { // 为了考察排序的稳定性,定义元素是结构体类型 int key; int otherinfo; }; void InsertSort(Record *arr, int length) // length是要排序的元素的个数,0号单元除外 { for (int i = 2; i <= len 阅读全文

posted @ 2012-05-19 16:47 c语言源码 阅读(285) 评论(0) 推荐(0)

久仰的八皇后问题
摘要:1、介绍先上张图来说明用回溯法解八皇后问题的每一步: 2、程序对着严蔚敏的书写的,写好后运行竟然一次性成功了,没有任何bug,我鸡冻了。上代码:// N皇后问题 #include <iostream> using namespace std; #define N 8 bool matrix[N + 1][N + 1] = {0}; bool IsLegal(bool matrix[N + 1][N + 1], const int &i, const int &j) { // 判断前面的i-1个棋子与matrix[i][j]是否冲突,i为1时合法 for (int m 阅读全文

posted @ 2012-05-06 22:03 c语言源码 阅读(353) 评论(0) 推荐(1)

汉诺塔问题(竟然还与Sierpiński三角形分形有关)
摘要:Tower of Hanoi// 把n个盘子从1(a)号柱子借助2(b)号柱子移到3(c)号柱子 // 总共要移 2^n-1 次 #include <iostream> using namespace std; void Move(int &x, int &y) // 没有真正移动盘子,只是输出方案 { cout << x << " --> " << y << endl; } void Hanoi(int n, int a, int b, int c) { if(n > 0) { Han 阅读全文

posted @ 2012-04-21 22:49 c语言源码 阅读(266) 评论(0) 推荐(0)

滑雪(二维平面上 动态规划)
摘要:http://acm.pku.edu.cn/JudgeOnline/problem?id=1088先MARK,待自己慢慢研究出来再A!http://www.cppblog.com/AClayton/archive/2007/09/17/32336.aspx#include <iostream> #include <cstdio> #include <cstdlib> using namespace std; #define MAXNUM 10 int dlen[MAXNUM][MAXNUM]; unsigned int a[MAXNUM][MAXNUM]; 阅读全文

posted @ 2012-04-10 19:23 c语言源码 阅读(293) 评论(0) 推荐(0)

最长递增子序列(LIS) 学习中ing
摘要:单调递增最长子序列描述求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4输入第一行一个整数0<n<20,表示有n个字符串要处理随后的n行,每行有一个字符串,该字符串的长度不会超过10000输出输出字符串的最长递增子序列的长度样例输入3 aaa ababc abklmncdefg样例输出1 3 7Accepted #include<stdio.h> int length(char * s) { int len[128] = {0}, i, t; for(; *s != '\0' && (t = len[* 阅读全文

posted @ 2012-04-08 16:39 c语言源码 阅读(543) 评论(0) 推荐(0)

POJ 1163题 数字三角形问题(动态规划)
摘要:http://poj.org/problem?id=11631、普通递归#include <iostream> #include <cstring> #include <cstdio> using namespace std; #define __max(a,b) (((a) > (b)) ? (a) : (b)) #define MAXNUM 101 int N; int aMax[MAXNUM][MAXNUM]; // aMax is memorandum int matrix[MAXNUM][MAXNUM]; int Max(int i, int 阅读全文

posted @ 2012-04-07 19:11 c语言源码 阅读(425) 评论(0) 推荐(0)

我的第一个动态规划程序(试图用递归求斐波拉契数)
摘要:1、这是一般的递归(指数爆炸型,时间复杂度O(1.618^n)):#include <iostream> #include <cstdio> 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(cin >> n) printf("%I64d\n", Fib(n)); return 0; }2、今天看了动态规划的入门,觉得 阅读全文

posted @ 2012-04-07 14:31 c语言源码 阅读(270) 评论(0) 推荐(0)

矩阵的特征值 => 矩阵的幂 => 广义斐波拉契数列的通项公式
摘要:众所周知,计算机里动辄涉及到斐波拉契数列,本文主要是运用线性代数的方法求出广义斐波拉契数列的通项公式。广义斐波拉契数列的定义(自定义,可能还不够严谨,欢迎指教)如下:且a,b满足a^2 + 4b > 0(原因后面有,即保证分母Δ>0)观察递推公式可知: (1)OK!写这篇博客有两点启示:1.亦可用差分方程的方法求通项公式,不过我还没学,我发现把递推关系用矩阵的形式写成再求通项也是可以的,不过要构造出这个关系比较困难,比如(1)式。2.在一般的算法中求矩阵的幂几乎都是用二分法求,殊不知若λi下有ki个线性无关的特征向量(ki是λi的重根数),即可用相似对角形的方法求,这在高等数学里可 阅读全文

posted @ 2012-03-29 09:58 c语言源码 阅读(351) 评论(0) 推荐(0)

导航