数据结构学习日记
来源:互联网 发布:广州淘宝摄影培训 编辑:程序博客网 时间:2024/05/23 13:54
我的目标是成为嵌入式软件工程师,所以现在自学数据结构。在”中国大学MOOC“上看视频学习,视频是浙江大学陈越、何钦铭老师讲的数据结构。从2017年3月1日-5月31日,今天已经是开课的第二周,因为上周有点忙,所以到了现在才把第一周的视频看完并把习题做了。
期间,学习了调用系统函数clock()来检测程序运行的时间。
clock()使用:
1。 包含头文件 #include<time.h>。
2。定义数据类型 clock_t start, stop;
3。duration=(double)(stop-start)/CLOCKS_PER_SEC。
本次课程最重要的是学习求,最大子列和。老师在课程中讲了4钟解法,我自己能做出第一、第二种,所以收获最大的就是学会了第三、第四种解法,第一次体会到了算法的魅力。
#include<stdio.h>#include<stdlib.h>int MaxSubseqSum2(int num[],int k);int Max3(int A,int B,int C);int MaxSubseqSum3(int num[],int k);int DivideAndConquer(int num[],int left,int right);int MaxSubseqSum4(int num[],int k);int main(void){int k;int zero=0;printf("第一行给出正整数K:"); scanf("%d",&k);printf("第二行给出K个整数,期间以空格分隔\n");int *num=(int *) malloc (sizeof(int)*k);for(int i=0;i<k;i++){scanf("%d",&num[i]);if(num[i]<=0)zero++;if(zero==(k-1)){printf("0"); return 1;}}printf("%d\n",MaxSubseqSum2(num,k));free(num);system("pause");return 0;}算法2:/** 最大子列和的算法2,时间复杂度:n^2*/int MaxSubseqSum2(int num[],int k){int ThisSum,MaxSum=0;for(int i=0;i<k-1;i++){ThisSum=num[i];for(int j=i+1;j<k;j++){ThisSum+=num[j];if(ThisSum>MaxSum)MaxSum=ThisSum;}}return MaxSum;}算法3:int Max3(int A,int B,int C){ return A>B?A>C?A:C:B>C?B:C;}/** 最大子列和的算法3,分而治之,时间复杂度:O(N log N),使用递归*/int DivideAndConquer(int num[],int left,int right){int MaxLeftSum,MaxRightSum;int MaxLeftBorderSum,MaxRightBorderSum;int LeftBorderSum,RightBorderSum;int center;if(left==right){ if(num[left]>0) return num[left]; else return 0;}center=(left+right)/2;MaxLeftSum=DivideAndConquer(num,left,center);MaxRightSum=DivideAndConquer(num,center+1,right);MaxLeftBorderSum=0;LeftBorderSum=0;for(int i=center;i>=left;i--){ LeftBorderSum+=num[i]; if(LeftBorderSum>MaxLeftBorderSum) MaxLeftBorderSum=LeftBorderSum;}MaxRightBorderSum=0;RightBorderSum=0;for(int i=center+1;i<=right;i++){ RightBorderSum+=num[i]; if(RightBorderSum>MaxRightBorderSum) MaxRightBorderSum=RightBorderSum;}return Max3(MaxLeftSum,MaxRightSum,MaxLeftBorderSum+MaxRightBorderSum);}int MaxSubseqSum3(int num[],int k){return DivideAndConquer(num,0,k-1);}算法4:int MaxSubseqSum4(int num[],int k){int ThisSum=0,MaxSum=0;int FistNum,LastNum;int i;int zero=0;for( i=0;i<k;i++){ThisSum+=num[i];if(ThisSum>MaxSum){MaxSum=ThisSum;}else if(ThisSum<0)ThisSum=0;}return MaxSum ;}哎,有点可惜的是,附加题没有做出来,要回去睡觉了,明天再来!
0 0
- 数据结构学习日记。
- 数据结构学习日记
- 数据结构学习日记——第一天
- 数据结构学习日记(第一章绪论)
- 数据结构学习日记1——队列
- 数据结构学习日记2——栈
- 数据结构学习日记之Maximum Subsequence Sum
- 学习日记
- 学习日记
- 学习日记
- 学习日记
- 学习日记
- 学习日记
- 学习日记
- 【学习日记】
- 学习日记
- 学习日记
- 学习日记
- JavaScript【彩票】
- 出师表 ---诸葛孔明
- 廖雪峰python教程阅读之循环
- 使用vs code 编辑调试php 配置
- 【LeetCode】68. Text Justification
- 数据结构学习日记
- 非洲小孩问题
- 【HDU 5666 Segment】+ 俄罗斯乘法
- canvas绘制图片详解
- splay jzoj4986 神秘物质
- 程序化广告实战分享系列
- canvas中的变换
- 安装Angular-Cli以及失败原因解决
- 常用html标签