随笔分类 - C
摘要:假设数组含有n个元素,则提取数组中的每一个元素做一次头元素,然后全排列除数组中除第一个元素之外的所有元素,这样就达到了对数组中所有元素进行全排列的得目的。【这句话才是重点!】比如 1,2,3.的全排列就是分别以1,2,3开始的全排列。 以1开始的全排列也就是2,3.的全排列,(2,3)的全排列就是分别以2和3开始的全排列。设全排列R(n1,n2,n3.....nn),可以化简为分别以n1,n2,n3……开始的全排列。即 n1R1(n2,n3.....nn),n2R2(n1,n3.....nn),n3R3(n1,n2,.....nn)……nnR(n1,n2,n3.....)...
阅读全文
摘要:一.BF算法 --传统算法 BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。 举例说明:S: ababcababaP:ababa BF算法匹配的步骤如下 i=0 i=1 i=2 i=3 i=4 第一趟:ababcababa 第二趟:ababcababa 第三趟:ababcababa 第四趟:ab...
阅读全文
摘要:将正整数n表示成一系列正整数之和,n=n1+n2+…+nk,其中n1>=n2>=…>=nk>=1,k>=1。正整数n的这种表示称为正整数n的划分。正整数n的不同的划分个数称为正整数n的划分数,记作p(n)。例如正整数6有如下11种不同的划分,所以p(6)=11。6;5+1;4+2,4+1+1;3+3,3+2+1,3+1+1+1;2+2+2,2+2+1+1,2+1+1+1+1;1+1+1+1+1+1.在正整数n所有不同的划分中,将最大加数n1不大于m的划分个数记作q(n,m),称它为属于n的一个m划分。根据n和m的关系,考虑以下几种情况:(1)当n=1时,不论m的值
阅读全文
摘要:【声明】:非常感谢http://blog.sina.com.cn/s/blog_6dcd26b301013810.html,给我带来的帮助。看这个图片表示的意思:w[i]表示第i件物品的容积 ,p[i]第i件物品的价值。c[i][j] 表示 第i件物品装入容积为j 的空间中的最高价值。 其中i是物品编号,j代表当前背包的容积。非常重要的状态转移方程: C[i][j] = max(C[i-1][j],C[i-1][j-w[i]]+p[i])C[i-1][j]表示放第i-1件物品,背包容量为j的总价值。C[i-1][j-w[i]]表示存放第i-1件物品,背包容量为 j-w[i] 的总价值;再加上.
阅读全文
摘要:在上一篇的文章中说到了,最长回文子串的问题,并且提到了基本的解决办法,即暴力求解法。效率O(N^3)中心法求最长回文子串我们知道回文字符串是以字符串中心对称的,如abba以及aba等。一个更好的办法是从中间开始判断,因为回文字符串以字符串中心对称。一个长度为N的字符串可能的对称中心有2N-1个,至于这里为什么是2N-1而不是N个,是因为可能对称的点可能是两个字符之间,比如abba的对称点就是第一个字母b和第二个字母b的中间。因此可以依次对2N-1个中心点进行判断,求出最长的回文字符串即可。所以,要考虑回文是奇数还是偶数的情况。#include#include#include#define MA
阅读全文
摘要:C程序一直由下列部分组成:正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令;初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。栈——增长方向:自顶向下增长;自动变量以及每次函数调用时所需要保存的信息,即保存现场(返回地址;环境信息)。堆——动态存储分。static关键字的作用: 1.全局静态变量 在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。 1).内存中的位置:静态存储区(静态存储区在整个程序运行期间...
阅读全文
摘要:标准IO库存在着两个缺陷。首先,它是在某一台特定类型的机器上实现的,而没有考虑其他的具有不同特性的机器。这样就可能导致在其中的一台机器上运行很好的程序,在另外一台机器上却出现错误,而这其中的原因仅仅是因为两台机器的架构不同;第二,设计者发现第一个缺陷之后,试图去修正函数库,如果这样做了,却是的标准IO库失去“标准”的含义。从这方面来讲,C语言缺少可移植性。在开发大型的程序的时候,效率较低。
阅读全文
摘要:perror()函数的函数原型void perror(char const *message);它会将message信息输出出来,后面再加上错误原因字符串。下面是来自百度百科的实例:#include int main(void){ FILE *fp ; fp = fopen( "/root/noexitfile", "r+" ); if ( NULL == fp ) { perror("/root/noexitfile"); } return 0;}
阅读全文
摘要:动态分配内存#include#includeint compare_integers(void const *a,void const *b){ register int const *pa = a; register int const *pb = b; return *pa>*pb ? 1:*pa<*pb ? -1:0;}int main(){ int *array; int n_value; int i; printf("How many values are there?\n"); if(scanf("%d",&n_value
阅读全文
摘要:首先,结构在C语言中也是一种数据类型,叫做聚组类型(还包括数组)。他和其他的数据类型是一样的,在定义一个结构体的时候,系统并不会为他真正的分配内存空间(定义的结构体变量要在编译的阶段才分配空间,而结构体指针要显示的使用malloca来分配空间),也就是说,在定义结构体这种数据类型的时候是不会分配内存空间的,只有在定义变量的时候,才会分配。下面是摘自百度百科 对结构题存储的三点:1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除; 2) 结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会 在成员之间加上填充字节;3) 结构体的总大小为结构体最宽基本类型成员.
阅读全文

浙公网安备 33010602011771号