- 博客(9)
- 资源 (2)
- 收藏
- 关注
原创 C 标准库qsort函数的使用
快速排序(quick sort)是最有效的排序算法之一。C实现的快速排序算法的函数名为qsort(), qsort()函数对数据对象数据进行排序。其函数原型在头文件stdlib.h中其原型为:void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *,const void *)); 第一个...
2010-11-30 20:02:24 183
原创 喝汽水问题
问题描述:1元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有20元钱,最多可以喝到几瓶汽水?这个问题其实是个比较典型的递推问题,每2个空瓶都可以再换1瓶新的汽水,这样一直递推下去,直到最后不能换到汽水为止。解法一:/* * description: * 1元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有20元钱,最多可以喝到几瓶汽水? * * auther: cm...
2010-11-28 21:51:03 166
原创 最大子段和(三)
最大子段和问题解法三:算法分析:对于序列a,设j代表当前序列的终点,i代表当前序列的起点分析:如果a[i]是负的,那么它不可能是最大子段的起点,因为任何包含a[i]为起点的子段都可以通过 用a[i+1]为起点而得到改进。类似的,任何负的子段都不可能是最优子段的前缀(原理相同). 如果在循环中检测到a[i]到a[j]的子段是负的,那么可以推进i.结...
2010-11-21 10:04:31 153
原创 最大子段和(二)
最大子段和问题 解法二:分治法算法分析:最大子段和可能在三处出现。1)整个出现在输入数据的左半部2)整个出现在右半部。 3)跨越输入数据的中部从而位于左右两半部分之中前两种情况可以递归求解,第三种情况的最大和可以通过求出前半部分的最大和(包含前半部分的最后一个元素)以及后半部分的最大和(包含后半部分的第一个元素)而得到,前后两部分和相加。三部分中的最大者,即...
2010-11-20 19:15:53 131
原创 最大子段和(一)
问题描述:给定n个整数(可能为负数)组成的序列a1,a2,a3,...,an, 求该序列子段和的最大值例如:X={-2, 11, -4, 13, -5, -2}, 其最大子段和为20最大子段为:11,-4,13解法一:穷举法列举所有的可能,求其中的最大值算法实现如下:/* * description: 最大子段和问题 * 问题描述:给定n个整数(可能为负数)...
2010-11-20 10:31:48 129
原创 动态规划之最长单调递增子序列
问题描述:找出由n个数组成的序列的最长单调递增子序列解法一:原序列记为X,对n个数递增排序,构造一个新序列Y, 对X,Y求其最长公共子序列即可./* * description: 最长单调递增子序列 * 问题描述: * 找出由n个数组成的序列的最长单调递增子序列 * 算法设计: * 解法一: * 原序列记为X,对n个数递增排序,构造一个新序列Y, 对X,Y求...
2010-11-18 22:33:56 225
原创 动态规划之最长公共子序列
一个给定序列的子序列是在该序列中删去若干元素后得到的序列。若给定序列X={x1, x2, ..., xm},则另一序列Z={z1, z2, ..., zk},X的子序列是指存在一个严格递增下标序列i, 使得对于所用的j=1, 2, 3,...,k有zj = xi.例如:序列X={A, B, C, B, D, A, B}的一个子序列Z={B, C, D, A}。给定两个序列X和Y, 当另一序...
2010-11-18 14:25:09 116
原创 矩阵连乘问题
/* description: * * 动态规划算法之矩阵连乘问题 * 1)矩阵Ai*Ai+1*...*Aj简记为A[i:j],所需的最小计算次数为m[i][j]. * 2)当i=j时,m[i][j] = 0 * 3)当 i<j时,假设使m[i][j]最小的最优次序是在Ak和Ak+1之间断开, * 则m[i][j] = m[i][k]+m[k+1][j]+p[i-1]...
2010-11-16 21:39:27 169
原创 strlen函数的自定义实现
递归法:int strlen(char *str){ if (*str != '\0') { return strlen(++str) + 1; } else { return 0; }}
2010-11-12 17:01:26 128
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人