摘要:#include using namespace std;templateT Pow(T x, Int n){ T r(1); // 应是含幺半群的幺元 while (n != 0) { if (n & 0x1 == 1) { r *= x; } n >>= 1; x *= x; } return r;}template T PowBoost(T x, Int n){ T r(n & 0x1 ? x : 1); while ((n >>= 1) != 0)...
阅读全文
摘要:1 int gcd(int a, int b) {2 return b == 0 ? a : gcd(b, a % b);3 }
阅读全文
摘要:1 /******************************************************************** 2 created: 2014/01/05 3 created: 22:01 4 file base: main 5 file ext: cpp 6 author: Justme0 (http://blog.csdn.net/Justme0) 7 8 purpose: 求两个等长的有序序列的中位数,时间复杂度O(log(n)) 9 ...
阅读全文
摘要:1 /******************************************************************** 2 created: 2013/10/22 3 created: 22:10:2013 12:51 4 file base: 埃拉托色尼筛子 5 file ext: cpp 6 author: Justme0 (http://blog.csdn.net/Justme0) 7 8 purpose: 高效筛选素数 9 *******...
阅读全文
摘要:1.试验目的输入:一组任意的规则。输出:相应的Chomsky 文法的类型。2.实验原理1).0型文法(短语文法)如果对于某文法G,P中的每个规则具有下列形式: u:: = v其中u∈V+,v∈V*,则称该文法G为0型文法或短语文法,简写为PSG。0型文法或短语结构文法的相应语言称为0型语言或短语结构语言L0。这种文法由于没有其他任何限制,因此0型文法也称为无限制文法,其相应的语言称为无限制性语言。任何0型语言都是递归可枚举的,故0型语言又称递归可枚举集。这种语言可由图灵机(Turning)来识别。2).1型文法(上下文有关文法)如果对于某文法G,P中的每个规则具有下列形式: xUy:: = x
阅读全文
摘要:快速排序(递归):#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;#define LEN 8 // 有LEN个元素要排#define TESTstruct Record { // 为了考察排序的稳定性,定义元素是结构体类型 int key; int otherinfo;};int Partition(Record *arr, int low, int high){ // 交换顺序表L中子序列arr[low..high]的记录,使枢轴记录到位, // 并返回...
阅读全文
摘要:表插入时间复杂度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 .
阅读全文
摘要:折半插入排序时间复杂度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
阅读全文
摘要:在常用算法总排序是最常用的算法之一!而快排在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..
阅读全文
摘要:直接插入排序时间复杂度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
阅读全文
摘要: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
阅读全文
摘要: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
阅读全文
摘要: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];
阅读全文
摘要:单调递增最长子序列描述求一个字符串的最长递增子序列的长度如: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[*
阅读全文
摘要: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
阅读全文
摘要: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、今天看了动态规划的入门,觉得
阅读全文
摘要:众所周知,计算机里动辄涉及到斐波拉契数列,本文主要是运用线性代数的方法求出广义斐波拉契数列的通项公式。广义斐波拉契数列的定义(自定义,可能还不够严谨,欢迎指教)如下:且a,b满足a^2 + 4b > 0(原因后面有,即保证分母Δ>0)观察递推公式可知: (1)OK!写这篇博客有两点启示:1.亦可用差分方程的方法求通项公式,不过我还没学,我发现把递推关系用矩阵的形式写成再求通项也是可以的,不过要构造出这个关系比较困难,比如(1)式。2.在一般的算法中求矩阵的幂几乎都是用二分法求,殊不知若λi下有ki个线性无关的特征向量(ki是λi的重根数),即可用相似对角形的方法求,这在高等数学里可
阅读全文