算法总结(一) 算法分析
来源:互联网 发布:中国f1车队知乎 编辑:程序博客网 时间:2024/05/16 17:53
算法分析
算法 数据结构 算法分析 算法复杂度
- 什么是算法
- 算法复杂度表示方法
- 例题分析
什么是算法
算法(algorithm)就是解决一个问题需要遵循的,被清楚的指定的简单指令的集合。简而言之就是解决一个问题的方法。解决问题的方法有很多种,如何最好最快的解决问题就是算法的美妙之处。我更喜欢把算法当做一种艺术,一种智慧之美
算法复杂度表示方法
四个定义:
1.如果存在正整数 c 和
2.如果存在正整数 c 和
3.
4.如果
分析一下下面的例子
程序运行时间分析
得到:
所以我们要根据不同的实际情况应用相应的算法去解决问题
从上也可以看出在数据大的时候算法优化的必要性
算法复杂度例题分析
最大区间和算法分析
题目要求:
在一串数中找到最大的区间和
算法一:
for each i (0 to N-1)for each j (i to N-1) compute the sum of subsequence for (i to j) check if it is maximum
int MaxSubsequenceSum( const int A[ ], int N ) { int ThisSum, MaxSum, i, j, k;/* 1*/ MaxSum = 0;/* 2*/ for( i = 0; i < N; i++ )/* 3*/ for( j = i; j < N; j++ ) {/* 4*/ ThisSum = 0;/* 5*/ for( k = i; k <= j; k++ )/* 6*/ ThisSum += A[ k ];/* 7*/ if( ThisSum > MaxSum )/* 8*/ MaxSum = ThisSum; }/* 9*/ return MaxSum;
算法二:
通过已经计算过的区间和求出下一个区间和
int MaxSubsequenceSum( const int A[ ], int N ) { int ThisSum, MaxSum, i, j;/* 1*/ MaxSum = 0;/* 2*/ for( i = 0; i < N; i++ ) {/* 3*/ ThisSum = 0;/* 4*/ for( j = i; j < N; j++ ) {/* 5*/ ThisSum += A[ j ];/* 6*/ if( ThisSum > MaxSum )/* 7*/ MaxSum = ThisSum; } }/* 8*/ return MaxSum; }
算法三:
通过二分法
static int Max3( int A, int B, int C ) { return A > B ? A > C ? A : C : B > C ? B : C; } static int MaxSubSum( const int A[ ], int Left, int Right ) { int MaxLeftSum, MaxRightSum; int MaxLeftBorderSum, MaxRightBorderSum; int LeftBorderSum, RightBorderSum; int Center, i;/* 1*/ if( Left == Right ) /* Base case *//* 2*/ if( A[ Left ] > 0 )/* 3*/ return A[ Left ]; else/* 4*/ return 0;/* 5*/ Center = ( Left + Right ) / 2;/* 6*/ MaxLeftSum = MaxSubSum( A, Left, Center );/* 7*/ MaxRightSum = MaxSubSum( A, Center + 1, Right );/* 8*/ MaxLeftBorderSum = 0; LeftBorderSum = 0;/* 9*/ for( i = Center; i >= Left; i-- ) {/*10*/ LeftBorderSum += A[ i ];/*11*/ if( LeftBorderSum > MaxLeftBorderSum )/*12*/ MaxLeftBorderSum = LeftBorderSum; }/*13*/ MaxRightBorderSum = 0; RightBorderSum = 0;/*14*/ for( i = Center + 1; i <= Right; i++ ) {/*15*/ RightBorderSum += A[ i ];/*16*/ if( RightBorderSum > MaxRightBorderSum )/*17*/ MaxRightBorderSum = RightBorderSum; }/*18*/ return Max3( MaxLeftSum, MaxRightSum,/*19*/ MaxLeftBorderSum + MaxRightBorderSum ); } int MaxSubsequenceSum( const int A[ ], int N ) { return MaxSubSum( A, 0, N - 1 ); }
1 0
- 算法总结(一) 算法分析
- (一)算法分析
- 算法分析(一)
- 算法分析之分治法学习总结(一)
- 算法分析之分治法学习总结(一)
- 排序算法总结分析(一)——开篇
- Apriori算法--关联分析算法(一)
- 洗牌算法分析(一)
- 算法学习(一)—— 河内之塔(汉诺塔)算法总结和分析
- 排序算法总结(一)
- 排序算法总结(一)
- 查找算法总结(一)
- 查找算法总结(一)
- 查找算法总结(一)
- 算法 简单总结(一)
- 排序算法总结(一)
- 排序算法总结(一)
- 排序算法总结(一)
- Android Studio的侧滑Demo
- 勿以浮沙筑高台
- 旋转的风车—利用css3新属性
- JDK1.5--)很重要的特性——泛型
- http协议学习
- 算法总结(一) 算法分析
- Java基础 (==和equals)
- 小朋友排队
- UVA 455 Periodic Strings(字符串的循环节)
- 多个dubbo配置中心
- Hadoop平台分析之最高效的英文单词学习顺序
- 深度学习中构造自己的图像数据集格式
- PySide简介
- Wolf and Rabbit